Skip to content

Commit f1d1005

Browse files
author
Michael Yu
committed
Merge branch '2.2-develop' of github.com:magento-jackalopes/magento2ce into MAGETWO-71415
2 parents c8808af + 024f8aa commit f1d1005

File tree

60 files changed

+2621
-620
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+2621
-620
lines changed

app/code/Magento/CatalogUrlRewrite/Model/ProductScopeRewriteGenerator.php

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@
55
*/
66
namespace Magento\CatalogUrlRewrite\Model;
77

8+
use Magento\Catalog\Api\CategoryRepositoryInterface;
89
use Magento\Catalog\Model\Category;
910
use Magento\Catalog\Model\Product;
11+
use Magento\CatalogUrlRewrite\Model\Product\AnchorUrlRewriteGenerator;
1012
use Magento\CatalogUrlRewrite\Model\Product\CanonicalUrlRewriteGenerator;
1113
use Magento\CatalogUrlRewrite\Model\Product\CategoriesUrlRewriteGenerator;
1214
use Magento\CatalogUrlRewrite\Model\Product\CurrentUrlRewritesRegenerator;
13-
use Magento\CatalogUrlRewrite\Model\Product\AnchorUrlRewriteGenerator;
1415
use Magento\CatalogUrlRewrite\Service\V1\StoreViewService;
16+
use Magento\Framework\App\ObjectManager;
1517
use Magento\Store\Model\Store;
1618
use Magento\Store\Model\StoreManagerInterface;
1719
use Magento\UrlRewrite\Model\MergeDataProviderFactory;
18-
use Magento\Framework\App\ObjectManager;
1920

2021
/**
2122
* Class ProductScopeRewriteGenerator
@@ -63,6 +64,11 @@ class ProductScopeRewriteGenerator
6364
*/
6465
private $mergeDataProviderPrototype;
6566

67+
/**
68+
* @var CategoryRepositoryInterface
69+
*/
70+
private $categoryRepository;
71+
6672
/**
6773
* @param StoreViewService $storeViewService
6874
* @param StoreManagerInterface $storeManager
@@ -72,6 +78,7 @@ class ProductScopeRewriteGenerator
7278
* @param CurrentUrlRewritesRegenerator $currentUrlRewritesRegenerator
7379
* @param AnchorUrlRewriteGenerator $anchorUrlRewriteGenerator
7480
* @param \Magento\UrlRewrite\Model\MergeDataProviderFactory|null $mergeDataProviderFactory
81+
* @param CategoryRepositoryInterface|null $categoryRepository
7582
*/
7683
public function __construct(
7784
StoreViewService $storeViewService,
@@ -81,7 +88,8 @@ public function __construct(
8188
CategoriesUrlRewriteGenerator $categoriesUrlRewriteGenerator,
8289
CurrentUrlRewritesRegenerator $currentUrlRewritesRegenerator,
8390
AnchorUrlRewriteGenerator $anchorUrlRewriteGenerator,
84-
MergeDataProviderFactory $mergeDataProviderFactory = null
91+
MergeDataProviderFactory $mergeDataProviderFactory = null,
92+
CategoryRepositoryInterface $categoryRepository = null
8593
) {
8694
$this->storeViewService = $storeViewService;
8795
$this->storeManager = $storeManager;
@@ -94,6 +102,8 @@ public function __construct(
94102
$mergeDataProviderFactory = ObjectManager::getInstance()->get(MergeDataProviderFactory::class);
95103
}
96104
$this->mergeDataProviderPrototype = $mergeDataProviderFactory->create();
105+
$this->categoryRepository = $categoryRepository ?:
106+
ObjectManager::getInstance()->get(CategoryRepositoryInterface::class);
97107
}
98108

99109
/**
@@ -150,10 +160,14 @@ public function generateForSpecificStoreView($storeId, $productCategories, Produ
150160
$mergeDataProvider = clone $this->mergeDataProviderPrototype;
151161
$categories = [];
152162
foreach ($productCategories as $category) {
153-
if ($this->isCategoryProperForGenerating($category, $storeId)) {
154-
$categories[] = $category;
163+
if (!$this->isCategoryProperForGenerating($category, $storeId)) {
164+
continue;
155165
}
166+
167+
// category should be loaded per appropriate store if category's URL key has been changed
168+
$categories[] = $this->getCategoryWithOverriddenUrlKey($storeId, $category);
156169
}
170+
157171
$productCategories = $this->objectRegistryFactory->create(['entities' => $categories]);
158172

159173
$mergeDataProvider->merge(
@@ -199,4 +213,26 @@ public function isCategoryProperForGenerating(Category $category, $storeId)
199213
}
200214
return false;
201215
}
216+
217+
/**
218+
* Checks if URL key has been changed for provided category and returns reloaded category,
219+
* in other case - returns provided category.
220+
*
221+
* @param $storeId
222+
* @param Category $category
223+
* @return Category
224+
*/
225+
private function getCategoryWithOverriddenUrlKey($storeId, Category $category)
226+
{
227+
$isUrlKeyOverridden = $this->storeViewService->doesEntityHaveOverriddenUrlKeyForStore(
228+
$storeId,
229+
$category->getEntityId(),
230+
Category::ENTITY
231+
);
232+
233+
if (!$isUrlKeyOverridden) {
234+
return $category;
235+
}
236+
return $this->categoryRepository->get($category->getEntityId(), $storeId);
237+
}
202238
}

0 commit comments

Comments
 (0)