src/EventSubscriber/Form/AddAdresseCommandeTypeSubscriber.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Form;
  3. use App\Entity\Adresse;
  4. use App\Entity\User;
  5. use App\Repository\AdresseRepository;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\EntityFilterType;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Form\FormEvent;
  10. use Symfony\Component\Form\FormEvents;
  11. class AddAdresseCommandeTypeSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var EntityManagerInterface
  15.      */
  16.     private $entityManager;
  17.     public function __construct(EntityManagerInterface $entityManager)
  18.     {
  19.         $this->entityManager $entityManager;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             FormEvents::PRE_SET_DATA => 'preSetData',
  25.             FormEvents::PRE_SUBMIT => 'preSubmit',
  26.         ];
  27.     }
  28.     public function preSetData(FormEvent $event)
  29.     {
  30.         $data $event->getData();
  31.         $form $event->getForm();
  32.         $utilisateur $data->getUtilisateur();
  33.         $this->addField($form$utilisateur);
  34.     }
  35.     public function preSubmit(FormEvent $event)
  36.     {
  37.         $data $event->getData();
  38.         $form $event->getForm();
  39.         if (array_key_exists("utilisateur"$data)) {
  40.             $utilisateurID $data["utilisateur"];
  41.             $utilisateur $this->entityManager->getRepository(User::class)->findOneBy(['id' => $utilisateurID]);
  42.             $this->addField($form$utilisateur);
  43.         }
  44.     }
  45.     private function addField(
  46.         $form,
  47.         $utilisateur
  48.     )
  49.     {
  50.         if ($utilisateur) {
  51.             $form->add('adresse'EntityFilterType::class, [
  52.                     'class' => Adresse::class,
  53.                     'choice_label' => 'libelle',
  54.                     'choice_attr' => function (
  55.                         $adresse
  56.                     ) {
  57.                         return [
  58.                             'data-libelle' => $adresse->getLibelle(),
  59.                             'data-adresse' => $adresse->getAdresse1(),
  60.                             'data-complement' => $adresse->getComplement(),
  61.                             'data-cp' => $adresse->getCodePostal(),
  62.                             'data-ville' => $adresse->getVille(),
  63.                             'data-pays' => $adresse->getPays() ? $adresse->getPays()->getId() : null,
  64.                             'data-telephone' => $adresse->getTelephone(),
  65.                         ];
  66.                     },
  67.                     'label' => 'Adresse',
  68.                     'group_by' => "adresseType.libelle",
  69.                     'attr' => array(
  70.                         'data-live-search' => 'true',
  71.                     ),
  72.                     'required' => true,
  73.                     'query_builder' => function (
  74.                         AdresseRepository $er
  75.                     ) use
  76.                     (
  77.                         $utilisateur
  78.                     ) {
  79.                         return $er->getAdresseCongresQBWithUser($utilisateur);
  80.                     },
  81.                 ]
  82.             );
  83.         } else {
  84.             $form->add('adresse'EntityFilterType::class, [
  85.                     'class' => Adresse::class,
  86.                     'choice_label' => 'libelle',
  87.                     'choice_attr' => function (
  88.                         $adresse
  89.                     ) {
  90.                         return [
  91.                             'data-libelle' => $adresse->getLibelle(),
  92.                             'data-adresse' => $adresse->getAdresse1(),
  93.                             'data-complement' => $adresse->getComplement(),
  94.                             'data-cp' => $adresse->getCodePostal(),
  95.                             'data-ville' => $adresse->getVille(),
  96.                             'data-pays' => $adresse->getPays() ? $adresse->getPays()->getId() : null,
  97.                             'data-telephone' => $adresse->getTelephone(),
  98.                         ];
  99.                     },
  100.                     'required' => true,
  101.                     'label' => 'Adresse',
  102.                     'group_by' => "adresseType.libelle",
  103.                     'attr' =>
  104.                         array(
  105.                             'data-live-search' => 'true',
  106.                         ),
  107.                     'query_builder' => function (
  108.                         AdresseRepository $er
  109.                     ) {
  110.                         return $er->getAdresseCongresQB();
  111.                     }
  112.                 ]
  113.             );
  114.         }
  115.     }
  116. }