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.13 KiB
Newer Older
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
     *
Nicolas's avatar
Nicolas committed
     * @param string                    $title
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                          $title,
Nicolas's avatar
Nicolas committed
        string                          $primaryFieldName,
        string                          $requestFieldName,
        CollectionFactory               $categoryWidgetCollectionFactory,
        DataPersistorInterface          $dataPersistor,
        array $meta                     = [],
        array $data                     = []
    ) {
        $this->collection               = $categoryWidgetCollectionFactory->create();
        $this->dataPersistor            = $dataPersistor;

Nicolas's avatar
Nicolas committed
        parent::__construct($title, $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);
            }
        }

        $data = $this->dataPersistor->get('nicolasbejean_categorywidget');

        if (!empty($data)) {
            $categoryWidget = $this->collection->getNewEmptyItem();
            $categoryWidget->setData($data);
            $this->loadedData[$categoryWidget->getId()] = $categoryWidget->getData();
            $this->dataPersistor->clear('nicolasbejean_categorywidget');
        }

        return $this->loadedData;
    }
}