src/Form/EventSubscriber/ContactSheetEventSubscriber.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Form\EventSubscriber;
  3. use App\Entity\ContactSheet\PriorityContact;
  4. use App\Form\ContactSheet\InterruptionContactsType;
  5. use Doctrine\Common\Collections\Collection;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Form\FormEvent;
  8. use Symfony\Component\Form\FormEvents;
  9. class ContactSheetEventSubscriber implements EventSubscriberInterface
  10. {
  11.     public static function getSubscribedEvents()
  12.     {
  13.         return [
  14.             FormEvents::PRE_SET_DATA  => 'addInterruptionContactsField',
  15.             FormEvents::POST_SUBMIT   => 'addInterruptionContactsField',
  16.         ];
  17.     }
  18.     public function addInterruptionContactsField(FormEvent $event): void
  19.     {
  20.         $priorityContacts $event->getData();
  21.         if ($priorityContacts instanceof Collection) {
  22.             $users $this->getUsersFromPriorityContacts($priorityContacts);
  23.             $event->getForm()->getParent()->add('interruptionContacts'InterruptionContactsType::class, [
  24.                 'users' => $users,
  25.                 'label' => false,
  26.             ]);
  27.         }
  28.     }
  29.     protected function getUsersFromPriorityContacts(Collection $priorityContacts): array
  30.     {
  31.         $users = [];
  32.         /** @var PriorityContact $priorityContact */
  33.         foreach ($priorityContacts as $priorityContact) {
  34.             if (!in_array($priorityContact->getUser(), $users)) {
  35.                 $users[] = $priorityContact->getUser();
  36.             }
  37.         }
  38.         return $users;
  39.     }
  40. }