/** * 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 = array(); 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()}", array('website' => $this->getWebsite(), 'store' => $this->getStore())); } catch (\Exception $e) { // re-init configuration $this->_appConfig->reinit(); $this->_storeManager->reinitStores(); throw $e; } return $this; }
/** * Initialize currently ran store * * @param \Magento\Framework\StoreManagerInterface $storage * @param array $arguments * @return void * @throws \Magento\Framework\App\InitException */ protected function _reinitStores(\Magento\Framework\StoreManagerInterface $storage, $arguments) { Profiler::start('init_stores'); $storage->reinitStores(); Profiler::stop('init_stores'); $scopeCode = $arguments['scopeCode']; $scopeType = $arguments['scopeType'] ?: ScopeInterface::SCOPE_STORE; if (empty($scopeCode) && false == is_null($storage->getWebsite(true))) { $scopeCode = $storage->getWebsite(true)->getCode(); $scopeType = ScopeInterface::SCOPE_WEBSITE; } switch ($scopeType) { case ScopeInterface::SCOPE_STORE: $storage->setCurrentStore($scopeCode); break; case ScopeInterface::SCOPE_GROUP: $storage->setCurrentStore($this->_getStoreByGroup($storage, $scopeCode)); break; case ScopeInterface::SCOPE_WEBSITE: $storage->setCurrentStore($this->_getStoreByWebsite($storage, $scopeCode)); break; default: throw new \Magento\Framework\App\InitException('Store Manager has not been initialized properly'); } $currentStore = $storage->getStore()->getCode(); if (!empty($currentStore)) { $this->_checkCookieStore($storage, $scopeType); $this->_checkRequestStore($storage, $scopeType); } }
/** * Saves currency symbol to config * * @param $symbols array * @return $this */ public function setCurrencySymbolsData($symbols = array()) { foreach ($this->getCurrencySymbolsData() as $code => $values) { if (isset($symbols[$code])) { if ($symbols[$code] == $values['parentSymbol'] || empty($symbols[$code])) { unset($symbols[$code]); } } } if ($symbols) { $value['options']['fields']['customsymbol']['value'] = serialize($symbols); } else { $value['options']['fields']['customsymbol']['inherit'] = 1; } $this->_configFactory->create()->setSection(self::CONFIG_SECTION)->setWebsite(null)->setStore(null)->setGroups($value)->save(); $this->_eventManager->dispatch('admin_system_config_changed_section_currency_before_reinit', array('website' => $this->_websiteId, 'store' => $this->_storeId)); // reinit configuration $this->_coreConfig->reinit(); $this->_storeManager->reinitStores(); $this->clearCache(); $this->_eventManager->dispatch('admin_system_config_changed_section_currency', array('website' => $this->_websiteId, 'store' => $this->_storeId)); return $this; }