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 3.14 KiB
Newer Older
  • Learn to ignore specific revisions
  • Nicolas's avatar
    Nicolas committed
    <?php
    namespace NicolasBejean\CategoryWidget\Model\CategoryWidget;
    
    use \NicolasBejean\CategoryWidget\Model\CategoryWidget;
    use \NicolasBejean\CategoryWidget\Model\ResourceModel\CategoryWidget\Collection;
    use \NicolasBejean\CategoryWidget\Model\ResourceModel\CategoryWidget\CollectionFactory;
    use \Magento\Framework\App\Request\DataPersistorInterface;
    use \Magento\Ui\DataProvider\AbstractDataProvider;
    
    /**
     * Class DataProvider
     *
     * @category PHP
     * @package  NicolasBejean\CategoryWidget\Model\CategoryWidget
     * @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 AbstractDataProvider
    {
        /**
         * @var Collection
         */
        protected $collection;
    
        /**
         * @var DataPersistorInterface
         */
        protected $dataPersistor;
    
        /**
         * @var array
         */
        protected $loadedData;
    
        /**
         * Constructor
         *
    
         * @param string                    $name
    
    Nicolas's avatar
    Nicolas committed
         * @param string                    $primaryFieldName
         * @param string                    $requestFieldName
         * @param CollectionFactory         $categoryWidgetCollectionFactory
         * @param DataPersistorInterface    $dataPersistor
         * @param array                     $meta
         * @param array                     $data
         */
        public function __construct(
    
    Nicolas's avatar
    Nicolas committed
            string                          $primaryFieldName,
            string                          $requestFieldName,
            CollectionFactory               $categoryWidgetCollectionFactory,
            DataPersistorInterface          $dataPersistor,
            array $meta                     = [],
            array $data                     = []
        ) {
            $this->collection               = $categoryWidgetCollectionFactory->create();
            $this->dataPersistor            = $dataPersistor;
    
    
            parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
    
    Nicolas's avatar
    Nicolas committed
        }
    
        /**
         * Get data
         *
         * @return array
         */
        public function getData()
        {
            if (isset($this->loadedData)) {
                return $this->loadedData;
            }
            $items = $this->collection->getItems();
            /** @var CategoryWidget $categoryWidget */
            foreach ($items as $categoryWidget) {
                $this->loadedData[$categoryWidget->getId()] = $categoryWidget->getData();
                if ($categoryWidget->getIdentifier()) {
                    $m['identifier'] = $categoryWidget->getIdentifier();
                    $fullData = $this->loadedData;
                    $this->loadedData[$categoryWidget->getId()] = array_merge($fullData[$categoryWidget->getId()], $m);
                }
            }
    
    
    Nicolas's avatar
    Nicolas committed
            $data = $this->dataPersistor->get('nicolasbejean_categorywidget_item');
    
    Nicolas's avatar
    Nicolas committed
    
            if (!empty($data)) {
                $categoryWidget = $this->collection->getNewEmptyItem();
                $categoryWidget->setData($data);
                $this->loadedData[$categoryWidget->getId()] = $categoryWidget->getData();
    
    Nicolas's avatar
    Nicolas committed
                $this->dataPersistor->clear('nicolasbejean_categorywidget_item');
    
    Nicolas's avatar
    Nicolas committed
            }
    
            return $this->loadedData;
        }
    }