123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\CmsUrlRewrite\Model;
- use Magento\Store\Model\StoreManagerInterface;
- use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory;
- class CmsPageUrlRewriteGenerator
- {
- /**
- * Entity type code
- */
- const ENTITY_TYPE = 'cms-page';
- /**
- * @var \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory
- */
- protected $urlRewriteFactory;
- /**
- * @var \Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator
- */
- protected $cmsPageUrlPathGenerator;
- /**
- * Store manager
- *
- * @var StoreManagerInterface
- */
- protected $storeManager;
- /**
- * @var \Magento\Cms\Model\Page
- */
- protected $cmsPage;
- /**
- * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory
- * @param \Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator $cmsPageUrlPathGenerator
- * @param StoreManagerInterface $storeManager
- */
- public function __construct(
- UrlRewriteFactory $urlRewriteFactory,
- CmsPageUrlPathGenerator $cmsPageUrlPathGenerator,
- StoreManagerInterface $storeManager
- ) {
- $this->urlRewriteFactory = $urlRewriteFactory;
- $this->storeManager = $storeManager;
- $this->cmsPageUrlPathGenerator = $cmsPageUrlPathGenerator;
- }
- /**
- * @param \Magento\Cms\Model\Page $cmsPage
- * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
- */
- public function generate($cmsPage)
- {
- $stores = $cmsPage->getStores();
- $this->cmsPage = $cmsPage;
- $urls = array_search('0', $stores) === false ? $this->generateForSpecificStores($stores)
- : $this->generateForAllStores();
- $this->cmsPage = null;
- return $urls;
- }
- /**
- * Generate list of urls for default store
- *
- * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
- */
- protected function generateForAllStores()
- {
- $urls = [];
- foreach ($this->storeManager->getStores() as $store) {
- $urls[] = $this->createUrlRewrite($store->getStoreId());
- }
- return $urls;
- }
- /**
- * Generate list of urls per store
- *
- * @param int[] $storeIds
- * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite[]
- */
- protected function generateForSpecificStores($storeIds)
- {
- $urls = [];
- $existingStores = $this->storeManager->getStores();
- foreach ($storeIds as $storeId) {
- if (!isset($existingStores[$storeId])) {
- continue;
- }
- $urls[] = $this->createUrlRewrite($storeId);
- }
- return $urls;
- }
- /**
- * Create url rewrite object
- *
- * @param int $storeId
- * @param int $redirectType
- * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite
- */
- protected function createUrlRewrite($storeId, $redirectType = 0)
- {
- return $this->urlRewriteFactory->create()->setStoreId($storeId)
- ->setEntityType(self::ENTITY_TYPE)
- ->setEntityId($this->cmsPage->getId())
- ->setRequestPath($this->cmsPage->getIdentifier())
- ->setTargetPath($this->cmsPageUrlPathGenerator->getCanonicalUrlPath($this->cmsPage))
- ->setIsAutogenerated(1)
- ->setRedirectType($redirectType);
- }
- }
|