<?php
namespace App\EventSubscriber\Form;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\EntityFilterType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class AddUtilisateurAssociesFieldByValideurSubscriber 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)
{
$form = $event->getForm();
$valideur = $form->get('valideur')->getData();
$this->addFieldUtilisateur($form, $valideur);
}
public function preSubmit(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (array_key_exists("valideur", $data)) {
$valideur = $data["valideur"];
$this->addFieldUtilisateur($form, $valideur);
}
}
private function addFieldUtilisateur(
$form,
$valideurID
)
{
$valideur = null;
if($valideurID){
$valideur = $this->entityManager->getRepository(User::class)->findOneBy(["id" => $valideurID]);
}
if($valideur){
$form->add('utilisateursAssocies', EntityType::class,
[
'class' => User::class,
'choice_label' => 'nameFirstname',
'required' => false,
'empty_data' => null,
'label' => 'app.statistique.utilisateursAssocies',
'query_builder' => function (
EntityRepository $er
) use
(
$valideur
) {
return $er->getUserForValideurQuery($valideur);
},
]
);
}
}
}