123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Store\Model;
- /**
- * Class used to resolve store from url path or get parameters or cookie.
- */
- class StoreResolver implements \Magento\Store\Api\StoreResolverInterface
- {
- /**
- * Cache tag
- */
- const CACHE_TAG = 'store_relations';
- /**
- * @var \Magento\Store\Api\StoreRepositoryInterface
- */
- protected $storeRepository;
- /**
- * @var \Magento\Store\Api\StoreCookieManagerInterface
- */
- protected $storeCookieManager;
- /**
- * @deprecated 101.0.0
- */
- protected $cache;
- /**
- * @deprecated 101.0.0
- */
- protected $readerList;
- /**
- * @var string
- */
- protected $runMode;
- /**
- * @var string
- */
- protected $scopeCode;
- /**
- * @var \Magento\Framework\App\Request\Http
- */
- protected $request;
- /**
- * @var StoresData
- */
- private $storesData;
- /**
- * @var \Magento\Store\App\Request\StorePathInfoValidator
- */
- private $storePathInfoValidator;
- /**
- * @param \Magento\Store\Api\StoreRepositoryInterface $storeRepository
- * @param \Magento\Store\Api\StoreCookieManagerInterface $storeCookieManager
- * @param \Magento\Framework\App\Request\Http $request
- * @param \Magento\Store\Model\StoresData $storesData
- * @param \Magento\Store\App\Request\StorePathInfoValidator $storePathInfoValidator
- * @param string|null $runMode
- * @param string|null $scopeCode
- */
- public function __construct(
- \Magento\Store\Api\StoreRepositoryInterface $storeRepository,
- \Magento\Store\Api\StoreCookieManagerInterface $storeCookieManager,
- \Magento\Framework\App\Request\Http $request,
- \Magento\Store\Model\StoresData $storesData,
- \Magento\Store\App\Request\StorePathInfoValidator $storePathInfoValidator,
- $runMode = ScopeInterface::SCOPE_STORE,
- $scopeCode = null
- ) {
- $this->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;
- }
- }
|