src/Controller/ViewOrder/GetViewOrdersFieldsAction.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Controller\ViewOrder;
  3. use App\Transformer\FQCNToShortNameTransformer;
  4. use App\V4\Form\FormFieldExtractor;
  5. use App\ViewOrders\Builder\ViewOrdersBuilder;
  6. use App\ViewOrders\Builder\ViewOrdersBuilderInterface;
  7. use App\ViewOrders\Model\ViewOrder;
  8. use Symfony\Component\HttpFoundation\Request;
  9. class GetViewOrdersFieldsAction
  10. {
  11.     /**
  12.      * @var ViewOrdersBuilder
  13.      */
  14.     private $viewOrdersBuilder;
  15.     /**
  16.      * @var FormFieldExtractor
  17.      */
  18.     private $formFieldExtractor;
  19.     /**
  20.      * @param ViewOrdersBuilder  $viewOrdersBuilder
  21.      * @param FormFieldExtractor $formFieldExtractor
  22.      */
  23.     public function __construct(ViewOrdersBuilder $viewOrdersBuilderFormFieldExtractor $formFieldExtractor)
  24.     {
  25.         $this->viewOrdersBuilder $viewOrdersBuilder;
  26.         $this->formFieldExtractor $formFieldExtractor;
  27.     }
  28.     /**
  29.      * @param Request $request
  30.      * @param string  $entityShortName
  31.      *
  32.      * @return array
  33.      */
  34.     public function __invoke(Request $requeststring $entityShortName): array
  35.     {
  36.         $tabId $request->query->get('tabId');
  37.         if ('null' === $tabId) {
  38.             $tabId null;
  39.         }
  40.         $entityFQCN = (new FQCNToShortNameTransformer())->reverseTransform($entityShortName);
  41.         // @todo refacto : a supprimer lorsque la cohabitation ancien/nouveau prospect sera terminée
  42.         $entityFQCN 'App\Model\Prospect\Prospect' === $entityFQCN 'App\V4\Model\Prospect\Prospect' $entityFQCN;
  43.         $entityFQCN 'App\Model\Contact\Contact' === $entityFQCN 'App\V4\Model\Contact\Contact' $entityFQCN;
  44.         $entityFQCN 'App\Model\Task\Task' === $entityFQCN 'App\V4\Model\Task\Task' $entityFQCN;
  45.         $entityFQCN 'App\Model\Quote\Quote' === $entityFQCN 'App\V4\Model\Quote\Quote' $entityFQCN;
  46.         $entityFQCN 'App\Model\Quote\MailType' === $entityFQCN 'App\V4\Model\Quote\MailType' $entityFQCN;
  47.         $entityFQCN null === $entityFQCN && 'mail-type' === $entityShortName 'App\V4\Model\MailType\MailType' $entityFQCN;
  48.         $viewOrders $this->viewOrdersBuilder->getViewOrder($entityFQCNViewOrdersBuilderInterface::VIEW_ORDER_TYPE_LIST$tabId);
  49.         $fields $this->getFields($entityFQCN$viewOrders);
  50.         usort($fields, function ($a$b) {
  51.             return $a['metadata']['order'] <=> $b['metadata']['order'];
  52.         });
  53.         return ['fields' => $fields];
  54.     }
  55.     /**
  56.      * @param string    $entityFQCN
  57.      * @param ViewOrder $viewOrders
  58.      *
  59.      * @return array
  60.      */
  61.     private function getFields(string $entityFQCNViewOrder $viewOrders): array
  62.     {
  63.         $allFields $this->formFieldExtractor->getAllFormFieldNamesFromEntity($entityFQCN);
  64.         $fields = [];
  65.         foreach ($allFields as $fieldKey => $fieldValue) {
  66.             $isDisplayed false;
  67.             $order PHP_INT_MAX;
  68.             foreach ($viewOrders->getGroups()[0]->getItems() as $voItem) {
  69.                 $voKey $voItem->getKey();
  70.                 $voKey str_replace(['specificFields_''specificFields.'], 'sf_'$voKey);
  71.                 if ($voKey === $fieldKey) {
  72.                     $isDisplayed true;
  73.                     $order $voItem->getOrder();
  74.                     break;
  75.                 }
  76.             }
  77.             $fields[] = [
  78.                 'key' => $fieldKey,
  79.                 'label' => $fieldValue->getConfig()->getOption('label') ?? $fieldValue->getName(),
  80.                 'metadata' => [
  81.                     'isDisplayed' => $isDisplayed,
  82.                     'order' => $order,
  83.                 ],
  84.             ];
  85.         }
  86.         return $fields;
  87.     }
  88. }