|
8 | 8 | namespace Magento\CmsGraphQl\Model\Resolver\DataProvider;
|
9 | 9 |
|
10 | 10 | use Magento\Cms\Api\Data\PageInterface;
|
| 11 | +use Magento\Cms\Api\GetPageByIdentifierInterface; |
11 | 12 | use Magento\Cms\Api\PageRepositoryInterface;
|
12 | 13 | use Magento\Framework\Exception\NoSuchEntityException;
|
| 14 | +use Magento\Store\Model\StoreManagerInterface; |
13 | 15 | use Magento\Widget\Model\Template\FilterEmulate;
|
14 | 16 |
|
15 | 17 | /**
|
16 |
| - * @deprecated |
17 |
| - * @see Magento\CmsGraphQl\Model\Resolver\DataProvider\PageDataProvider |
18 |
| - * |
19 | 18 | * Cms page data provider
|
20 | 19 | */
|
21 | 20 | class Page
|
22 | 21 | {
|
23 | 22 | /**
|
24 |
| - * @var FilterEmulate |
| 23 | + * @var GetPageByIdentifierInterface |
25 | 24 | */
|
26 |
| - private $widgetFilter; |
| 25 | + private $pageByIdentifier; |
27 | 26 |
|
28 | 27 | /**
|
29 | 28 | * @var PageRepositoryInterface
|
30 | 29 | */
|
31 | 30 | private $pageRepository;
|
32 | 31 |
|
33 | 32 | /**
|
34 |
| - * @param PageRepositoryInterface $pageRepository |
| 33 | + * @var StoreManagerInterface |
| 34 | + */ |
| 35 | + private $storeManager; |
| 36 | + |
| 37 | + /** |
| 38 | + * @var FilterEmulate |
| 39 | + */ |
| 40 | + private $widgetFilter; |
| 41 | + |
| 42 | + /** |
| 43 | + * @param GetPageByIdentifierInterface $getPageByIdentifier |
35 | 44 | * @param FilterEmulate $widgetFilter
|
| 45 | + * @param PageRepositoryInterface $pageRepository |
| 46 | + * @param StoreManagerInterface $storeManager |
36 | 47 | */
|
37 | 48 | public function __construct(
|
| 49 | + GetPageByIdentifierInterface $getPageByIdentifier, |
| 50 | + FilterEmulate $widgetFilter, |
38 | 51 | PageRepositoryInterface $pageRepository,
|
39 |
| - FilterEmulate $widgetFilter |
| 52 | + StoreManagerInterface $storeManager |
40 | 53 | ) {
|
| 54 | + $this->pageByIdentifier = $getPageByIdentifier; |
41 | 55 | $this->pageRepository = $pageRepository;
|
| 56 | + $this->storeManager = $storeManager; |
42 | 57 | $this->widgetFilter = $widgetFilter;
|
43 | 58 | }
|
44 | 59 |
|
45 | 60 | /**
|
| 61 | + * @deprecated |
| 62 | + * @see getDataByPageId(int $pageId) |
| 63 | + * |
46 | 64 | * Get the page data
|
47 | 65 | *
|
48 | 66 | * @param int $pageId
|
@@ -72,4 +90,56 @@ public function getData(int $pageId): array
|
72 | 90 | ];
|
73 | 91 | return $pageData;
|
74 | 92 | }
|
| 93 | + |
| 94 | + /** |
| 95 | + * @param int $pageId |
| 96 | + * @return array |
| 97 | + * @throws NoSuchEntityException |
| 98 | + */ |
| 99 | + public function getDataByPageId(int $pageId): array |
| 100 | + { |
| 101 | + $page = $this->pageRepository->getById($pageId); |
| 102 | + |
| 103 | + return $this->convertPageData($page); |
| 104 | + } |
| 105 | + |
| 106 | + /** |
| 107 | + * @param string $pageIdentifier |
| 108 | + * @return array |
| 109 | + * @throws NoSuchEntityException |
| 110 | + */ |
| 111 | + public function getDataByPageIdentifier(string $pageIdentifier): array |
| 112 | + { |
| 113 | + $storeId = (int)$this->storeManager->getStore()->getId(); |
| 114 | + $page = $this->pageByIdentifier->execute($pageIdentifier, $storeId); |
| 115 | + |
| 116 | + return $this->convertPageData($page); |
| 117 | + } |
| 118 | + |
| 119 | + /** |
| 120 | + * @param PageInterface $page |
| 121 | + * @return array |
| 122 | + * @throws NoSuchEntityException |
| 123 | + */ |
| 124 | + private function convertPageData(PageInterface $page) |
| 125 | + { |
| 126 | + if (false === $page->isActive()) { |
| 127 | + throw new NoSuchEntityException(); |
| 128 | + } |
| 129 | + |
| 130 | + $renderedContent = $this->widgetFilter->filter($page->getContent()); |
| 131 | + |
| 132 | + $pageData = [ |
| 133 | + 'url_key' => $page->getIdentifier(), |
| 134 | + PageInterface::IDENTIFIER => $page->getIdentifier(), |
| 135 | + PageInterface::TITLE => $page->getTitle(), |
| 136 | + PageInterface::CONTENT => $renderedContent, |
| 137 | + PageInterface::CONTENT_HEADING => $page->getContentHeading(), |
| 138 | + PageInterface::PAGE_LAYOUT => $page->getPageLayout(), |
| 139 | + PageInterface::META_TITLE => $page->getMetaTitle(), |
| 140 | + PageInterface::META_DESCRIPTION => $page->getMetaDescription(), |
| 141 | + PageInterface::META_KEYWORDS => $page->getMetaKeywords(), |
| 142 | + ]; |
| 143 | + return $pageData; |
| 144 | + } |
75 | 145 | }
|
0 commit comments