src/V4/Form/Type/Tab/TabType.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\V4\Form\Type\Tab;
  3. use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
  4. use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
  5. use App\DataProvider\SavedRequest\SavedRequestSearchProvider;
  6. use App\Form\Type\SubresourceChoicesTrait;
  7. use App\Model\SavedUserSearch\SavedUserSearch;
  8. use App\Model\Traits\TimeStampableFormType;
  9. use App\Service\ApiWebServiceFilterBuilder\PaginationFilterBuilder;
  10. use App\Service\Cache\CacheManager;
  11. use App\V4\Model\Tab\Tab;
  12. use Symfony\Component\Form\AbstractType;
  13. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  14. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  15. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  16. use Symfony\Component\Form\Extension\Core\Type\TextType;
  17. use Symfony\Component\Form\FormBuilderInterface;
  18. use Symfony\Component\OptionsResolver\OptionsResolver;
  19. class TabType extends AbstractType
  20. {
  21.     use TimeStampableFormType;
  22.     use SubresourceChoicesTrait {
  23.         getEntityChoices as private getEntityChoicesTrait;
  24.     }
  25.     /**
  26.      * @var CollectionDataProviderInterface
  27.      */
  28.     private $collectionDataProvider;
  29.     /**
  30.      * @var CacheManager
  31.      */
  32.     private $cacheManager;
  33.     /**
  34.      * @var SavedRequestSearchProvider
  35.      */
  36.     private $savedRequestSearchProvider;
  37.     /**
  38.      * @param CollectionDataProviderInterface $collectionDataProvider
  39.      * @param SavedRequestSearchProvider      $savedRequestSearchProvider
  40.      * @param CacheManager                    $cacheManager
  41.      */
  42.     public function __construct(
  43.         CollectionDataProviderInterface $collectionDataProvider,
  44.         SavedRequestSearchProvider $savedRequestSearchProvider,
  45.         CacheManager $cacheManager
  46.     ) {
  47.         $this->collectionDataProvider $collectionDataProvider;
  48.         $this->savedRequestSearchProvider $savedRequestSearchProvider;
  49.         $this->cacheManager $cacheManager;
  50.     }
  51.     /**
  52.      * @param FormBuilderInterface $builder
  53.      * @param array                $options
  54.      *
  55.      * @return void
  56.      *
  57.      * @throws ResourceClassNotSupportedException
  58.      */
  59.     public function buildForm(FormBuilderInterface $builder, array $options): void
  60.     {
  61.         parent::buildForm($builder$options);
  62.         /** @var Tab $tab */
  63.         $tab $builder->getData();
  64.         $choicesSavedUsersSearchs = [];
  65.         $choiceBadgeIds = [];
  66.         if ($tab instanceof Tab && !empty($tab->getCustomerId())) {
  67.             $savedUsersSearchs $this->collectionDataProvider
  68.                 ->getCollection(SavedUserSearch::class, null, [
  69.                     'filters' => [
  70.                         'customerId' => $tab->getCustomerId(),
  71.                         'searchType' => SavedUserSearch::SEARCH_TYPES,
  72.                         PaginationFilterBuilder::ACTIVATE_PAGNIATION_KEY => false,
  73.                     ],
  74.                 ]);
  75.             $searchExist false;
  76.             foreach ($savedUsersSearchs as $savedUsersSearch) {
  77.                 $choicesSavedUsersSearchs[$savedUsersSearch->getName().' ('.$savedUsersSearch->getSearchType().')'] =
  78.                     $savedUsersSearch->getSearchType().'|'.$savedUsersSearch->getSearchContent();
  79.                 if ($tab->getSearchType().'|'.$tab->getSearchContent()
  80.                     === $savedUsersSearch->getSearchType().'|'.$savedUsersSearch->getSearchContent()) {
  81.                     $searchExist true;
  82.                 }
  83.             }
  84.             if (!$searchExist) {
  85.                 $choicesSavedUsersSearchs array_merge(
  86.                     $choicesSavedUsersSearchs,
  87.                     [$tab->getName().' ('.$tab->getSearchType().')' => $tab->getSearchType().'|'.$tab->getSearchContent()]
  88.                 );
  89.             }
  90.             $choiceBadgeIds $this->savedRequestSearchProvider->findAllBadgeIdsForTabChoice($tab->getCustomerId());
  91.         }
  92.         $builder
  93.             ->add('savedUserSearchInfo'ChoiceType::class, [
  94.                 'label' => 'saved_user_search',
  95.                 'choices' => $choicesSavedUsersSearchs,
  96.                 'required' => true,
  97.                 'data' => $tab instanceof Tab $tab->getSearchType().'|'.$tab->getSearchContent() : null,
  98.             ])
  99.             ->add('name'TextType::class, [
  100.                 'required' => true,
  101.             ])
  102.             ->add('title'TextType::class, [
  103.                 'required' => true,
  104.             ])
  105.             ->add('slug'TextType::class, [
  106.                 'required' => true,
  107.                 'attr' => ['isUnique' => true],
  108.             ])
  109.             ->add('groupLabel'TextType::class, [
  110.                 'required' => false,
  111.             ])
  112.             ->add('position'IntegerType::class, [
  113.                 'required' => false,
  114.             ])
  115.             ->add('isRoleNeeded'CheckboxType::class, [
  116.                 'required' => false,
  117.                 'false_values' => ['false''0'''null],
  118.             ])
  119.             ->add('isDisabledDisplaySublist'CheckboxType::class, [
  120.                 'required' => false,
  121.                 'false_values' => ['false''0'''null],
  122.             ])
  123.             ->add('searchType'TextType::class, [
  124.                 // @todo refacto : changer en HiddenType à terme, cause liform ne gère pas le HiddenType
  125.                 // @see https://github.com/Limenius/Liform/issues/34
  126.                 'label' => false,
  127.                 'required' => true,
  128.                 'attr' => ['type' => 'hidden'],
  129.             ])
  130.             ->add('customerId'TextType::class, [
  131.                 // @todo refacto : changer en HiddenType à terme, cause liform ne gère pas le HiddenType
  132.                 // @see https://github.com/Limenius/Liform/issues/34
  133.                 'label' => false,
  134.                 'required' => true,
  135.                 'attr' => ['type' => 'hidden'],
  136.             ])
  137.             ->add('badgeId'ChoiceType::class, [
  138.                 'required' => false,
  139.                 'choices' => $choiceBadgeIds,
  140.             ])
  141.         ;
  142.     }
  143.     /**
  144.      * @param OptionsResolver $resolver
  145.      *
  146.      * @return void
  147.      */
  148.     public function configureOptions(OptionsResolver $resolver): void
  149.     {
  150.         parent::configureOptions($resolver);
  151.         $resolver->setDefaults([
  152.             'data_class' => Tab::class,
  153.             'csrf_protection' => false,
  154.             'allow_extra_fields' => true,
  155.         ]);
  156.     }
  157. }