vendor/sylius/grid-bundle/src/Component/Definition/ArrayToDefinitionConverter.php line 30

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Sylius package.
  4.  *
  5.  * (c) Paweł Jędrzejewski
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace Sylius\Component\Grid\Definition;
  12. use Sylius\Component\Grid\Event\GridDefinitionConverterEvent;
  13. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  14. final class ArrayToDefinitionConverter implements ArrayToDefinitionConverterInterface
  15. {
  16.     public const EVENT_NAME 'sylius.grid.%s';
  17.     private EventDispatcherInterface $eventDispatcher;
  18.     public function __construct(EventDispatcherInterface $eventDispatcher)
  19.     {
  20.         $this->eventDispatcher $eventDispatcher;
  21.     }
  22.     public function convert(string $code, array $configuration): Grid
  23.     {
  24.         $grid Grid::fromCodeAndDriverConfiguration(
  25.             $code,
  26.             $configuration['driver']['name'],
  27.             $configuration['driver']['options']
  28.         );
  29.         if (array_key_exists('sorting'$configuration)) {
  30.             $grid->setSorting($configuration['sorting']);
  31.         }
  32.         if (array_key_exists('limits'$configuration)) {
  33.             $grid->setLimits($configuration['limits']);
  34.         }
  35.         foreach ($configuration['fields'] ?? [] as $name => $fieldConfiguration) {
  36.             $grid->addField($this->convertField($name$fieldConfiguration));
  37.         }
  38.         foreach ($configuration['filters'] ?? [] as $name => $filterConfiguration) {
  39.             $grid->addFilter($this->convertFilter($name$filterConfiguration));
  40.         }
  41.         foreach ($configuration['actions'] ?? [] as $name => $actionGroupConfiguration) {
  42.             $grid->addActionGroup($this->convertActionGroup($name$actionGroupConfiguration));
  43.         }
  44.         $this->eventDispatcher->dispatch(new GridDefinitionConverterEvent($grid), $this->getEventName($code));
  45.         return $grid;
  46.     }
  47.     private function convertField(string $name, array $configuration): Field
  48.     {
  49.         $field Field::fromNameAndType($name$configuration['type']);
  50.         if (array_key_exists('path'$configuration)) {
  51.             $field->setPath($configuration['path']);
  52.         }
  53.         if (array_key_exists('label'$configuration)) {
  54.             $field->setLabel($configuration['label']);
  55.         }
  56.         if (array_key_exists('enabled'$configuration)) {
  57.             $field->setEnabled($configuration['enabled']);
  58.         }
  59.         if (array_key_exists('sortable'$configuration)) {
  60.             $sortable $configuration['sortable'];
  61.             if ($sortable === true || $sortable === null) {
  62.                 $sortable $name;
  63.             }
  64.             if ($sortable === false) {
  65.                 $sortable null;
  66.             }
  67.             $field->setSortable($sortable);
  68.         }
  69.         if (array_key_exists('position'$configuration)) {
  70.             $field->setPosition($configuration['position']);
  71.         }
  72.         if (array_key_exists('options'$configuration)) {
  73.             $field->setOptions($configuration['options']);
  74.         }
  75.         return $field;
  76.     }
  77.     private function convertFilter(string $name, array $configuration): Filter
  78.     {
  79.         $filter Filter::fromNameAndType($name$configuration['type']);
  80.         if (array_key_exists('label'$configuration)) {
  81.             $filter->setLabel($configuration['label']);
  82.         }
  83.         if (array_key_exists('template'$configuration)) {
  84.             $filter->setTemplate($configuration['template']);
  85.         }
  86.         if (array_key_exists('enabled'$configuration)) {
  87.             $filter->setEnabled($configuration['enabled']);
  88.         }
  89.         if (array_key_exists('position'$configuration)) {
  90.             $filter->setPosition($configuration['position']);
  91.         }
  92.         if (array_key_exists('options'$configuration)) {
  93.             $filter->setOptions($configuration['options']);
  94.         }
  95.         if (array_key_exists('form_options'$configuration)) {
  96.             $filter->setFormOptions($configuration['form_options']);
  97.         }
  98.         if (array_key_exists('default_value'$configuration)) {
  99.             $filter->setCriteria($configuration['default_value']);
  100.         }
  101.         return $filter;
  102.     }
  103.     private function convertActionGroup(string $name, array $configuration): ActionGroup
  104.     {
  105.         $actionGroup ActionGroup::named($name);
  106.         foreach ($configuration as $actionName => $actionConfiguration) {
  107.             $actionGroup->addAction($this->convertAction($actionName$actionConfiguration));
  108.         }
  109.         return $actionGroup;
  110.     }
  111.     private function convertAction(string $name, array $configuration): Action
  112.     {
  113.         $action Action::fromNameAndType($name$configuration['type']);
  114.         if (array_key_exists('label'$configuration)) {
  115.             $action->setLabel($configuration['label']);
  116.         }
  117.         if (array_key_exists('icon'$configuration)) {
  118.             $action->setIcon($configuration['icon']);
  119.         }
  120.         if (array_key_exists('enabled'$configuration)) {
  121.             $action->setEnabled($configuration['enabled']);
  122.         }
  123.         if (array_key_exists('position'$configuration)) {
  124.             $action->setPosition($configuration['position']);
  125.         }
  126.         if (array_key_exists('options'$configuration)) {
  127.             $action->setOptions($configuration['options']);
  128.         }
  129.         return $action;
  130.     }
  131.     private function getEventName(string $code): string
  132.     {
  133.         return sprintf(self::EVENT_NAMEstr_replace('sylius_'''$code));
  134.     }
  135. }