src/EventSubscriber/Form/AddSecteurUtilisateurTypeSubscriber.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Form;
  3. use App\Entity\Profil;
  4. use App\Entity\Reseau;
  5. use App\Entity\Secteur;
  6. use App\Entity\User;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\EntityFilterType;
  9. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  12. use Symfony\Component\Form\FormError;
  13. use Symfony\Component\Form\FormEvent;
  14. use Symfony\Component\Form\FormEvents;
  15. use Symfony\Component\Validator\Constraints\NotNull;
  16. class AddSecteurUtilisateurTypeSubscriber implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var EntityManagerInterface
  20.      */
  21.     private $entityManager;
  22.     public function __construct(EntityManagerInterface $entityManager)
  23.     {
  24.         $this->entityManager $entityManager;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             FormEvents::PRE_SET_DATA => 'preSetData',
  30.             FormEvents::PRE_SUBMIT => 'preSubmit',
  31.         ];
  32.     }
  33.     public function preSetData(FormEvent $event): void
  34.     {
  35.         $form $event->getForm();
  36.         $requestMethod $event->getForm()->getConfig()->getMethod();
  37.         if($requestMethod === "POST"){
  38.             $profil $form->get('profil')->getData();
  39.             $reseau $form->get('reseau')->getData();
  40.         }
  41.         if($requestMethod === "PUT"){
  42.             $user $event->getData();
  43.             /** @var User $user */
  44.             $profil $user->getProfil();
  45.             $reseau $user->getReseau();
  46.         }
  47.         $this->addField($form$profil$reseau);
  48.     }
  49.     public function preSubmit(FormEvent $event): void
  50.     {
  51.         $data $event->getData();
  52.         $form $event->getForm();
  53.         /** @var User $user */
  54.         if (isset($data["profil"])) {
  55.             $profilId $data["profil"];
  56.             $profil $this->entityManager->getRepository(Profil::class)->findOneBy(["id" => $profilId]);
  57.             $reseauID $data["reseau"];
  58.             $reseau $this->entityManager->getRepository(Reseau::class)->findOneBy(["id" => $reseauID]);
  59.             if($profil){
  60.                 $this->addField($form$profil$reseau);
  61.             }
  62.         }
  63.     }
  64.     private function addField(
  65.         $form,
  66.         $profil,
  67.         $reseau
  68.     )
  69.     {
  70.         if($profil && $profil->isVM() && !($reseau->isDomTom() || $reseau->getLibelle() === Reseau::SIEGE)){
  71.             $form->add('secteur'EntityFilterType::class,
  72.                 [
  73.                     'class' => Secteur::class,
  74.                     'choice_label' => 'libelle',
  75.                     'required' => true,
  76.                     'attr' => array(
  77.                         'label' => 'Secteur',
  78.                     ),
  79.                     'group_by' => "region.libelle",
  80.                     'constraints' => [
  81.                         new NotNull([
  82.                             'message' => 'Le secteur est obligatoire pour les VM/APM'
  83.                         ])
  84.                     ],
  85.                 ]
  86.             );
  87.         }else{
  88.             $form->add('secteur'ChoiceType::class,
  89.                 [
  90.                     'choice_label' => 'libelle',
  91.                     'attr' => array(
  92.                         'label' => 'Secteur',
  93.                     ),
  94.                     'choices' => null,  // Choix par défaut à null
  95.                     'data' => null,     // Données par défaut à null
  96.                 ]
  97.             );
  98.         }
  99.     }
  100. }