src/Form/EventListener/Franchise/AddStatusFranchiseFieldSubscriber.php line 28

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\EventListener\Franchise;
  4. use App\Entity\Franchise\Franchise;
  5. use App\Entity\Security\RoleInterface;
  6. use App\Form\FormHelper;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  9. use Symfony\Component\Form\FormEvent;
  10. use Symfony\Component\Form\FormEvents;
  11. use Symfony\Component\Security\Core\Security;
  12. class AddStatusFranchiseFieldSubscriber extends FormHelper implements EventSubscriberInterface
  13. {
  14.     public function __construct(
  15.         private Security $security,
  16.     ) {
  17.     }
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         return [FormEvents::PRE_SET_DATA => 'preSetData'];
  21.     }
  22.     public function preSetData(FormEvent $event): void
  23.     {
  24.         /** @var Franchise $franchise */
  25.         $franchise $event->getData();
  26.         if (
  27.             === \count(array_intersect([RoleInterface::ROLE_ADMINRoleInterface::ROLE_PREVIOUS_ADMIN], $this->security->getToken()->getRoleNames()))
  28.             || (null !== $franchise && null === $franchise->getId())
  29.         ) {
  30.             return;
  31.         }
  32.         $choices = [];
  33.         foreach (Franchise::STATUS as $status) {
  34.             $choices['app.manager.pages.franchise.status.' $status] = $status;
  35.         }
  36.         $event->getForm()->add('status'ChoiceType::class, $this->getChoiceParameters('app.global.select.status'self::PLACEHOLDER_CHOICEtruecompact('choices')));
  37.     }
  38. }