![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/extmag/shiplab/Controller/Adminhtml/Configuration/ |
<?php /** * Copyright © Extmag. All rights reserved. */ namespace Extmag\Shiplab\Controller\Adminhtml\Configuration; use Extmag\Shiplab\Controller\Adminhtml\Configuration; use Extmag\Shiplab\Helper\Config; use Extmag\Shiplab\Model\Cache\Type; use Extmag\Shiplab\Model\ConfigFactory; use Exception; use Magento\Backend\App\Action\Context; use Magento\Backend\Model\View\Result\ForwardFactory; use Magento\Backend\Model\View\Result\Redirect; use Magento\Config\Model\Config\Factory; use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface; use Magento\Framework\Cache\FrontendInterface; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Stdlib\StringUtils; use Magento\Framework\View\Result\PageFactory; class Save extends Configuration implements HttpPostActionInterface { public const ADMIN_RESOURCE = 'Extmag_Shiplab::shiplab_configuration_save'; /** * Backend Config Model Factory * * @var Factory */ protected $_configFactory; /** * @var FrontendInterface */ protected $_cache; /** * @var StringUtils */ protected $string; /** * @param Context $context * @param ForwardFactory $resultForwardFactory * @param PageFactory $resultPageFactory * @param Config $configStructure * @param ConfigFactory $configFactory * @param Type $cache * @param StringUtils $string */ public function __construct( Context $context, ForwardFactory $resultForwardFactory, PageFactory $resultPageFactory, Config $configStructure, ConfigFactory $configFactory, Type $cache, StringUtils $string ) { parent::__construct($context, $resultForwardFactory, $resultPageFactory, $configStructure); $this->_configFactory = $configFactory; $this->_cache = $cache; $this->string = $string; } /** * @return Redirect */ public function execute() { try { // custom save logic $this->_saveSection(); $section = $this->getRequest()->getParam('section'); $store = $this->getRequest()->getParam('store'); $direction = $this->getRequest()->getParam('direction'); $country = $this->getRequest()->getParam('country'); $configData = [ 'section' => $section, 'store' => $store, 'direction' => $direction, 'country' => $country, 'groups' => $this->_getGroupsForSave(), ]; /** @var \Extmag\Shiplab\Model\Config $configModel */ $configModel = $this->_configFactory->create(['data' => $configData]); $configModel->save(); $this->_eventManager->dispatch( 'extmag_shiplab_configuration_save', [ 'configData' => $configData, 'request' => $this->getRequest(), ] ); $this->_configStructure->clearCache(); $this->messageManager->addSuccessMessage(__('You saved the configuration.')); } catch (LocalizedException $e) { $messages = explode("\n", $e->getMessage()); foreach ($messages as $message) { $this->messageManager->addErrorMessage($message); } } catch (Exception $e) { $this->messageManager->addExceptionMessage( $e, __('Something went wrong while saving this configuration:') . ' ' . $e->getMessage() ); } $this->_saveState($this->getRequest()->getPost('config_state')); /** @var Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); return $resultRedirect->setPath( '*/*/edit', [ '_current' => ['section', 'store', 'direction', 'country'], '_nosid' => true, ] ); } /** * Custom save logic for section * * @return void */ protected function _saveSection() { $method = '_save' . $this->string->upperCaseWords($this->getRequest()->getParam('section'), '_', ''); if (method_exists($this, $method)) { $this->{$method}(); } } /** * Get groups for save * * @return array|null */ protected function _getGroupsForSave() { $groups = $this->getRequest()->getPost('groups'); $files = $this->getRequest()->getFiles('groups'); if ($files && is_array($files)) { /** * Carefully merge $_FILES and $_POST information * None of '+=' or 'array_merge_recursive' can do this correct */ foreach ($files as $groupName => $group) { $data = $this->_processNestedGroups($group); if (!empty($data)) { if (!empty($groups[$groupName])) { $groups[$groupName] = array_merge_recursive((array)$groups[$groupName], $data); } else { $groups[$groupName] = $data; } } } } return $groups; } /** * Process nested groups * * @param mixed $group * @return array */ protected function _processNestedGroups($group) { $data = []; if (isset($group['fields']) && is_array($group['fields'])) { foreach ($group['fields'] as $fieldName => $field) { if (!empty($field['value'])) { $data['fields'][$fieldName] = ['value' => $field['value']]; } } } if (isset($group['groups']) && is_array($group['groups'])) { foreach ($group['groups'] as $groupName => $groupData) { $nestedGroup = $this->_processNestedGroups($groupData); if (!empty($nestedGroup)) { $data['groups'][$groupName] = $nestedGroup; } } } return $data; } /** * Advanced save procedure * * @return void */ protected function _saveAdvanced() { $this->_cache->clean(); } }