<?php
namespace App\EventSubscriber\Form;
use App\Entity\Adresse;
use App\Entity\User;
use App\Repository\AdresseRepository;
use Doctrine\ORM\EntityManagerInterface;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\EntityFilterType;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class AddAdresseCommandeTypeSubscriber implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public static function getSubscribedEvents(): array
{
return [
FormEvents::PRE_SET_DATA => 'preSetData',
FormEvents::PRE_SUBMIT => 'preSubmit',
];
}
public function preSetData(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
$utilisateur = $data->getUtilisateur();
$this->addField($form, $utilisateur);
}
public function preSubmit(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (array_key_exists("utilisateur", $data)) {
$utilisateurID = $data["utilisateur"];
$utilisateur = $this->entityManager->getRepository(User::class)->findOneBy(['id' => $utilisateurID]);
$this->addField($form, $utilisateur);
}
}
private function addField(
$form,
$utilisateur
)
{
if ($utilisateur) {
$form->add('adresse', EntityFilterType::class, [
'class' => Adresse::class,
'choice_label' => 'libelle',
'choice_attr' => function (
$adresse
) {
return [
'data-libelle' => $adresse->getLibelle(),
'data-adresse' => $adresse->getAdresse1(),
'data-complement' => $adresse->getComplement(),
'data-cp' => $adresse->getCodePostal(),
'data-ville' => $adresse->getVille(),
'data-pays' => $adresse->getPays() ? $adresse->getPays()->getId() : null,
'data-telephone' => $adresse->getTelephone(),
];
},
'label' => 'Adresse',
'group_by' => "adresseType.libelle",
'attr' => array(
'data-live-search' => 'true',
),
'required' => true,
'query_builder' => function (
AdresseRepository $er
) use
(
$utilisateur
) {
return $er->getAdresseCongresQBWithUser($utilisateur);
},
]
);
} else {
$form->add('adresse', EntityFilterType::class, [
'class' => Adresse::class,
'choice_label' => 'libelle',
'choice_attr' => function (
$adresse
) {
return [
'data-libelle' => $adresse->getLibelle(),
'data-adresse' => $adresse->getAdresse1(),
'data-complement' => $adresse->getComplement(),
'data-cp' => $adresse->getCodePostal(),
'data-ville' => $adresse->getVille(),
'data-pays' => $adresse->getPays() ? $adresse->getPays()->getId() : null,
'data-telephone' => $adresse->getTelephone(),
];
},
'required' => true,
'label' => 'Adresse',
'group_by' => "adresseType.libelle",
'attr' =>
array(
'data-live-search' => 'true',
),
'query_builder' => function (
AdresseRepository $er
) {
return $er->getAdresseCongresQB();
}
]
);
}
}
}