<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Cms\Model; use Magento\Cms\Api\BlockRepositoryInterface; use Magento\Cms\Api\Data; use Magento\Cms\Model\ResourceModel\Block as ResourceBlock; use Magento\Cms\Model\ResourceModel\Block\CollectionFactory as BlockCollectionFactory; 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\Store\Model\StoreManagerInterface; /** * Class BlockRepository * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class BlockRepository implements BlockRepositoryInterface { /** * @var ResourceBlock */ protected $resource; /** * @var BlockFactory */ protected $blockFactory; /** * @var BlockCollectionFactory */ protected $blockCollectionFactory; /** * @var Data\BlockSearchResultsInterfaceFactory */ protected $searchResultsFactory; /** * @var DataObjectHelper */ protected $dataObjectHelper; /** * @var DataObjectProcessor */ protected $dataObjectProcessor; /** * @var \Magento\Cms\Api\Data\BlockInterfaceFactory */ protected $dataBlockFactory; /** * @var \Magento\Store\Model\StoreManagerInterface */ private $storeManager; /** * @var CollectionProcessorInterface */ private $collectionProcessor; /** * @param ResourceBlock $resource * @param BlockFactory $blockFactory * @param Data\BlockInterfaceFactory $dataBlockFactory * @param BlockCollectionFactory $blockCollectionFactory * @param Data\BlockSearchResultsInterfaceFactory $searchResultsFactory * @param DataObjectHelper $dataObjectHelper * @param DataObjectProcessor $dataObjectProcessor * @param StoreManagerInterface $storeManager * @param CollectionProcessorInterface $collectionProcessor */ public function __construct( ResourceBlock $resource, BlockFactory $blockFactory, \Magento\Cms\Api\Data\BlockInterfaceFactory $dataBlockFactory, BlockCollectionFactory $blockCollectionFactory, Data\BlockSearchResultsInterfaceFactory $searchResultsFactory, DataObjectHelper $dataObjectHelper, DataObjectProcessor $dataObjectProcessor, StoreManagerInterface $storeManager, CollectionProcessorInterface $collectionProcessor = null ) { $this->resource = $resource; $this->blockFactory = $blockFactory; $this->blockCollectionFactory = $blockCollectionFactory; $this->searchResultsFactory = $searchResultsFactory; $this->dataObjectHelper = $dataObjectHelper; $this->dataBlockFactory = $dataBlockFactory; $this->dataObjectProcessor = $dataObjectProcessor; $this->storeManager = $storeManager; $this->collectionProcessor = $collectionProcessor ?: $this->getCollectionProcessor(); } /** * Save Block data * * @param \Magento\Cms\Api\Data\BlockInterface $block * @return Block * @throws CouldNotSaveException */ public function save(Data\BlockInterface $block) { if (empty($block->getStoreId())) { $block->setStoreId($this->storeManager->getStore()->getId()); } try { $this->resource->save($block); } catch (\Exception $exception) { throw new CouldNotSaveException(__($exception->getMessage())); } return $block; } /** * Load Block data by given Block Identity * * @param string $blockId * @return Block * @throws \Magento\Framework\Exception\NoSuchEntityException */ public function getById($blockId) { $block = $this->blockFactory->create(); $this->resource->load($block, $blockId); if (!$block->getId()) { throw new NoSuchEntityException(__('The CMS block with the "%1" ID doesn\'t exist.', $blockId)); } return $block; } /** * Load Block data collection by given search criteria * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @param \Magento\Framework\Api\SearchCriteriaInterface $criteria * @return \Magento\Cms\Api\Data\BlockSearchResultsInterface */ public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria) { /** @var \Magento\Cms\Model\ResourceModel\Block\Collection $collection */ $collection = $this->blockCollectionFactory->create(); $this->collectionProcessor->process($criteria, $collection); /** @var Data\BlockSearchResultsInterface $searchResults */ $searchResults = $this->searchResultsFactory->create(); $searchResults->setSearchCriteria($criteria); $searchResults->setItems($collection->getItems()); $searchResults->setTotalCount($collection->getSize()); return $searchResults; } /** * Delete Block * * @param \Magento\Cms\Api\Data\BlockInterface $block * @return bool * @throws CouldNotDeleteException */ public function delete(Data\BlockInterface $block) { try { $this->resource->delete($block); } catch (\Exception $exception) { throw new CouldNotDeleteException(__($exception->getMessage())); } return true; } /** * Delete Block by given Block Identity * * @param string $blockId * @return bool * @throws CouldNotDeleteException * @throws NoSuchEntityException */ public function deleteById($blockId) { return $this->delete($this->getById($blockId)); } /** * 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\BlockCollectionProcessor' ); } return $this->collectionProcessor; } }