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
DataProvider.php 4.06 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas's avatar
    Nicolas committed
    <?php
    namespace NicolasBejean\CategoryWidget\Ui\Component;
    
    use \Magento\Cms\Ui\Component\AddFilterInterface;
    use \Magento\Framework\Api\Filter;
    use \Magento\Framework\Api\FilterBuilder;
    use \Magento\Framework\Api\Search\SearchCriteriaBuilder;
    use \Magento\Framework\App\ObjectManager;
    use \Magento\Framework\App\RequestInterface;
    use \Magento\Framework\AuthorizationInterface;
    use \Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider as UiComponentDataProvider;
    use \Magento\Framework\View\Element\UiComponent\DataProvider\Reporting;
    
    /**
     * Class DataProvider
     *
     * @category PHP
     * @package  NicolasBejean\CategoryWidget\Ui\Component
     * @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 DataProvider extends UiComponentDataProvider
    {
        /** @var string */
        private $isAllowedResource;
    
        /**
         * @var AuthorizationInterface
         */
        private $authorization;
    
        /**
         * @var AddFilterInterface[]
         */
        private $additionalFilterPool;
    
        /**
    
         * @param string                    $name
    
    Nicolas's avatar
    Nicolas committed
         * @param string                    $primaryFieldName
         * @param string                    $requestFieldName
         * @param Reporting                 $reporting
         * @param SearchCriteriaBuilder     $searchCriteriaBuilder
         * @param RequestInterface          $request
         * @param FilterBuilder             $filterBuilder
         * @param array                     $meta
         * @param array                     $data
         * @param array                     $additionalFilterPool
         * @SuppressWarnings(PHPMD.ExcessiveParameterList)
         */
        public function __construct(
    
            string                          $name,
    
    Nicolas's avatar
    Nicolas committed
            string                          $primaryFieldName,
            string                          $requestFieldName,
            Reporting                       $reporting,
            SearchCriteriaBuilder           $searchCriteriaBuilder,
            RequestInterface                $request,
            FilterBuilder                   $filterBuilder,
            array                           $meta = [],
            array                           $data = [],
            array                           $additionalFilterPool = []
        ) {
            parent::__construct(
    
    Nicolas's avatar
    Nicolas committed
                $primaryFieldName,
                $requestFieldName,
                $reporting,
                $searchCriteriaBuilder,
                $request,
                $filterBuilder,
                $meta,
                $data
            );
    
    
    Nicolas's avatar
    Nicolas committed
            $this->isAllowedResource = 'NicolasBejean_CategoryWidget::global';
    
    Nicolas's avatar
    Nicolas committed
            $this->meta = array_replace_recursive($meta, $this->prepareMetadata());
            $this->additionalFilterPool = $additionalFilterPool;
        }
    
        /**
         * @return bool
         */
        private function getAuthorizationInstance()
        {
            if ($this->authorization === null) {
                $this->authorization = ObjectManager::getInstance()->get(AuthorizationInterface::class);
            }
    
            return $this->authorization->isAllowed($this->isAllowedResource);
        }
    
        /**
         * Prepares Meta
         *
         * @return array
         */
        public function prepareMetadata()
        {
            $metadata = [];
    
            if (!$this->getAuthorizationInstance()) {
                $metadata = [
                    'categorywidget_item_columns' => [
                        'arguments' => [
                            'data' => [
                                'config' => [
                                    'editorConfig' => [
                                        'enabled' => false
                                    ]
                                ]
                            ]
                        ]
                    ]
                ];
            }
    
            return $metadata;
        }
    
        /**
         * @inheritdoc
         */
        public function addFilter(Filter $filter)
        {
            if (!empty($this->additionalFilterPool[$filter->getField()])) {
                $this->additionalFilterPool[$filter->getField()]->addFilter($this->searchCriteriaBuilder, $filter);
            } else {
                parent::addFilter($filter);
            }
        }
    }