CmsPageUrlRewriteGenerator.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CmsUrlRewrite\Model;
  7. use Magento\Store\Model\StoreManagerInterface;
  8. use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory;
  9. class CmsPageUrlRewriteGenerator
  10. {
  11. /**
  12. * Entity type code
  13. */
  14. const ENTITY_TYPE = 'cms-page';
  15. /**
  16. * @var \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory
  17. */
  18. protected $urlRewriteFactory;
  19. /**
  20. * @var \Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator
  21. */
  22. protected $cmsPageUrlPathGenerator;
  23. /**
  24. * Store manager
  25. *
  26. * @var StoreManagerInterface
  27. */
  28. protected $storeManager;
  29. /**
  30. * @var \Magento\Cms\Model\Page
  31. */
  32. protected $cmsPage;
  33. /**
  34. * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory
  35. * @param \Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator $cmsPageUrlPathGenerator
  36. * @param StoreManagerInterface $storeManager
  37. */
  38. public function __construct(
  39. UrlRewriteFactory $urlRewriteFactory,
  40. CmsPageUrlPathGenerator $cmsPageUrlPathGenerator,
  41. StoreManagerInterface $storeManager
  42. ) {
  43. $this->urlRewriteFactory = $urlRewriteFactory;
  44. $this->storeManager = $storeManager;
  45. $this->cmsPageUrlPathGenerator = $cmsPageUrlPathGenerator;
  46. }
  47. /**
  48. * @param \Magento\Cms\Model\Page $cmsPage
  49. * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
  50. */
  51. public function generate($cmsPage)
  52. {
  53. $stores = $cmsPage->getStores();
  54. $this->cmsPage = $cmsPage;
  55. $urls = array_search('0', $stores) === false ? $this->generateForSpecificStores($stores)
  56. : $this->generateForAllStores();
  57. $this->cmsPage = null;
  58. return $urls;
  59. }
  60. /**
  61. * Generate list of urls for default store
  62. *
  63. * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
  64. */
  65. protected function generateForAllStores()
  66. {
  67. $urls = [];
  68. foreach ($this->storeManager->getStores() as $store) {
  69. $urls[] = $this->createUrlRewrite($store->getStoreId());
  70. }
  71. return $urls;
  72. }
  73. /**
  74. * Generate list of urls per store
  75. *
  76. * @param int[] $storeIds
  77. * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
  78. */
  79. protected function generateForSpecificStores($storeIds)
  80. {
  81. $urls = [];
  82. $existingStores = $this->storeManager->getStores();
  83. foreach ($storeIds as $storeId) {
  84. if (!isset($existingStores[$storeId])) {
  85. continue;
  86. }
  87. $urls[] = $this->createUrlRewrite($storeId);
  88. }
  89. return $urls;
  90. }
  91. /**
  92. * Create url rewrite object
  93. *
  94. * @param int $storeId
  95. * @param int $redirectType
  96. * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite
  97. */
  98. protected function createUrlRewrite($storeId, $redirectType = 0)
  99. {
  100. return $this->urlRewriteFactory->create()->setStoreId($storeId)
  101. ->setEntityType(self::ENTITY_TYPE)
  102. ->setEntityId($this->cmsPage->getId())
  103. ->setRequestPath($this->cmsPage->getIdentifier())
  104. ->setTargetPath($this->cmsPageUrlPathGenerator->getCanonicalUrlPath($this->cmsPage))
  105. ->setIsAutogenerated(1)
  106. ->setRedirectType($redirectType);
  107. }
  108. }