Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CurrentUrlRewritesRegenerator.php
Go to the documentation of this file.
1 <?php
7 
10 
12 {
17 
21  protected $urlRewriteFactory;
22 
26  private $urlRewritePrototype;
27 
32  protected $category;
33 
38  protected $urlFinder;
39 
43  private $urlRewriteFinder;
44 
48  private $mergeDataProviderPrototype;
49 
57  public function __construct(
59  \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory,
61  \Magento\CatalogUrlRewrite\Model\Map\UrlRewriteFinder $urlRewriteFinder = null,
62  \Magento\UrlRewrite\Model\MergeDataProviderFactory $mergeDataProviderFactory = null
63  ) {
64  $this->categoryUrlPathGenerator = $categoryUrlPathGenerator;
65  $this->urlRewriteFactory = $urlRewriteFactory;
66  $this->urlRewritePrototype = $urlRewriteFactory->create();
67  $this->urlFinder = $urlFinder;
68  $this->urlRewriteFinder = $urlRewriteFinder ?: \Magento\Framework\App\ObjectManager::getInstance()
69  ->get(\Magento\CatalogUrlRewrite\Model\Map\UrlRewriteFinder::class);
70  if (!isset($mergeDataProviderFactory)) {
71  $mergeDataProviderFactory = \Magento\Framework\App\ObjectManager::getInstance()->get(
72  \Magento\UrlRewrite\Model\MergeDataProviderFactory::class
73  );
74  }
75  $this->mergeDataProviderPrototype = $mergeDataProviderFactory->create();
76  }
77 
86  public function generate($storeId, \Magento\Catalog\Model\Category $category, $rootCategoryId = null)
87  {
88  $mergeDataProvider = clone $this->mergeDataProviderPrototype;
89  $currentUrlRewrites = $this->urlRewriteFinder->findAllByData(
90  $category->getEntityId(),
91  $storeId,
94  );
95 
96  foreach ($currentUrlRewrites as $rewrite) {
97  $mergeDataProvider->merge(
98  $rewrite->getIsAutogenerated()
99  ? $this->generateForAutogenerated($rewrite, $storeId, $category)
100  : $this->generateForCustom($rewrite, $storeId, $category)
101  );
102  }
103 
104  return $mergeDataProvider->getData();
105  }
106 
113  protected function generateForAutogenerated($url, $storeId, \Magento\Catalog\Model\Category $category = null)
114  {
115  if ($category->getData('save_rewrites_history')) {
116  $targetPath = $this->categoryUrlPathGenerator->getUrlPathWithSuffix($category, $storeId);
117  if ($url->getRequestPath() !== $targetPath) {
118  $generatedUrl = clone $this->urlRewritePrototype;
119  $generatedUrl->setEntityType(CategoryUrlRewriteGenerator::ENTITY_TYPE)
120  ->setEntityId($category->getEntityId())
121  ->setRequestPath($url->getRequestPath())
122  ->setTargetPath($targetPath)
123  ->setRedirectType(OptionProvider::PERMANENT)
124  ->setStoreId($storeId)
125  ->setIsAutogenerated(0);
126  return [$generatedUrl];
127  }
128  }
129  return [];
130  }
131 
138  protected function generateForCustom($url, $storeId, \Magento\Catalog\Model\Category $category = null)
139  {
140  $targetPath = !$url->getRedirectType()
141  ? $url->getTargetPath()
142  : $this->categoryUrlPathGenerator->getUrlPathWithSuffix($category, $storeId);
143  if ($url->getRequestPath() !== $targetPath) {
144  $generatedUrl = clone $this->urlRewritePrototype;
145  $generatedUrl->setEntityType(CategoryUrlRewriteGenerator::ENTITY_TYPE)
146  ->setEntityId($category->getEntityId())
147  ->setRequestPath($url->getRequestPath())
148  ->setTargetPath($targetPath)
149  ->setRedirectType($url->getRedirectType())
151  ->setDescription($url->getDescription())
152  ->setIsAutogenerated(0)
153  ->setMetadata($url->getMetadata());
154  return [$generatedUrl];
155  }
156  return [];
157  }
158 }
__construct(\Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator $categoryUrlPathGenerator, \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory, \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder, \Magento\CatalogUrlRewrite\Model\Map\UrlRewriteFinder $urlRewriteFinder=null, \Magento\UrlRewrite\Model\MergeDataProviderFactory $mergeDataProviderFactory=null)
generate($storeId, \Magento\Catalog\Model\Category $category, $rootCategoryId=null)
generateForCustom($url, $storeId, \Magento\Catalog\Model\Category $category=null)
generateForAutogenerated($url, $storeId, \Magento\Catalog\Model\Category $category=null)