<?php
declare(strict_types=1);
namespace App\Form\EventListener\User;
use App\Entity\Franchise\Franchise;
use App\Entity\Security\Manager;
use App\Form\FormHelper;
use App\Repository\Franchise\FranchiseRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class AddFranchiseFieldSubscriber extends FormHelper implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [FormEvents::PRE_SET_DATA => 'preSetData'];
}
public function preSetData(FormEvent $event): void
{
$entity = $event->getData();
$isAdministrator = $event->getForm()->getConfig()->getOptions()['attr']['isAdministrator'] ?? null;
if ((null !== $isAdministrator && $isAdministrator !== $entity instanceof Manager)
|| (false === $entity instanceof Manager && false === $isAdministrator)) {
return;
}
$queryBuilder = function (FranchiseRepository $repository) {
return $repository->getMultipleFranchisesQB();
};
$event->getForm()->add('franchise', EntityType::class, $this->getEntityParameters(
Franchise::class,
'app.admin.pages.shops.form.franchise.franchise',
null,
true,
['query_builder' => $queryBuilder]
));
}
}