-
Notifications
You must be signed in to change notification settings - Fork 9.4k
/
Copy pathView.php
102 lines (92 loc) · 2.92 KB
/
View.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\CmsUrlRewrite\Plugin\Cms\Model\Store;
use Magento\Cms\Api\PageRepositoryInterface;
use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Framework\Model\AbstractModel;
use Magento\Store\Model\ResourceModel\Store as ResourceStore;
use Magento\UrlRewrite\Model\UrlPersistInterface;
/**
* Plugin which is listening store resource model and on save replace cms page url rewrites
*
* @see ResourceStore
*/
class View
{
/**
* @var UrlPersistInterface
*/
private $urlPersist;
/**
* @var CmsPageUrlRewriteGenerator
*/
private $cmsPageUrlRewriteGenerator;
/**
* @var PageRepositoryInterface
*/
private $pageRepository;
/**
* @var SearchCriteriaBuilder
*/
private $searchCriteriaBuilder;
/**
* Update store view plugin constructor
*
* @param UrlPersistInterface $urlPersist
* @param SearchCriteriaBuilder $searchCriteriaBuilder
* @param PageRepositoryInterface $pageRepository
* @param CmsPageUrlRewriteGenerator $cmsPageUrlRewriteGenerator
*/
public function __construct(
UrlPersistInterface $urlPersist,
SearchCriteriaBuilder $searchCriteriaBuilder,
PageRepositoryInterface $pageRepository,
CmsPageUrlRewriteGenerator $cmsPageUrlRewriteGenerator
) {
$this->urlPersist = $urlPersist;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
$this->pageRepository = $pageRepository;
$this->cmsPageUrlRewriteGenerator = $cmsPageUrlRewriteGenerator;
}
/**
* Replace cms page url rewrites on store view save
*
* @param ResourceStore $object
* @param ResourceStore $result
* @param ResourceStore $store
* @return void
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterSave(ResourceStore $object, ResourceStore $result, AbstractModel $store): void
{
if ($store->isObjectNew() || $store->dataHasChangedFor('group_id')) {
$this->urlPersist->replace(
$this->generateCmsPagesUrls((int)$store->getId())
);
}
}
/**
* Generate url rewrites for cms pages to store view
*
* @param int $storeId
* @return array
*/
private function generateCmsPagesUrls(int $storeId): array
{
$rewrites = [];
$urls = [];
$searchCriteria = $this->searchCriteriaBuilder->create();
$cmsPagesCollection = $this->pageRepository->getList($searchCriteria)->getItems();
foreach ($cmsPagesCollection as $page) {
$page->setStoreId($storeId);
$rewrites[] = $this->cmsPageUrlRewriteGenerator->generate($page);
}
$urls = array_merge($urls, ...$rewrites);
return $urls;
}
}