<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Cms\Model; use Magento\Cms\Api\Data; use Magento\Cms\Api\PageRepositoryInterface; use Magento\Framework\Api\DataObjectHelper; use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface; use Magento\Framework\Exception\CouldNotDeleteException; use Magento\Framework\Exception\CouldNotSaveException; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Reflection\DataObjectProcessor; use Magento\Cms\Model\ResourceModel\Page as ResourcePage; use Magento\Cms\Model\ResourceModel\Page\CollectionFactory as PageCollectionFactory; use Magento\Store\Model\StoreManagerInterface; /** * Class PageRepository * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class PageRepository implements PageRepositoryInterface { /** * @var ResourcePage */ protected $resource; /** * @var PageFactory */ protected $pageFactory; /** * @var PageCollectionFactory */ protected $pageCollectionFactory; /** * @var Data\PageSearchResultsInterfaceFactory */ protected $searchResultsFactory; /** * @var DataObjectHelper */ protected $dataObjectHelper; /** * @var DataObjectProcessor */ protected $dataObjectProcessor; /** * @var \Magento\Cms\Api\Data\PageInterfaceFactory */ protected $dataPageFactory; /** * @var \Magento\Store\Model\StoreManagerInterface */ private $storeManager; /** * @var CollectionProcessorInterface */ private $collectionProcessor; /** * @param ResourcePage $resource * @param PageFactory $pageFactory * @param Data\PageInterfaceFactory $dataPageFactory * @param PageCollectionFactory $pageCollectionFactory * @param Data\PageSearchResultsInterfaceFactory $searchResultsFactory * @param DataObjectHelper $dataObjectHelper * @param DataObjectProcessor $dataObjectProcessor * @param StoreManagerInterface $storeManager * @param CollectionProcessorInterface $collectionProcessor */ public function __construct( ResourcePage $resource, PageFactory $pageFactory, Data\PageInterfaceFactory $dataPageFactory, PageCollectionFactory $pageCollectionFactory, Data\PageSearchResultsInterfaceFactory $searchResultsFactory, DataObjectHelper $dataObjectHelper, DataObjectProcessor $dataObjectProcessor, StoreManagerInterface $storeManager, CollectionProcessorInterface $collectionProcessor = null ) { $this->resource = $resource; $this->pageFactory = $pageFactory; $this->pageCollectionFactory = $pageCollectionFactory; $this->searchResultsFactory = $searchResultsFactory; $this->dataObjectHelper = $dataObjectHelper; $this->dataPageFactory = $dataPageFactory; $this->dataObjectProcessor = $dataObjectProcessor; $this->storeManager = $storeManager; $this->collectionProcessor = $collectionProcessor ?: $this->getCollectionProcessor(); } /** * Save Page data * * @param \Magento\Cms\Api\Data\PageInterface $page * @return Page * @throws CouldNotSaveException */ public function save(\Magento\Cms\Api\Data\PageInterface $page) { if ($page->getStoreId() === null) { $storeId = $this->storeManager->getStore()->getId(); $page->setStoreId($storeId); } try { $this->resource->save($page); } catch (\Exception $exception) { throw new CouldNotSaveException( __('Could not save the page: %1', $exception->getMessage()), $exception ); } return $page; } /** * Load Page data by given Page Identity * * @param string $pageId * @return Page * @throws \Magento\Framework\Exception\NoSuchEntityException */ public function getById($pageId) { $page = $this->pageFactory->create(); $page->load($pageId); if (!$page->getId()) { throw new NoSuchEntityException(__('The CMS page with the "%1" ID doesn\'t exist.', $pageId)); } return $page; } /** * Load Page data collection by given search criteria * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @param \Magento\Framework\Api\SearchCriteriaInterface $criteria * @return \Magento\Cms\Api\Data\PageSearchResultsInterface */ public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria) { /** @var \Magento\Cms\Model\ResourceModel\Page\Collection $collection */ $collection = $this->pageCollectionFactory->create(); $this->collectionProcessor->process($criteria, $collection); /** @var Data\PageSearchResultsInterface $searchResults */ $searchResults = $this->searchResultsFactory->create(); $searchResults->setSearchCriteria($criteria); $searchResults->setItems($collection->getItems()); $searchResults->setTotalCount($collection->getSize()); return $searchResults; } /** * Delete Page * * @param \Magento\Cms\Api\Data\PageInterface $page * @return bool * @throws CouldNotDeleteException */ public function delete(\Magento\Cms\Api\Data\PageInterface $page) { try { $this->resource->delete($page); } catch (\Exception $exception) { throw new CouldNotDeleteException(__( 'Could not delete the page: %1', $exception->getMessage() )); } return true; } /** * Delete Page by given Page Identity * * @param string $pageId * @return bool * @throws CouldNotDeleteException * @throws NoSuchEntityException */ public function deleteById($pageId) { return $this->delete($this->getById($pageId)); } /** * Retrieve collection processor * * @deprecated 102.0.0 * @return CollectionProcessorInterface */ private function getCollectionProcessor() { if (!$this->collectionProcessor) { $this->collectionProcessor = \Magento\Framework\App\ObjectManager::getInstance()->get( 'Magento\Cms\Model\Api\SearchCriteria\PageCollectionProcessor' ); } return $this->collectionProcessor; } }