From b4e31139cbf7c83fa26f0bef8f966318fee2cfc5 Mon Sep 17 00:00:00 2001 From: Marcel Moldovan Date: Thu, 27 Apr 2017 16:24:06 +0300 Subject: [PATCH 1/3] :bug: Fix not detecting current store using store code in url Use $storeManager->getStore()->getId() instead of $storeResolver->getCurrentStoreId() --- .../Block/Checkout/DirectoryDataProcessor.php | 16 +++++++-------- .../Address/Attribute/Source/Country.php | 20 +++++++++---------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/app/code/Magento/Checkout/Block/Checkout/DirectoryDataProcessor.php b/app/code/Magento/Checkout/Block/Checkout/DirectoryDataProcessor.php index 1866f255d4018..71dabef334c79 100644 --- a/app/code/Magento/Checkout/Block/Checkout/DirectoryDataProcessor.php +++ b/app/code/Magento/Checkout/Block/Checkout/DirectoryDataProcessor.php @@ -6,7 +6,7 @@ namespace Magento\Checkout\Block\Checkout; use Magento\Directory\Helper\Data as DirectoryHelper; -use Magento\Store\Api\StoreResolverInterface; +use Magento\Store\Model\StoreManagerInterface; /** * Directory data processor. @@ -37,9 +37,9 @@ class DirectoryDataProcessor implements \Magento\Checkout\Block\Checkout\LayoutP private $countryCollectionFactory; /** - * @var StoreResolverInterface + * @var StoreManagerInterface */ - private $storeResolver; + private $storeManager; /** * @var DirectoryHelper @@ -49,18 +49,18 @@ class DirectoryDataProcessor implements \Magento\Checkout\Block\Checkout\LayoutP /** * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollection * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollection - * @param StoreResolverInterface $storeResolver + * @param StoreManagerInterface $storeManager * @param DirectoryHelper $directoryHelper */ public function __construct( \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollection, \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollection, - StoreResolverInterface $storeResolver, + StoreManagerInterface $storeManager, DirectoryHelper $directoryHelper ) { $this->countryCollectionFactory = $countryCollection; $this->regionCollectionFactory = $regionCollection; - $this->storeResolver = $storeResolver; + $this->storeManager = $storeManager; $this->directoryHelper = $directoryHelper; } @@ -91,7 +91,7 @@ private function getCountryOptions() { if (!isset($this->countryOptions)) { $this->countryOptions = $this->countryCollectionFactory->create()->loadByStore( - $this->storeResolver->getCurrentStoreId() + $this->storeManager->getStore()->getId() )->toOptionArray(); $this->countryOptions = $this->orderCountryOptions($this->countryOptions); } @@ -108,7 +108,7 @@ private function getRegionOptions() { if (!isset($this->regionOptions)) { $this->regionOptions = $this->regionCollectionFactory->create()->addAllowedCountriesFilter( - $this->storeResolver->getCurrentStoreId() + $this->storeManager->getStore()->getId() )->toOptionArray(); } diff --git a/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Country.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Country.php index bcb07e74308fa..e0c271a82185c 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Country.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Country.php @@ -11,9 +11,7 @@ */ namespace Magento\Customer\Model\ResourceModel\Address\Attribute\Source; -use Magento\Checkout\Model\Session; use Magento\Framework\App\ObjectManager; -use Magento\Store\Api\StoreResolverInterface; use Magento\Store\Model\StoreManagerInterface; /** @@ -28,9 +26,9 @@ class Country extends \Magento\Eav\Model\Entity\Attribute\Source\Table protected $_countriesFactory; /** - * @var StoreResolverInterface + * @var StoreManagerInterface */ - private $storeResolver; + private $storeManager; /** * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory @@ -55,7 +53,7 @@ public function getAllOptions() { if (!$this->_options) { $this->_options = $this->_createCountriesCollection()->loadByStore( - $this->getStoreResolver()->getCurrentStoreId() + $this->getStoreManager()->getStore()->getId() )->toOptionArray(); } return $this->_options; @@ -70,16 +68,16 @@ protected function _createCountriesCollection() } /** - * Retrieve Store Resolver + * Retrieve Store Manager * @deprecated - * @return StoreResolverInterface + * @return StoreManagerInterface */ - private function getStoreResolver() + private function getStoreManager() { - if (!$this->storeResolver) { - $this->storeResolver = ObjectManager::getInstance()->get(StoreResolverInterface::class); + if (!$this->storeManager) { + $this->storeManager = ObjectManager::getInstance()->get(StoreManagerInterface::class); } - return $this->storeResolver; + return $this->storeManager; } } From 0fcb792c3ab3b34c44e4faac0e0446abe0c41018 Mon Sep 17 00:00:00 2001 From: Marcel Moldovan Date: Wed, 17 May 2017 16:28:09 +0300 Subject: [PATCH 2/3] Use store manager instead of store resolver --- .../Unit/Block/Checkout/DirectoryDataProcessorTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Checkout/Test/Unit/Block/Checkout/DirectoryDataProcessorTest.php b/app/code/Magento/Checkout/Test/Unit/Block/Checkout/DirectoryDataProcessorTest.php index bcfd39ee5a0c0..ddfee8e4d8751 100644 --- a/app/code/Magento/Checkout/Test/Unit/Block/Checkout/DirectoryDataProcessorTest.php +++ b/app/code/Magento/Checkout/Test/Unit/Block/Checkout/DirectoryDataProcessorTest.php @@ -35,7 +35,7 @@ class DirectoryDataProcessorTest extends \PHPUnit_Framework_TestCase /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $storeResolverMock; + protected $storeManagerMock; /** * @var \PHPUnit_Framework_MockObject_MockObject @@ -72,8 +72,8 @@ protected function setUp() '', false ); - $this->storeResolverMock = $this->getMock( - \Magento\Store\Api\StoreResolverInterface::class + $this->storeManagerMock = $this->getMock( + \Magento\Store\Model\StoreManagerInterface::class ); $this->directoryDataHelperMock = $this->getMock( \Magento\Directory\Helper\Data::class, @@ -86,7 +86,7 @@ protected function setUp() $this->model = new \Magento\Checkout\Block\Checkout\DirectoryDataProcessor( $this->countryCollectionFactoryMock, $this->regionCollectionFactoryMock, - $this->storeResolverMock, + $this->storeManagerMock, $this->directoryDataHelperMock ); } From 5475184c9601b2a07f9cb4592e6d5dfb18d65331 Mon Sep 17 00:00:00 2001 From: Marcel Moldovan Date: Tue, 13 Jun 2017 16:20:41 +0300 Subject: [PATCH 3/3] :recycle: Add store resolver back to constructor parameters for back-compatibility --- .../Block/Checkout/DirectoryDataProcessor.php | 11 +++++++---- .../Block/Checkout/DirectoryDataProcessorTest.php | 13 +++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Checkout/Block/Checkout/DirectoryDataProcessor.php b/app/code/Magento/Checkout/Block/Checkout/DirectoryDataProcessor.php index 71dabef334c79..96c7e559e4dea 100644 --- a/app/code/Magento/Checkout/Block/Checkout/DirectoryDataProcessor.php +++ b/app/code/Magento/Checkout/Block/Checkout/DirectoryDataProcessor.php @@ -6,6 +6,7 @@ namespace Magento\Checkout\Block\Checkout; use Magento\Directory\Helper\Data as DirectoryHelper; +use Magento\Store\Api\StoreResolverInterface; use Magento\Store\Model\StoreManagerInterface; /** @@ -49,19 +50,21 @@ class DirectoryDataProcessor implements \Magento\Checkout\Block\Checkout\LayoutP /** * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollection * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollection - * @param StoreManagerInterface $storeManager + * @param StoreResolverInterface $storeResolver * @param DirectoryHelper $directoryHelper + * @param StoreManagerInterface $storeManager */ public function __construct( \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollection, \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollection, - StoreManagerInterface $storeManager, - DirectoryHelper $directoryHelper + StoreResolverInterface $storeResolver, + DirectoryHelper $directoryHelper, + StoreManagerInterface $storeManager = null ) { $this->countryCollectionFactory = $countryCollection; $this->regionCollectionFactory = $regionCollection; - $this->storeManager = $storeManager; $this->directoryHelper = $directoryHelper; + $this->storeManager = $storeManager ?: \Magento\Framework\App\ObjectManager::getInstance()->get(StoreManagerInterface::class); } /** diff --git a/app/code/Magento/Checkout/Test/Unit/Block/Checkout/DirectoryDataProcessorTest.php b/app/code/Magento/Checkout/Test/Unit/Block/Checkout/DirectoryDataProcessorTest.php index ddfee8e4d8751..4378a0163aa57 100644 --- a/app/code/Magento/Checkout/Test/Unit/Block/Checkout/DirectoryDataProcessorTest.php +++ b/app/code/Magento/Checkout/Test/Unit/Block/Checkout/DirectoryDataProcessorTest.php @@ -32,6 +32,11 @@ class DirectoryDataProcessorTest extends \PHPUnit_Framework_TestCase */ protected $regionCollectionMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + protected $storeResolverMock; + /** * @var \PHPUnit_Framework_MockObject_MockObject */ @@ -72,6 +77,9 @@ protected function setUp() '', false ); + $this->storeResolverMock = $this->getMock( + \Magento\Store\Api\StoreResolverInterface::class + ); $this->storeManagerMock = $this->getMock( \Magento\Store\Model\StoreManagerInterface::class ); @@ -86,8 +94,9 @@ protected function setUp() $this->model = new \Magento\Checkout\Block\Checkout\DirectoryDataProcessor( $this->countryCollectionFactoryMock, $this->regionCollectionFactoryMock, - $this->storeManagerMock, - $this->directoryDataHelperMock + $this->storeResolverMock, + $this->directoryDataHelperMock, + $this->storeManagerMock ); }