Skip to content

Commit 879cee4

Browse files
committed
MAGETWO-66480: [GITHUB] URL key for specified store already exists #6671
- refactoring per code review
1 parent 4531b09 commit 879cee4

File tree

5 files changed

+26
-22
lines changed

5 files changed

+26
-22
lines changed

app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteMovingObserver.php

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,25 @@
1919

2020
/**
2121
* Generates Category Url Rewrites after move/save and Products Url Rewrites assigned to the category that's being saved
22-
*
23-
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2422
*/
2523
class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface
2624
{
27-
/** @var CategoryUrlRewriteGenerator */
25+
/** @var \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator */
2826
protected $categoryUrlRewriteGenerator;
2927

30-
/** @var UrlPersistInterface */
28+
/** @var \Magento\UrlRewrite\Model\UrlPersistInterface */
3129
protected $urlPersist;
3230

33-
/** @var ScopeConfigInterface */
31+
/** @var \Magento\Framework\App\Config\ScopeConfigInterface */
3432
protected $scopeConfig;
3533

36-
/** @var UrlRewriteHandler */
34+
/** @var \Magento\CatalogUrlRewrite\Observer\UrlRewriteHandler */
3735
protected $urlRewriteHandler;
3836

39-
/**
40-
* @var UrlRewriteBunchReplacer
41-
*/
37+
/** @var \Magento\CatalogUrlRewrite\Model\UrlRewriteBunchReplacer */
4238
private $urlRewriteBunchReplacer;
4339

44-
/** @var DatabaseMapPool */
40+
/** @var \Magento\CatalogUrlRewrite\Model\Map\DatabaseMapPool */
4541
private $databaseMapPool;
4642

4743
/** @var string[] */
@@ -53,7 +49,7 @@ class CategoryProcessUrlRewriteMovingObserver implements ObserverInterface
5349
* @param ScopeConfigInterface $scopeConfig
5450
* @param UrlRewriteHandler $urlRewriteHandler
5551
* @param UrlRewriteBunchReplacer $urlRewriteBunchReplacer
56-
* @param DatabaseMapPool $databaseMapPool
52+
* @param \Magento\CatalogUrlRewrite\Model\Map\DatabaseMapPool $databaseMapPool
5753
* @param string[] $dataUrlRewriteClassNames
5854
*/
5955
public function __construct(

app/code/Magento/CatalogUrlRewrite/Observer/CategoryProcessUrlRewriteSavingObserver.php

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@
1818
*/
1919
class CategoryProcessUrlRewriteSavingObserver implements ObserverInterface
2020
{
21-
/** @var CategoryUrlRewriteGenerator */
21+
/** @var \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator */
2222
private $categoryUrlRewriteGenerator;
2323

24-
/** @var UrlRewriteBunchReplacer */
24+
/** @var \Magento\CatalogUrlRewrite\Model\UrlRewriteBunchReplacer */
2525
private $urlRewriteBunchReplacer;
2626

27-
/** @var UrlRewriteHandler */
27+
/** @var \Magento\CatalogUrlRewrite\Observer\UrlRewriteHandler */
2828
private $urlRewriteHandler;
2929

30-
/** @var DatabaseMapPool */
30+
/** @var \Magento\CatalogUrlRewrite\Model\Map\DatabaseMapPool */
3131
private $databaseMapPool;
3232

3333
/** @var string[] */
@@ -71,15 +71,23 @@ public function execute(\Magento\Framework\Event\Observer $observer)
7171
if ($category->getParentId() == Category::TREE_ROOT_ID) {
7272
return;
7373
}
74+
75+
$mapsGenerated = false;
7476
if ($category->dataHasChangedFor('url_key')
7577
|| $category->dataHasChangedFor('is_anchor')
7678
|| $category->getIsChangedProductList()
7779
) {
78-
$categoryUrlRewriteResult = $this->categoryUrlRewriteGenerator->generate($category);
79-
$this->urlRewriteBunchReplacer->doBunchReplace($categoryUrlRewriteResult);
80+
if ($category->dataHasChangedFor('url_key')) {
81+
$categoryUrlRewriteResult = $this->categoryUrlRewriteGenerator->generate($category);
82+
$this->urlRewriteBunchReplacer->doBunchReplace($categoryUrlRewriteResult);
83+
}
8084
$productUrlRewriteResult = $this->urlRewriteHandler->generateProductUrlRewrites($category);
8185
$this->urlRewriteBunchReplacer->doBunchReplace($productUrlRewriteResult);
82-
//frees memory for maps that are self-initialized in multiple classes that were called by the generators
86+
$mapsGenerated = true;
87+
}
88+
89+
//frees memory for maps that are self-initialized in multiple classes that were called by the generators
90+
if ($mapsGenerated) {
8391
$this->resetUrlRewritesDataMaps($category);
8492
}
8593
}

app/code/Magento/UrlRewrite/Model/Message/UrlRewriteExceptionMessageFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
class UrlRewriteExceptionMessageFactory implements ExceptionMessageFactoryInterface
1616
{
17-
const URL_DUPLICATE_MESSAGE = 'urlDuplicateMessage';
17+
const URL_DUPLICATE_MESSAGE_MAP_ID = 'urlDuplicateMessageMapId';
1818

1919
/** @var Factory */
2020
private $messageFactory;
@@ -52,7 +52,7 @@ public function createMessage(\Exception $exception, $type = MessageInterface::T
5252
}
5353
}
5454
return $this->messageFactory->create($type)
55-
->setIdentifier(self::URL_DUPLICATE_MESSAGE)
55+
->setIdentifier(self::URL_DUPLICATE_MESSAGE_MAP_ID)
5656
->setText($exception->getMessage())
5757
->setData(['urls' => $generatedUrls]);
5858
}

app/code/Magento/UrlRewrite/Test/Unit/Model/Message/UrlRewriteExceptionMessageFactoryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public function testCreateMessage()
6767

6868
$message->expects($this->once())
6969
->method('setIdentifier')
70-
->with(UrlRewriteExceptionMessageFactory::URL_DUPLICATE_MESSAGE)
70+
->with(UrlRewriteExceptionMessageFactory::URL_DUPLICATE_MESSAGE_MAP_ID)
7171
->willReturnSelf();
7272

7373
$message->expects($this->once())

app/code/Magento/UrlRewrite/etc/adminhtml/di.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<type name="Magento\Framework\View\Element\Message\MessageConfigurationsPool">
1717
<arguments>
1818
<argument name="configurationsMap" xsi:type="array">
19-
<item name="urlDuplicateMessage" xsi:type="array">
19+
<item name="urlDuplicateMessageMapId" xsi:type="array">
2020
<item name="renderer" xsi:type="const">\Magento\Framework\View\Element\Message\Renderer\BlockRenderer::CODE</item>
2121
<item name="data" xsi:type="array">
2222
<item name="template" xsi:type="string">Magento_UrlRewrite::messages/url_duplicate_message.phtml</item>

0 commit comments

Comments
 (0)