protected function setUp() { $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $this->storeManager = $objectManager->get('Magento\\Store\\Model\\StoreManagerInterface'); $this->storeManager->reinitStores(); $this->pathProcessor = $objectManager->get('Magento\\Webapi\\Controller\\PathProcessor'); }
/** * @param \Magento\Store\Model\ResourceModel\Group $object * @param callable $proceed * @param AbstractModel $group * @return \Magento\Store\Model\ResourceModel\Group * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundSave(\Magento\Store\Model\ResourceModel\Group $object, \Closure $proceed, AbstractModel $group) { $originGroup = $group; $result = $proceed($originGroup); if (!$group->isObjectNew() && ($group->dataHasChangedFor('website_id') || $group->dataHasChangedFor('root_category_id'))) { $this->storeManager->reinitStores(); foreach ($group->getStoreIds() as $storeId) { $this->urlPersist->deleteByData([UrlRewrite::STORE_ID => $storeId]); } $this->urlPersist->replace($this->generateCategoryUrls($group->getRootCategoryId(), $group->getStoreIds())); $this->urlPersist->replace($this->generateProductUrls($group->getWebsiteId(), $group->getOrigData('website_id'))); } return $result; }
/** * 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; }
/** * Saves currency symbol to config * * @param $symbols array * @return $this */ public function setCurrencySymbolsData($symbols = []) { 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', ['website' => $this->_websiteId, 'store' => $this->_storeId]); // reinit configuration $this->_coreConfig->reinit(); $this->_storeManager->reinitStores(); $this->clearCache(); //Reset symbols cache since new data is added $this->_symbolsData = []; $this->_eventManager->dispatch('admin_system_config_changed_section_currency', ['website' => $this->_websiteId, 'store' => $this->_storeId]); return $this; }
/** * Initialize currently ran store * * @param \Magento\Store\Model\StoreManagerInterface $storage * @param array $arguments * @return void * @throws \Magento\Framework\Exception\State\InitException */ protected function _reinitStores(\Magento\Store\Model\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 == ($storage->getWebsite(true) === null)) { $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\Exception\State\InitException(__('Store Manager has not been initialized properly')); } $currentStore = $storage->getStore()->getCode(); if (!empty($currentStore)) { $this->_checkCookieStore($storage, $scopeType); $this->_checkRequestStore($storage, $scopeType); } }