Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
CategoryWidgetRepository.php 7.62 KiB
Newer Older
Nicolas's avatar
Nicolas committed
<?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));
    }
}