PageRepository.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Cms\Model;
  7. use Magento\Cms\Api\Data;
  8. use Magento\Cms\Api\PageRepositoryInterface;
  9. use Magento\Framework\Api\DataObjectHelper;
  10. use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
  11. use Magento\Framework\Exception\CouldNotDeleteException;
  12. use Magento\Framework\Exception\CouldNotSaveException;
  13. use Magento\Framework\Exception\NoSuchEntityException;
  14. use Magento\Framework\Reflection\DataObjectProcessor;
  15. use Magento\Cms\Model\ResourceModel\Page as ResourcePage;
  16. use Magento\Cms\Model\ResourceModel\Page\CollectionFactory as PageCollectionFactory;
  17. use Magento\Store\Model\StoreManagerInterface;
  18. /**
  19. * Class PageRepository
  20. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  21. */
  22. class PageRepository implements PageRepositoryInterface
  23. {
  24. /**
  25. * @var ResourcePage
  26. */
  27. protected $resource;
  28. /**
  29. * @var PageFactory
  30. */
  31. protected $pageFactory;
  32. /**
  33. * @var PageCollectionFactory
  34. */
  35. protected $pageCollectionFactory;
  36. /**
  37. * @var Data\PageSearchResultsInterfaceFactory
  38. */
  39. protected $searchResultsFactory;
  40. /**
  41. * @var DataObjectHelper
  42. */
  43. protected $dataObjectHelper;
  44. /**
  45. * @var DataObjectProcessor
  46. */
  47. protected $dataObjectProcessor;
  48. /**
  49. * @var \Magento\Cms\Api\Data\PageInterfaceFactory
  50. */
  51. protected $dataPageFactory;
  52. /**
  53. * @var \Magento\Store\Model\StoreManagerInterface
  54. */
  55. private $storeManager;
  56. /**
  57. * @var CollectionProcessorInterface
  58. */
  59. private $collectionProcessor;
  60. /**
  61. * @param ResourcePage $resource
  62. * @param PageFactory $pageFactory
  63. * @param Data\PageInterfaceFactory $dataPageFactory
  64. * @param PageCollectionFactory $pageCollectionFactory
  65. * @param Data\PageSearchResultsInterfaceFactory $searchResultsFactory
  66. * @param DataObjectHelper $dataObjectHelper
  67. * @param DataObjectProcessor $dataObjectProcessor
  68. * @param StoreManagerInterface $storeManager
  69. * @param CollectionProcessorInterface $collectionProcessor
  70. */
  71. public function __construct(
  72. ResourcePage $resource,
  73. PageFactory $pageFactory,
  74. Data\PageInterfaceFactory $dataPageFactory,
  75. PageCollectionFactory $pageCollectionFactory,
  76. Data\PageSearchResultsInterfaceFactory $searchResultsFactory,
  77. DataObjectHelper $dataObjectHelper,
  78. DataObjectProcessor $dataObjectProcessor,
  79. StoreManagerInterface $storeManager,
  80. CollectionProcessorInterface $collectionProcessor = null
  81. ) {
  82. $this->resource = $resource;
  83. $this->pageFactory = $pageFactory;
  84. $this->pageCollectionFactory = $pageCollectionFactory;
  85. $this->searchResultsFactory = $searchResultsFactory;
  86. $this->dataObjectHelper = $dataObjectHelper;
  87. $this->dataPageFactory = $dataPageFactory;
  88. $this->dataObjectProcessor = $dataObjectProcessor;
  89. $this->storeManager = $storeManager;
  90. $this->collectionProcessor = $collectionProcessor ?: $this->getCollectionProcessor();
  91. }
  92. /**
  93. * Save Page data
  94. *
  95. * @param \Magento\Cms\Api\Data\PageInterface $page
  96. * @return Page
  97. * @throws CouldNotSaveException
  98. */
  99. public function save(\Magento\Cms\Api\Data\PageInterface $page)
  100. {
  101. if ($page->getStoreId() === null) {
  102. $storeId = $this->storeManager->getStore()->getId();
  103. $page->setStoreId($storeId);
  104. }
  105. try {
  106. $this->resource->save($page);
  107. } catch (\Exception $exception) {
  108. throw new CouldNotSaveException(
  109. __('Could not save the page: %1', $exception->getMessage()),
  110. $exception
  111. );
  112. }
  113. return $page;
  114. }
  115. /**
  116. * Load Page data by given Page Identity
  117. *
  118. * @param string $pageId
  119. * @return Page
  120. * @throws \Magento\Framework\Exception\NoSuchEntityException
  121. */
  122. public function getById($pageId)
  123. {
  124. $page = $this->pageFactory->create();
  125. $page->load($pageId);
  126. if (!$page->getId()) {
  127. throw new NoSuchEntityException(__('The CMS page with the "%1" ID doesn\'t exist.', $pageId));
  128. }
  129. return $page;
  130. }
  131. /**
  132. * Load Page data collection by given search criteria
  133. *
  134. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  135. * @SuppressWarnings(PHPMD.NPathComplexity)
  136. * @param \Magento\Framework\Api\SearchCriteriaInterface $criteria
  137. * @return \Magento\Cms\Api\Data\PageSearchResultsInterface
  138. */
  139. public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria)
  140. {
  141. /** @var \Magento\Cms\Model\ResourceModel\Page\Collection $collection */
  142. $collection = $this->pageCollectionFactory->create();
  143. $this->collectionProcessor->process($criteria, $collection);
  144. /** @var Data\PageSearchResultsInterface $searchResults */
  145. $searchResults = $this->searchResultsFactory->create();
  146. $searchResults->setSearchCriteria($criteria);
  147. $searchResults->setItems($collection->getItems());
  148. $searchResults->setTotalCount($collection->getSize());
  149. return $searchResults;
  150. }
  151. /**
  152. * Delete Page
  153. *
  154. * @param \Magento\Cms\Api\Data\PageInterface $page
  155. * @return bool
  156. * @throws CouldNotDeleteException
  157. */
  158. public function delete(\Magento\Cms\Api\Data\PageInterface $page)
  159. {
  160. try {
  161. $this->resource->delete($page);
  162. } catch (\Exception $exception) {
  163. throw new CouldNotDeleteException(__(
  164. 'Could not delete the page: %1',
  165. $exception->getMessage()
  166. ));
  167. }
  168. return true;
  169. }
  170. /**
  171. * Delete Page by given Page Identity
  172. *
  173. * @param string $pageId
  174. * @return bool
  175. * @throws CouldNotDeleteException
  176. * @throws NoSuchEntityException
  177. */
  178. public function deleteById($pageId)
  179. {
  180. return $this->delete($this->getById($pageId));
  181. }
  182. /**
  183. * Retrieve collection processor
  184. *
  185. * @deprecated 102.0.0
  186. * @return CollectionProcessorInterface
  187. */
  188. private function getCollectionProcessor()
  189. {
  190. if (!$this->collectionProcessor) {
  191. $this->collectionProcessor = \Magento\Framework\App\ObjectManager::getInstance()->get(
  192. 'Magento\Cms\Model\Api\SearchCriteria\PageCollectionProcessor'
  193. );
  194. }
  195. return $this->collectionProcessor;
  196. }
  197. }