5
5
*/
6
6
namespace Magento \CatalogUrlRewrite \Model \Category ;
7
7
8
- use Magento \Catalog \Model \Category ;
9
- use Magento \CatalogUrlRewrite \Model \CategoryUrlPathGenerator ;
10
8
use Magento \CatalogUrlRewrite \Model \CategoryUrlRewriteGenerator ;
11
9
use Magento \UrlRewrite \Model \OptionProvider ;
12
- use Magento \UrlRewrite \Model \UrlFinderInterface ;
13
- use Magento \UrlRewrite \Service \V1 \Data \UrlRewrite ;
14
- use Magento \UrlRewrite \Service \V1 \Data \UrlRewriteFactory ;
15
10
16
11
class CurrentUrlRewritesRegenerator
17
12
{
@@ -21,104 +16,133 @@ class CurrentUrlRewritesRegenerator
21
16
/** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory */
22
17
protected $ urlRewriteFactory ;
23
18
24
- /** @var UrlFinderInterface */
25
- protected $ urlFinder ;
19
+ /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite */
20
+ private $ urlRewritePrototype ;
26
21
27
- /** @var \Magento\Catalog\Model\Category */
22
+ /**
23
+ * @var \Magento\Catalog\Model\Category
24
+ * @deprecated
25
+ */
28
26
protected $ category ;
29
27
28
+ /**
29
+ * @var \Magento\UrlRewrite\Model\UrlFinderInterface
30
+ * @deprecated
31
+ */
32
+ protected $ urlFinder ;
33
+
34
+ /** @var \Magento\CatalogUrlRewrite\Model\Map\UrlRewriteFinder */
35
+ private $ urlRewriteFinder ;
36
+
37
+ /** @var \Magento\UrlRewrite\Model\MergeDataProvider */
38
+ private $ mergeDataProviderPrototype ;
39
+
30
40
/**
31
41
* @param \Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator $categoryUrlPathGenerator
32
42
* @param \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory
33
- * @param UrlFinderInterface $urlFinder
43
+ * @param \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder
44
+ * @param \Magento\CatalogUrlRewrite\Model\Map\UrlRewriteFinder|null $urlRewriteFinder
45
+ * @param \Magento\UrlRewrite\Model\MergeDataProviderFactory|null $mergeDataProviderFactory
34
46
*/
35
47
public function __construct (
36
- CategoryUrlPathGenerator $ categoryUrlPathGenerator ,
37
- UrlRewriteFactory $ urlRewriteFactory ,
38
- UrlFinderInterface $ urlFinder
48
+ \Magento \CatalogUrlRewrite \Model \CategoryUrlPathGenerator $ categoryUrlPathGenerator ,
49
+ \Magento \UrlRewrite \Service \V1 \Data \UrlRewriteFactory $ urlRewriteFactory ,
50
+ \Magento \UrlRewrite \Model \UrlFinderInterface $ urlFinder ,
51
+ \Magento \CatalogUrlRewrite \Model \Map \UrlRewriteFinder $ urlRewriteFinder = null ,
52
+ \Magento \UrlRewrite \Model \MergeDataProviderFactory $ mergeDataProviderFactory = null
39
53
) {
40
54
$ this ->categoryUrlPathGenerator = $ categoryUrlPathGenerator ;
41
55
$ this ->urlRewriteFactory = $ urlRewriteFactory ;
56
+ $ this ->urlRewritePrototype = $ urlRewriteFactory ->create ();
42
57
$ this ->urlFinder = $ urlFinder ;
58
+ $ this ->urlRewriteFinder = $ urlRewriteFinder ?: \Magento \Framework \App \ObjectManager::getInstance ()
59
+ ->get (\Magento \CatalogUrlRewrite \Model \Map \UrlRewriteFinder::class);
60
+ if (!isset ($ mergeDataProviderFactory )) {
61
+ $ mergeDataProviderFactory = \Magento \Framework \App \ObjectManager::getInstance ()->get (
62
+ \Magento \UrlRewrite \Model \MergeDataProviderFactory::class
63
+ );
64
+ }
65
+ $ this ->mergeDataProviderPrototype = $ mergeDataProviderFactory ->create ();
43
66
}
44
67
45
68
/**
46
69
* Generate list based on current url rewrites
47
70
*
48
71
* @param int $storeId
49
72
* @param \Magento\Catalog\Model\Category $category
73
+ * @param int|null $rootCategoryId
50
74
* @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
51
75
*/
52
- public function generate ($ storeId , Category $ category )
76
+ public function generate ($ storeId , \ Magento \ Catalog \ Model \ Category $ category, $ rootCategoryId = null )
53
77
{
54
- $ this ->category = $ category ;
55
-
56
- $ currentUrlRewrites = $ this ->urlFinder ->findAllByData (
57
- [
58
- UrlRewrite::STORE_ID => $ storeId ,
59
- UrlRewrite::ENTITY_ID => $ category ->getId (),
60
- UrlRewrite::ENTITY_TYPE => CategoryUrlRewriteGenerator::ENTITY_TYPE ,
61
- ]
78
+ $ mergeDataProvider = clone $ this ->mergeDataProviderPrototype ;
79
+ $ currentUrlRewrites = $ this ->urlRewriteFinder ->findAllByData (
80
+ $ category ->getEntityId (),
81
+ $ storeId ,
82
+ CategoryUrlRewriteGenerator::ENTITY_TYPE ,
83
+ $ rootCategoryId
62
84
);
63
85
64
- $ urlRewrites = [];
65
86
foreach ($ currentUrlRewrites as $ rewrite ) {
66
- if ( $ rewrite -> getIsAutogenerated ()) {
67
- $ urlRewrites = array_merge ( $ urlRewrites , $ this -> generateForAutogenerated ( $ rewrite , $ storeId ));
68
- } else {
69
- $ urlRewrites = array_merge ( $ urlRewrites , $ this ->generateForCustom ($ rewrite , $ storeId));
70
- }
87
+ $ mergeDataProvider -> merge (
88
+ $ rewrite -> getIsAutogenerated ()
89
+ ? $ this -> generateForAutogenerated ( $ rewrite , $ storeId , $ category )
90
+ : $ this ->generateForCustom ($ rewrite , $ storeId, $ category )
91
+ );
71
92
}
72
- return $ urlRewrites ;
93
+
94
+ return $ mergeDataProvider ->getData ();
73
95
}
74
96
75
97
/**
76
98
* @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite $url
77
99
* @param int $storeId
78
- * @return array
100
+ * @param \Magento\Catalog\Model\Category|null $category
101
+ * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
79
102
*/
80
- protected function generateForAutogenerated ($ url , $ storeId )
103
+ protected function generateForAutogenerated ($ url , $ storeId, \ Magento \ Catalog \ Model \ Category $ category = null )
81
104
{
82
- $ urls = [];
83
- if ($ this ->category ->getData ('save_rewrites_history ' )) {
84
- $ targetPath = $ this ->categoryUrlPathGenerator ->getUrlPathWithSuffix ($ this ->category , $ storeId );
105
+ if ($ category ->getData ('save_rewrites_history ' )) {
106
+ $ targetPath = $ this ->categoryUrlPathGenerator ->getUrlPathWithSuffix ($ category , $ storeId );
85
107
if ($ url ->getRequestPath () !== $ targetPath ) {
86
- $ urls [ $ url -> getRequestPath () . ' _ ' . $ storeId ] = $ this ->urlRewriteFactory -> create ()
87
- ->setEntityType (CategoryUrlRewriteGenerator::ENTITY_TYPE )
88
- ->setEntityId ($ this -> category ->getId ())
108
+ $ generatedUrl = clone $ this ->urlRewritePrototype ;
109
+ $ generatedUrl ->setEntityType (CategoryUrlRewriteGenerator::ENTITY_TYPE )
110
+ ->setEntityId ($ category ->getEntityId ())
89
111
->setRequestPath ($ url ->getRequestPath ())
90
112
->setTargetPath ($ targetPath )
91
113
->setRedirectType (OptionProvider::PERMANENT )
92
114
->setStoreId ($ storeId )
93
115
->setIsAutogenerated (0 );
116
+ return [$ generatedUrl ];
94
117
}
95
118
}
96
- return $ urls ;
119
+ return [] ;
97
120
}
98
121
99
122
/**
100
123
* @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite $url
101
124
* @param int $storeId
102
- * @return array
125
+ * @param \Magento\Catalog\Model\Category|null $category
126
+ * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
103
127
*/
104
- protected function generateForCustom ($ url , $ storeId )
128
+ protected function generateForCustom ($ url , $ storeId, \ Magento \ Catalog \ Model \ Category $ category = null )
105
129
{
106
- $ urls = [];
107
130
$ targetPath = !$ url ->getRedirectType ()
108
131
? $ url ->getTargetPath ()
109
- : $ this ->categoryUrlPathGenerator ->getUrlPathWithSuffix ($ this -> category , $ storeId );
132
+ : $ this ->categoryUrlPathGenerator ->getUrlPathWithSuffix ($ category , $ storeId );
110
133
if ($ url ->getRequestPath () !== $ targetPath ) {
111
- $ urls [ $ url -> getRequestPath () . ' _ ' . $ storeId ] = $ this ->urlRewriteFactory -> create ()
112
- ->setEntityType (CategoryUrlRewriteGenerator::ENTITY_TYPE )
113
- ->setEntityId ($ this -> category ->getId ())
134
+ $ generatedUrl = clone $ this ->urlRewritePrototype ;
135
+ $ generatedUrl ->setEntityType (CategoryUrlRewriteGenerator::ENTITY_TYPE )
136
+ ->setEntityId ($ category ->getEntityId ())
114
137
->setRequestPath ($ url ->getRequestPath ())
115
138
->setTargetPath ($ targetPath )
116
139
->setRedirectType ($ url ->getRedirectType ())
117
140
->setStoreId ($ storeId )
118
141
->setDescription ($ url ->getDescription ())
119
142
->setIsAutogenerated (0 )
120
143
->setMetadata ($ url ->getMetadata ());
144
+ return [$ generatedUrl ];
121
145
}
122
- return $ urls ;
146
+ return [] ;
123
147
}
124
148
}
0 commit comments