<?php
declare(strict_types=1);
namespace App\Form\Security;
use App\Entity\Franchise\Franchise;
use App\Entity\Security\ShopManager;
use App\Entity\Shop\Shop;
use App\Form\FormHelper;
use App\Repository\Shop\ShopRepository;
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\HttpFoundation\RequestStack;
class AddShopFieldSubscriber extends FormHelper implements EventSubscriberInterface
{
public function __construct(
private RequestStack $requestStack
) {
}
public static function getSubscribedEvents(): array
{
return [FormEvents::PRE_SET_DATA => 'preSetData'];
}
public function preSetData(FormEvent $event): void
{
$entity = $event->getData();
if (false === $entity instanceof ShopManager) {
return;
}
$franchise = $event->getForm()->has('franchise')
? null
: $this->getFranchiseFromRequest()
;
$event->getForm()->add('shop', EntityType::class, $this->getEntityParameters(
Shop::class,
'app.admin.pages.shops.form.shop',
null,
true,
['query_builder' => fn (ShopRepository $repository) => $repository->getDefaultQB($franchise, true)]
));
}
private function getFranchiseFromRequest(): ?Franchise
{
$request = $this->requestStack->getCurrentRequest();
if (null === $request || false === $request->hasSession()) {
return null;
}
$session = $request->getSession();
return $session->get('franchise');
}
}