storeRepository = $storeRepository; $this->storeCookieManager = $storeCookieManager; $this->request = $request; $this->storePathInfoValidator = $storePathInfoValidator; $this->storesData = $storesData; $this->runMode = $scopeCode ? $runMode : ScopeInterface::SCOPE_WEBSITE; $this->scopeCode = $scopeCode; } /** * @inheritdoc */ public function getCurrentStoreId() { list($stores, $defaultStoreId) = $this->getStoresData(); $storeCode = $this->storePathInfoValidator->getValidStoreCode($this->request); if (!$storeCode) { $storeCode = $this->request->getParam( \Magento\Store\Model\StoreManagerInterface::PARAM_NAME, $this->storeCookieManager->getStoreCodeFromCookie() ); } if (is_array($storeCode)) { if (!isset($storeCode['_data']['code'])) { throw new \InvalidArgumentException(__('Invalid store parameter.')); } $storeCode = $storeCode['_data']['code']; } if ($storeCode) { try { $store = $this->getRequestedStoreByCode($storeCode); } catch (\Magento\Framework\Exception\NoSuchEntityException $e) { $store = $this->getDefaultStoreById($defaultStoreId); } if (!in_array($store->getId(), $stores)) { $store = $this->getDefaultStoreById($defaultStoreId); } } else { $store = $this->getDefaultStoreById($defaultStoreId); } return $store->getId(); } /** * Get stores data * * @return array */ protected function getStoresData() : array { return $this->storesData->getStoresData($this->runMode, $this->scopeCode); } /** * Read stores data. First element is allowed store ids, second is default store id * * @return array * @deprecated 101.0.0 * @see \Magento\Store\Model\StoreResolver::getStoresData */ protected function readStoresData() : array { return $this->getStoresData(); } /** * Retrieve active store by code * * @param string $storeCode * @return \Magento\Store\Api\Data\StoreInterface * @throws \Magento\Framework\Exception\NoSuchEntityException */ protected function getRequestedStoreByCode($storeCode) : \Magento\Store\Api\Data\StoreInterface { try { $store = $this->storeRepository->getActiveStoreByCode($storeCode); } catch (StoreIsInactiveException $e) { throw new \Magento\Framework\Exception\NoSuchEntityException(__('Requested store is inactive')); } return $store; } /** * Retrieve active store by code * * @param int $id * @return \Magento\Store\Api\Data\StoreInterface * @throws \Magento\Framework\Exception\NoSuchEntityException */ protected function getDefaultStoreById($id) : \Magento\Store\Api\Data\StoreInterface { try { $store = $this->storeRepository->getActiveStoreById($id); } catch (StoreIsInactiveException $e) { throw new \Magento\Framework\Exception\NoSuchEntityException(__('Default store is inactive')); } return $store; } }