src/EventSubscriber/Form/AddUtilisateurFieldByReseauCdeSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Form;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityRepository;
  5. use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\EntityFilterType;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Form\FormEvent;
  8. use Symfony\Component\Form\FormEvents;
  9. class AddUtilisateurFieldByReseauCdeSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @param $userConnect
  13.      */
  14.     public function __construct($userConnect)
  15.     {
  16.         $this->userConnect $userConnect;
  17.     }
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         return [
  21.             FormEvents::PRE_SET_DATA => 'preSetData',
  22.             FormEvents::PRE_SUBMIT => 'preSubmit',
  23.         ];
  24.     }
  25.     public function preSetData(FormEvent $event)
  26.     {
  27.         $form $event->getForm();
  28.         $reseau $form->get('reseau')->getData();
  29.         $this->addField($form$reseau);
  30.     }
  31.     public function preSubmit(FormEvent $event)
  32.     {
  33.         $data $event->getData();
  34.         $form $event->getForm();
  35.         if (array_key_exists("reseau"$data)) {
  36.             $reseau $data["reseau"];
  37.             $this->addField($form$reseau);
  38.         }
  39.     }
  40.     private function addField(
  41.         $form,
  42.         $reseau
  43.     )
  44.     {
  45.         $userConnect $this->userConnect;
  46.         $form->add('utilisateur'EntityFilterType::class,
  47.             [
  48.                 'class' => User::class,
  49.                 'choice_label' => function (
  50.                     User $user
  51.                 ) {
  52.                     return sprintf("%s %s"$user->getName(), $user->getFirstname());
  53.                 },
  54.                 'query_builder' => function (
  55.                     EntityRepository $er
  56.                 ) use
  57.                 (
  58.                     $userConnect,
  59.                     $reseau
  60.                 ) {
  61.                     $er $er->createQueryBuilder('u')
  62.                              ->andWhere('u.reseau = :reseau')
  63.                              ->setParameter('reseau'$reseau)
  64.                              ->orderBy("u.name"'ASC')
  65.                              ->addOrderBy("u.firstname"'ASC');
  66.                     if ($userConnect->getProfil()->getValidationFinale()) {
  67.                         return $er;
  68.                     }
  69.                     if ($userConnect->getProfil()->getValidation()) {
  70.                         $er->andWhere('u.valideur = :valideur')
  71.                            ->setParameter('valideur'$userConnect);
  72.                     }
  73.                     return $er;
  74.                 },
  75.             ]
  76.         );
  77.     }
  78. }