src/Event/PqnaRoutesListener.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Event;
  3. use App\Service\SynchroHubService;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  10. use Symfony\Component\Security\Core\Security;
  11. class PqnaRoutesListener implements EventSubscriberInterface
  12. {
  13.     private $urlGenerator;
  14.     private $security;
  15.     private $SynchroHubService;
  16.     public function __construct(
  17.         UrlGeneratorInterface $urlGenerator,
  18.         Security $security,
  19.         SynchroHubService $SynchroHubService
  20.     ) {
  21.         $this->urlGenerator $urlGenerator;
  22.         $this->security $security;
  23.         $this->SynchroHubService $SynchroHubService;
  24.     }
  25.     public function onKernelRequest(RequestEvent $event)
  26.     {
  27.         $request $event->getRequest();
  28.         $routeName $request->attributes->get('_route');
  29.         //On verifie si user et si sur la route du formulaire
  30.         if ($_POST && $routeName === 'sulu_community.profile' && $this->security->getUser()) {
  31.             $this->SynchroHubService->synchPqnaUserDatasToHub($_POST['profile']);
  32.             return; // On n'utilise pas les evenements de doctrine car ça ne fonctionne pas avec Sulu
  33.         }
  34.         if ($this->security->getUser() && $routeName === 'sulu_community.registration' || $this->security->getUser() && $routeName === 'sulu_community.login') {
  35.             $homepageUrl $this->urlGenerator->generate('sulu_community.profile'); //On redirige vers le profil
  36.             $response = new RedirectResponse($homepageUrl);
  37.             $event->setResponse($response);
  38.             return;
  39.         }
  40.         if ($this->security->getUser() && $routeName === 'sulu_community.profile') {
  41.             $this->SynchroHubService->syncOptinsFromHubToPqna($this->security->getUser()->getEmail());
  42.             return;
  43.         }
  44.     }
  45.     public function onKernelResponse(ResponseEvent $event)
  46.     {
  47.         $response $event->getResponse();
  48.         $statusCode $response->getStatusCode();
  49.         $request $event->getRequest();
  50.         $url $request->getUri();
  51.         $trimmedUrl preg_replace('#/[^/]+/?$#'''$url);
  52.         if ($statusCode !== 404) {
  53.             return;
  54.         }
  55.         $isAgendaPage str_contains($url'agenda');
  56.         if ($isAgendaPage && $statusCode === 404) {
  57.            $event->setResponse(new RedirectResponse($trimmedUrl));
  58.         }
  59.     }
  60.     public static function getSubscribedEvents()
  61.     {
  62.         return [
  63.             KernelEvents::REQUEST => 'onKernelRequest',
  64.             KernelEvents::RESPONSE => 'onKernelResponse',
  65.         ];
  66.     }
  67. }