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
Commit e0399cd5 authored by Nicolas's avatar Nicolas
Browse files

Développement des UI

parent 71de4cc8
No related branches found
No related tags found
No related merge requests found
<?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 $title
* @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 $title,
string $primaryFieldName,
string $requestFieldName,
Reporting $reporting,
SearchCriteriaBuilder $searchCriteriaBuilder,
RequestInterface $request,
FilterBuilder $filterBuilder,
array $meta = [],
array $data = [],
array $additionalFilterPool = []
) {
parent::__construct(
$title,
$primaryFieldName,
$requestFieldName,
$reporting,
$searchCriteriaBuilder,
$request,
$filterBuilder,
$meta,
$data
);
$this->isAllowedResource = 'NicolasBejean_CategoryWidget::add';
$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);
}
}
}
<?php
namespace NicolasBejean\CategoryWidget\Ui\Component\Listing\Column\CategoryWidget;
use \Magento\Store\Ui\Component\Listing\Column\Store\Options as StoreOptions;
/**
* Class Options
*
* @category PHP
* @package NNicolasBejean\CategoryWidget\Ui\Component\Listing\Column\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 Options extends StoreOptions
{
/**
* All Store Views value
*/
const ALL_STORE_VIEWS = '0';
/**
* Get options
*
* @return array
*/
public function toOptionArray()
{
if ($this->options !== null) {
return $this->options;
}
$this->currentOptions['All Store Views']['label'] = __('All Store Views');
$this->currentOptions['All Store Views']['value'] = self::ALL_STORE_VIEWS;
$this->generateCurrentOptions();
$this->options = array_values($this->currentOptions);
return $this->options;
}
}
<?php
namespace NicolasBejean\CategoryWidget\Ui\Component\Listing\Column;
use \Magento\Framework\UrlInterface;
use \Magento\Framework\View\Element\UiComponent\ContextInterface;
use \Magento\Framework\View\Element\UiComponentFactory;
use \Magento\Ui\Component\Listing\Columns\Column;
use \Magento\Framework\App\ObjectManager;
use \Magento\Framework\Escaper;
/**
* Class CategoryWidgetActions
*
* @category PHP
* @package NicolasBejean\CategoryWidget\Ui\Component\Listing\Column
* @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 CategoryWidgetActions extends Column
{
/**
* Url path
*/
const URL_PATH_EDIT = 'nicolasbejeancategorywidget/categorywidget/edit';
const URL_PATH_DELETE = 'nicolasbejeancategorywidget/categorywidget/delete';
/**
* @var UrlInterface
*/
protected $urlBuilder;
/**
* @var Escaper
*/
private $escaper;
/**
* Constructor
*
* @param ContextInterface $context
* @param UiComponentFactory $uiComponentFactory
* @param UrlInterface $urlBuilder
* @param array $components
* @param array $data
*/
public function __construct(
ContextInterface $context,
UiComponentFactory $uiComponentFactory,
UrlInterface $urlBuilder,
array $components = [],
array $data = []
) {
$this->urlBuilder = $urlBuilder;
parent::__construct($context, $uiComponentFactory, $components, $data);
}
/**
* Prepare Data Source
*
* @param array $dataSource
* @return array
*/
public function prepareDataSource(array $dataSource)
{
if (isset($dataSource['data']['items'])) {
foreach ($dataSource['data']['items'] as & $item) {
if (isset($item['entity_id'])) {
$identifier = $this->getEscaperHtml($item['identifier']);
$item[$this->getData('name')] = [
'edit' => [
'href' => $this->urlBuilder->getUrl(
static::URL_PATH_EDIT,
[
'entity_id' => $item['entity_id']
]
),
'label' => __('Edit')
],
'delete' => [
'href' => $this->urlBuilder->getUrl(
static::URL_PATH_DELETE,
[
'entity_id' => $item['entity_id']
]
),
'label' => __('Delete'),
'confirm' => [
'identifier' => __('Delete %1', $identifier),
'message' => __('Are you sure you want to delete a %1 record?', $identifier)
],
'post' => true
]
];
}
}
}
return $dataSource;
}
/**
* @param string|array $data
* @return array|string
*/
private function getEscaperHtml($data)
{
if (!$this->escaper) {
$this->escaper = ObjectManager::getInstance()->get(Escaper::class);
return $this->escaper->escapeHtml($data);
}
}
}
<?php
namespace NicolasBejean\CategoryWidget\Ui\Component\Listing\Column;
use \Magento\Store\Ui\Component\Listing\Column\Store as ColumnStore;
/**
* Class Store
*
* @category PHP
* @package NNicolasBejean\CategoryWidget\Ui\Component\Listing\Column
* @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 Store extends ColumnStore
{
/**
* Fix magento bug with function empty
*
* @param array $item
* @return string
*/
protected function prepareItem(array $item)
{
if ($item[$this->storeKey] == 0) {
$item[$this->storeKey] = [0];
}
return parent::prepareItem($item);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment