<?php namespace NicolasBejean\CategoryWidget\Model; use \Magento\Framework\Api\SearchCriteriaInterface; use \Magento\Framework\Exception\LocalizedException; use \NicolasBejean\CategoryWidget\Api\Data\CategoryWidgetInterface; use \NicolasBejean\CategoryWidget\Api\Data\CategoryWidgetInterfaceFactory; use \NicolasBejean\CategoryWidget\Api\Data\CategoryWidgetSearchResultsInterface; use \NicolasBejean\CategoryWidget\Api\CategoryWidgetRepositoryInterface; use \NicolasBejean\CategoryWidget\Api\Data; use \NicolasBejean\CategoryWidget\Model\ResourceModel\CategoryWidget as Resource; use \NicolasBejean\CategoryWidget\Model\ResourceModel\CategoryWidget\Collection; use \NicolasBejean\CategoryWidget\Model\ResourceModel\CategoryWidget\CollectionFactory as CategoryWidgetCollectionFactory; 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; use \Exception; /** * Class CategoryWidgetRepository * * @category PHP * @package NicolasBejean\CategoryWidget\Model * @author Nicolas BĂ©jean <nicolas@bejean.eu> * @license https://github.com/nicolasbejean/category-widget/blob/master/licence.txt BSD Licence * @link https://www.bejean.eu */ class CategoryWidgetRepository implements CategoryWidgetRepositoryInterface { /** * @var Resource */ protected $resource; /** * @var CategoryWidgetFactory */ protected $categoryWidgetFactory; /** * @var CategoryWidgetCollectionFactory */ protected $categoryWidgetCollectionFactory; /** * @var Data\CategoryWidgetSearchResultsInterfaceFactory */ protected $searchResultsFactory; /** * @var DataObjectHelper */ protected $dataObjectHelper; /** * @var DataObjectProcessor */ protected $dataObjectProcessor; /** * @var CategoryWidgetInterfaceFactory */ protected $dataCategoryWidgetFactory; /** * @var StoreManagerInterface */ private $storeManager; /** * @var CollectionProcessorInterface */ private $collectionProcessor; /** * @param Resource $resource * @param CategoryWidgetFactory $categoryWidgetFactory * @param CategoryWidgetInterfaceFactory $dataCategoryWidgetFactory * @param CategoryWidgetCollectionFactory $categoryWidgetCollectionFactory * @param Data\CategoryWidgetSearchResultsInterfaceFactory $searchResultsFactory * @param DataObjectHelper $dataObjectHelper * @param DataObjectProcessor $dataObjectProcessor * @param StoreManagerInterface $storeManager * @param CollectionProcessorInterface $collectionProcessor */ public function __construct( Resource $resource, CategoryWidgetFactory $categoryWidgetFactory, CategoryWidgetInterfaceFactory $dataCategoryWidgetFactory, CategoryWidgetCollectionFactory $categoryWidgetCollectionFactory, Data\CategoryWidgetSearchResultsInterfaceFactory $searchResultsFactory, DataObjectHelper $dataObjectHelper, DataObjectProcessor $dataObjectProcessor, StoreManagerInterface $storeManager, CollectionProcessorInterface $collectionProcessor = null ) { $this->resource = $resource; $this->categoryWidgetFactory = $categoryWidgetFactory; $this->categoryWidgetCollectionFactory = $categoryWidgetCollectionFactory; $this->searchResultsFactory = $searchResultsFactory; $this->dataObjectHelper = $dataObjectHelper; $this->dataCategoryWidgetFactory = $dataCategoryWidgetFactory; $this->dataObjectProcessor = $dataObjectProcessor; $this->storeManager = $storeManager; $this->collectionProcessor = $collectionProcessor; } /** * Save Category Widget data * * @param CategoryWidgetInterface $categoryWidget * @return CategoryWidgetInterface * @throws CouldNotSaveException * @throws NoSuchEntityException */ public function save(CategoryWidgetInterface $categoryWidget) { if (empty($categoryWidget->getStoreId())) { $categoryWidget->setStoreId($this->storeManager->getStore()->getId()); } try { $this->resource->save($categoryWidget); } catch (Exception $exception) { throw new CouldNotSaveException(__($exception->getMessage())); } return $categoryWidget; } /** * Load Category Widget data by given Image Identity * * @param string $id * @return CategoryWidget * @throws NoSuchEntityException * @throws LocalizedException */ public function getById($id) { /** @var CategoryWidget $categoryWidget */ $categoryWidget = $this->categoryWidgetFactory->create(); $this->resource->load($categoryWidget, $id); if (!$categoryWidget->getId()) { throw new NoSuchEntityException(__('The category widget with the \'%1\' ID doesn\'t exist.', $id)); } return $categoryWidget; } /** * Load Category Widget data collection by given search criteria * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @param SearchCriteriaInterface $criteria * @return CategoryWidgetSearchResultsInterface */ public function getList(SearchCriteriaInterface $criteria) { /** @var Collection $collection */ $collection = $this->categoryWidgetCollectionFactory->create(); $this->collectionProcessor->process($criteria, $collection); /** @var CategoryWidgetSearchResultsInterface $searchResults */ $searchResults = $this->searchResultsFactory->create(); $searchResults->setSearchCriteria($criteria); $searchResults->setItems($collection->getItems()); $searchResults->setTotalCount($collection->getSize()); return $searchResults; } /** * Delete Category Widget * * @param CategoryWidgetInterface $categoryWidget * @return bool * @throws CouldNotDeleteException */ public function delete(CategoryWidgetInterface $categoryWidget) { try { $this->resource->delete($categoryWidget); } catch (Exception $exception) { throw new CouldNotDeleteException(__($exception->getMessage())); } return true; } /** * Delete Category Widget by given Category Widget Identity * * @param string $id * @return bool * @throws CouldNotDeleteException * @throws NoSuchEntityException * @throws LocalizedException */ public function deleteById($id) { return $this->delete($this->getById($id)); } }