55 */
66namespace Magento \CatalogUrlRewrite \Model \Category ;
77
8- use Magento \Catalog \Model \Category ;
9- use Magento \CatalogUrlRewrite \Model \CategoryUrlPathGenerator ;
108use Magento \CatalogUrlRewrite \Model \CategoryUrlRewriteGenerator ;
119use 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 ;
1510
1611class CurrentUrlRewritesRegenerator
1712{
@@ -21,104 +16,133 @@ class CurrentUrlRewritesRegenerator
2116 /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory */
2217 protected $ urlRewriteFactory ;
2318
24- /** @var UrlFinderInterface */
25- protected $ urlFinder ;
19+ /** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite */
20+ private $ urlRewritePrototype ;
2621
27- /** @var \Magento\Catalog\Model\Category */
22+ /**
23+ * @var \Magento\Catalog\Model\Category
24+ * @deprecated
25+ */
2826 protected $ category ;
2927
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+
3040 /**
3141 * @param \Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator $categoryUrlPathGenerator
3242 * @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
3446 */
3547 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
3953 ) {
4054 $ this ->categoryUrlPathGenerator = $ categoryUrlPathGenerator ;
4155 $ this ->urlRewriteFactory = $ urlRewriteFactory ;
56+ $ this ->urlRewritePrototype = $ urlRewriteFactory ->create ();
4257 $ 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 ();
4366 }
4467
4568 /**
4669 * Generate list based on current url rewrites
4770 *
4871 * @param int $storeId
4972 * @param \Magento\Catalog\Model\Category $category
73+ * @param int|null $rootCategoryId
5074 * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
5175 */
52- public function generate ($ storeId , Category $ category )
76+ public function generate ($ storeId , \ Magento \ Catalog \ Model \ Category $ category, $ rootCategoryId = null )
5377 {
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
6284 );
6385
64- $ urlRewrites = [];
6586 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+ );
7192 }
72- return $ urlRewrites ;
93+
94+ return $ mergeDataProvider ->getData ();
7395 }
7496
7597 /**
7698 * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite $url
7799 * @param int $storeId
78- * @return array
100+ * @param \Magento\Catalog\Model\Category|null $category
101+ * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
79102 */
80- protected function generateForAutogenerated ($ url , $ storeId )
103+ protected function generateForAutogenerated ($ url , $ storeId, \ Magento \ Catalog \ Model \ Category $ category = null )
81104 {
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 );
85107 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 ())
89111 ->setRequestPath ($ url ->getRequestPath ())
90112 ->setTargetPath ($ targetPath )
91113 ->setRedirectType (OptionProvider::PERMANENT )
92114 ->setStoreId ($ storeId )
93115 ->setIsAutogenerated (0 );
116+ return [$ generatedUrl ];
94117 }
95118 }
96- return $ urls ;
119+ return [] ;
97120 }
98121
99122 /**
100123 * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewrite $url
101124 * @param int $storeId
102- * @return array
125+ * @param \Magento\Catalog\Model\Category|null $category
126+ * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
103127 */
104- protected function generateForCustom ($ url , $ storeId )
128+ protected function generateForCustom ($ url , $ storeId, \ Magento \ Catalog \ Model \ Category $ category = null )
105129 {
106- $ urls = [];
107130 $ targetPath = !$ url ->getRedirectType ()
108131 ? $ url ->getTargetPath ()
109- : $ this ->categoryUrlPathGenerator ->getUrlPathWithSuffix ($ this -> category , $ storeId );
132+ : $ this ->categoryUrlPathGenerator ->getUrlPathWithSuffix ($ category , $ storeId );
110133 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 ())
114137 ->setRequestPath ($ url ->getRequestPath ())
115138 ->setTargetPath ($ targetPath )
116139 ->setRedirectType ($ url ->getRedirectType ())
117140 ->setStoreId ($ storeId )
118141 ->setDescription ($ url ->getDescription ())
119142 ->setIsAutogenerated (0 )
120143 ->setMetadata ($ url ->getMetadata ());
144+ return [$ generatedUrl ];
121145 }
122- return $ urls ;
146+ return [] ;
123147 }
124148}
0 commit comments