<?php
declare(strict_types=1);
namespace App\Form\EventListener\Search\Franchise;
use App\Entity\Franchise\Franchise;
use App\Entity\Security\Administrator;
use App\Entity\Security\Support;
use App\Entity\Security\User;
use App\Form\FormHelper;
use App\Repository\Franchise\FranchiseRepository;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class AddFranchiseSubscriber extends FormHelper implements EventSubscriberInterface
{
public function __construct(
private TokenStorageInterface $tokenStorage,
) {
}
public static function getSubscribedEvents(): array
{
return [FormEvents::PRE_SET_DATA => 'preSetData'];
}
public function preSetData(FormEvent $event): void
{
/** @var User */
$connectedUser = $this->tokenStorage->getToken()->getUser();
if (!$connectedUser instanceof Administrator && !$connectedUser instanceof Support) {
return;
}
$queryBuilder = static function (FranchiseRepository $franchiseRepository): QueryBuilder {
return $franchiseRepository->createQueryBuilder('f')
->orderBy('f.name', 'ASC')
;
};
$event->getForm()->add('franchise', EntityType::class, $this->getEntityParameters(Franchise::class, 'app.global.search.label.franchise', self::PLACEHOLDER_SAME_AS_LABEL, false, ['query_builder' => $queryBuilder]));
}
}