Skip to content

Commit 7f45978

Browse files
authored
ENGCOM-7602: Error when creating a store view if there are CMS pages with the same URL key #28421
2 parents 404b70f + ba3424e commit 7f45978

File tree

2 files changed

+26
-12
lines changed
  • app/code/Magento/CmsUrlRewrite/Plugin/Cms/Model/Store
  • dev/tests/integration/testsuite/Magento/CmsUrlRewrite/Plugin/Cms/Model/Store

2 files changed

+26
-12
lines changed

app/code/Magento/CmsUrlRewrite/Plugin/Cms/Model/Store/View.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\CmsUrlRewrite\Plugin\Cms\Model\Store;
99

10+
use Magento\Cms\Api\Data\PageInterface;
1011
use Magento\Cms\Api\PageRepositoryInterface;
1112
use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
1213
use Magento\Framework\Api\SearchCriteriaBuilder;
@@ -21,6 +22,8 @@
2122
*/
2223
class View
2324
{
25+
private const ALL_STORE_VIEWS = '0';
26+
2427
/**
2528
* @var UrlPersistInterface
2629
*/
@@ -89,14 +92,27 @@ private function generateCmsPagesUrls(int $storeId): array
8992
{
9093
$rewrites = [];
9194
$urls = [];
92-
$searchCriteria = $this->searchCriteriaBuilder->create();
93-
$cmsPagesCollection = $this->pageRepository->getList($searchCriteria)->getItems();
94-
foreach ($cmsPagesCollection as $page) {
95+
96+
foreach ($this->getCmsPageItems() as $page) {
9597
$page->setStoreId($storeId);
9698
$rewrites[] = $this->cmsPageUrlRewriteGenerator->generate($page);
9799
}
98100
$urls = array_merge($urls, ...$rewrites);
99101

100102
return $urls;
101103
}
104+
105+
/**
106+
* Return cms page items for all store view
107+
*
108+
* @return PageInterface[]
109+
*/
110+
private function getCmsPageItems(): array
111+
{
112+
$searchCriteria = $this->searchCriteriaBuilder->addFilter('store_id', self::ALL_STORE_VIEWS)
113+
->create();
114+
$list = $this->pageRepository->getList($searchCriteria);
115+
116+
return $list->getItems();
117+
}
102118
}

dev/tests/integration/testsuite/Magento/CmsUrlRewrite/Plugin/Cms/Model/Store/ViewTest.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
use PHPUnit\Framework\TestCase;
2626

2727
/**
28-
* Test for plugin which is listening store resource model and on save replace cms page url rewrites
28+
* Test for plugin which is listening store resource model and on save replace cms page url rewrites.
2929
*
3030
* @magentoAppArea adminhtml
3131
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -84,9 +84,10 @@ protected function setUp(): void
8484
/**
8585
* Test of replacing cms page url rewrites on create and delete store
8686
*
87+
* @magentoDataFixture Magento/Cms/_files/two_cms_page_with_same_url_for_different_stores.php
8788
* @magentoDataFixture Magento/Cms/_files/pages.php
8889
*/
89-
public function testUrlRewritesChangesAfterStoreSave()
90+
public function testUrlRewritesChangesAfterStoreSave(): void
9091
{
9192
$storeId = $this->createStore();
9293
$this->assertUrlRewritesCount($storeId, 'page100', 1);
@@ -98,16 +99,16 @@ public function testUrlRewritesChangesAfterStoreSave()
9899
}
99100

100101
/**
101-
* Assert url rewrites count by store id
102+
* Assert url rewrites count by store id and request path
102103
*
103104
* @param int $storeId
104-
* @param string $pageIdentifier
105+
* @param string $requestPath
105106
* @param int $expectedCount
106107
*/
107-
private function assertUrlRewritesCount(int $storeId, string $pageIdentifier, int $expectedCount): void
108+
private function assertUrlRewritesCount(int $storeId, string $requestPath, int $expectedCount): void
108109
{
109110
$data = [
110-
UrlRewrite::REQUEST_PATH => $pageIdentifier,
111+
UrlRewrite::REQUEST_PATH => $requestPath,
111112
UrlRewrite::STORE_ID => $storeId
112113
];
113114
$urlRewrites = $this->urlFinder->findAllByData($data);
@@ -116,8 +117,6 @@ private function assertUrlRewritesCount(int $storeId, string $pageIdentifier, in
116117

117118
/**
118119
* Create test store
119-
*
120-
* @return int
121120
*/
122121
private function createStore(): int
123122
{
@@ -134,7 +133,6 @@ private function createStore(): int
134133
* Delete test store
135134
*
136135
* @param int $storeId
137-
* @return void
138136
*/
139137
private function deleteStore(int $storeId): void
140138
{

0 commit comments

Comments
 (0)