/** * Save config section * Require set: section, website, store and groups * * @throws \Exception * @return $this */ public function save() { $this->initScope(); $sectionId = $this->getSection(); $groups = $this->getGroups(); if (empty($groups)) { return $this; } $oldConfig = $this->_getConfig(true); $deleteTransaction = $this->_transactionFactory->create(); /* @var $deleteTransaction \Magento\Framework\DB\Transaction */ $saveTransaction = $this->_transactionFactory->create(); /* @var $saveTransaction \Magento\Framework\DB\Transaction */ // Extends for old config data $extraOldGroups = []; foreach ($groups as $groupId => $groupData) { $this->_processGroup($groupId, $groupData, $groups, $sectionId, $extraOldGroups, $oldConfig, $saveTransaction, $deleteTransaction); } try { $deleteTransaction->delete(); $saveTransaction->save(); // re-init configuration $this->_appConfig->reinit(); $this->_storeManager->reinitStores(); // website and store codes can be used in event implementation, so set them as well $this->_eventManager->dispatch("admin_system_config_changed_section_{$this->getSection()}", ['website' => $this->getWebsite(), 'store' => $this->getStore()]); } catch (\Exception $e) { // re-init configuration $this->_appConfig->reinit(); $this->_storeManager->reinitStores(); throw $e; } return $this; }