<?php
namespace App\EventSubscriber\Club1895;
use App\Controller\Adherent\Club1895\AbstractClub1895Controller;
use App\Controller\Adherent\Club1895\PaymentController;
use App\Controller\Adherent\Club1895\RegistrationController;
use App\Entity\Enum\RegistrationStatus;
use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
/**
* Vérifie que l'utilisateur n'essaie pas d'accéder à une étape d'inscription indisponible
*/
class RegistrationControllerSubscriber implements EventSubscriberInterface
{
public function __construct(private readonly UrlGeneratorInterface $urlGenerator)
{
}
public function onKernelControllerArguments(ControllerArgumentsEvent $event): void
{
$callable = $event->getController();
if (is_array($callable) && null !== $callable[0] ?? null) {
$controller = $callable[0];
if ($controller instanceof AbstractClub1895Controller) {
$registration = $controller->getRegistration();
if ($controller instanceof RegistrationController &&
$registration?->getStatus() === RegistrationStatus::Registered) {
$event->setController(function () use ($event) {
return (new RedirectController($this->urlGenerator))
->redirectAction($event->getRequest(), 'dashboard');
});
return;
}
if (null === $registration && $controller instanceof PaymentController) {
$event->setController(function () use ($event) {
return (new RedirectController($this->urlGenerator))
->redirectAction($event->getRequest(), 'club_1895');
});
}
}
}
}
public static function getSubscribedEvents(): array
{
return [
'kernel.controller_arguments' => 'onKernelControllerArguments',
];
}
}