Esempio n. 1
0
 /**
  * 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;
 }
Esempio n. 2
0
 /**
  * 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);
     }
 }
Esempio n. 3
0
 /**
  * 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;
 }