<?php
namespace App\EventSubscriber;
use App\Controller\Admin\AbstractAdminController;
use App\Controller\Admin\SectionSessionController;
use App\Service\Admin\Session;
use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
/**
* Vérifie qu'une variable de session déterminant la section du back-office soit existante, sinon redirige l'utilisateur
* vers la page de sélection
*/
class AdminSectionSubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly Session $adminSession,
private readonly UrlGeneratorInterface $urlGenerator
) {
}
public function onKernelController(ControllerEvent $event): void
{
$callable = $event->getController();
if (is_array($callable) && null !== $callable[0]) {
$controller = $callable[0];
if ($controller instanceof AbstractAdminController) {
if ($controller instanceof SectionSessionController) {
return;
}
if (null === $this->adminSession->getSection()) {
$event->setController(function () use ($event) {
return (new RedirectController($this->urlGenerator))
->redirectAction($event->getRequest(), 'admin_section_choice');
});
}
}
}
}
public static function getSubscribedEvents(): array
{
return [
'kernel.controller' => 'onKernelController',
];
}
}