src/EventListener/TranslationModerationListener.php line 74

Open in your IDE?
  1. <?php
  2. //namespace App\EventListener;
  3. //
  4. //use Symfony\Component\HttpKernel\Event\ResponseEvent;
  5. //use Symfony\Component\HttpFoundation\RedirectResponse;
  6. //use Symfony\Component\Routing\RouterInterface;
  7. //use Symfony\Component\HttpFoundation\Session\SessionInterface;
  8. //use Symfony\Component\HttpFoundation\Response;
  9. //
  10. //class TranslationModerationListener
  11. //{
  12. //    private $router;
  13. //    private $session;
  14. //
  15. //    public function __construct(RouterInterface $router, SessionInterface $session)
  16. //    {
  17. //        $this->router = $router;
  18. //        $this->session = $session;
  19. //    }
  20. //
  21. //    public function onKernelResponse(ResponseEvent $event)
  22. //    {
  23. //        $request = $event->getRequest();
  24. //        $path = $request->getPathInfo();
  25. //
  26. //        // Ne pas intercepter la page de modération pour éviter une boucle infinie
  27. //        if ($request->attributes->get('_route') === 'translation_moderation') {
  28. //            return;
  29. //    }
  30. //    if (preg_match('#^/(_wdt|_profiler)/#', $path)) {
  31. //            return;
  32. //        }
  33. //        if (preg_match('#^/symfony/public/api/historique/user/\d+/refreshHistorique$#', $path)) {
  34. //            return;
  35. //        }
  36. //        if (preg_match('#^/symfony/public/api/commande-fournisseur/tampon/voucher#', $path)) {
  37. //            return;
  38. //        }
  39. //    // TODO coté fournisseur, empecher la modération
  40. //    //
  41. //
  42. //        //// Vérifie s'il y a des traductions en attente
  43. //        $items = $this->session->get('translation_review_items', []);
  44. //        if (in_array($_SERVER['REDIRECT_URL'], $items) ) {
  45. //            $this->session->set('translation_review_redirect', $_SERVER['REDIRECT_URL']);
  46. //            $event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
  47. //        }
  48. //    }
  49. //}
  50. namespace App\EventListener;
  51. use Doctrine\ORM\EntityManagerInterface;
  52. use App\Entity\Translation
  53. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  54. use Symfony\Component\HttpFoundation\RedirectResponse;
  55. use Symfony\Component\Routing\RouterInterface;
  56. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  57. class TranslationModerationListener
  58. {
  59.     private $router;
  60.     private $session;
  61.     private $entityManager;
  62.     public function __construct(RouterInterface $routerSessionInterface $sessionEntityManagerInterface $entityManager)
  63.     {
  64.         $this->router $router;
  65.         $this->session $session;
  66.         $this->entityManager $entityManager;
  67.     }
  68.     public function onKernelResponse(ResponseEvent $event)
  69.     {
  70.         $request $event->getRequest();
  71.         $path $request->getPathInfo();
  72.         $currentUrl $request->getRequestUri();
  73.         // Exclure certaines routes pour éviter des boucles de redirection
  74.         if ($request->attributes->get('_route') === 'translation_moderation' || 
  75.             preg_match('#^/(_wdt|_profiler)/#'$path) || 
  76.             preg_match('#^/symfony/public/api/historique/user/\d+/refreshHistorique$#'$path) || 
  77.             preg_match('#^/symfony/public/api/commande-fournisseur/tampon/voucher#'$path)) {
  78.             return;
  79.         }
  80.         //// Vérification pour éviter une boucle infinie
  81.         if ($this->session->get('translation_review_redirect') === $currentUrl) {
  82.             return;
  83.         }
  84.         $cleanUrl strtok($currentUrl'?');
  85.     $exists $this->entityManager->getRepository(Translation::class)->findBy(['redirectUrl' => $cleanUrl]);
  86.         if ($this->session->get('needs_translation_review'false)) {
  87.             // Stocke l'URL courante pour y revenir après validation
  88.             $this->session->set('translation_review_redirect'$_SERVER['REDIRECT_URL']);
  89.             // Supprime le flag et redirige vers la page de modération
  90.             // Vérifier si c'est une requête web (pas une requête API)
  91.             if (!$event->getRequest()->isXmlHttpRequest()) {
  92.                 $this->session->remove('needs_translation_review');
  93.         if (count($exists) > 0) {
  94.                     $event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
  95.         }
  96.             }
  97.     } else {
  98.             if (count($exists) > 0) {
  99.                 $this->session->set('translation_review_redirect'$cleanUrl);
  100.                 $event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
  101.             }
  102.     }
  103.         //// Stocke l'URL actuelle et redirige vers la page de modération
  104.         ////$this->session->set('translation_review_redirect', $currentUrl);
  105.         ////$event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
  106.         //$items = $this->session->get('translation_review_items', []);
  107.         //if (in_array($currentUrl, $items) ) {
  108.         //    $this->session->set('translation_review_redirect', $currentUrl);
  109.         //    $event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
  110.         //}
  111.     }
  112. }