<?php
//namespace App\EventListener;
//
//use Symfony\Component\HttpKernel\Event\ResponseEvent;
//use Symfony\Component\HttpFoundation\RedirectResponse;
//use Symfony\Component\Routing\RouterInterface;
//use Symfony\Component\HttpFoundation\Session\SessionInterface;
//use Symfony\Component\HttpFoundation\Response;
//
//class TranslationModerationListener
//{
// private $router;
// private $session;
//
// public function __construct(RouterInterface $router, SessionInterface $session)
// {
// $this->router = $router;
// $this->session = $session;
// }
//
// public function onKernelResponse(ResponseEvent $event)
// {
// $request = $event->getRequest();
// $path = $request->getPathInfo();
//
// // Ne pas intercepter la page de modération pour éviter une boucle infinie
// if ($request->attributes->get('_route') === 'translation_moderation') {
// return;
// }
// if (preg_match('#^/(_wdt|_profiler)/#', $path)) {
// return;
// }
// if (preg_match('#^/symfony/public/api/historique/user/\d+/refreshHistorique$#', $path)) {
// return;
// }
// if (preg_match('#^/symfony/public/api/commande-fournisseur/tampon/voucher#', $path)) {
// return;
// }
// // TODO coté fournisseur, empecher la modération
// //
//
// //// Vérifie s'il y a des traductions en attente
// $items = $this->session->get('translation_review_items', []);
// if (in_array($_SERVER['REDIRECT_URL'], $items) ) {
// $this->session->set('translation_review_redirect', $_SERVER['REDIRECT_URL']);
// $event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
// }
// }
//}
namespace App\EventListener;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Translation;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class TranslationModerationListener
{
private $router;
private $session;
private $entityManager;
public function __construct(RouterInterface $router, SessionInterface $session, EntityManagerInterface $entityManager)
{
$this->router = $router;
$this->session = $session;
$this->entityManager = $entityManager;
}
public function onKernelResponse(ResponseEvent $event)
{
$request = $event->getRequest();
$path = $request->getPathInfo();
$currentUrl = $request->getRequestUri();
// Exclure certaines routes pour éviter des boucles de redirection
if ($request->attributes->get('_route') === 'translation_moderation' ||
preg_match('#^/(_wdt|_profiler)/#', $path) ||
preg_match('#^/symfony/public/api/historique/user/\d+/refreshHistorique$#', $path) ||
preg_match('#^/symfony/public/api/commande-fournisseur/tampon/voucher#', $path)) {
return;
}
//// Vérification pour éviter une boucle infinie
if ($this->session->get('translation_review_redirect') === $currentUrl) {
return;
}
$cleanUrl = strtok($currentUrl, '?');
$exists = $this->entityManager->getRepository(Translation::class)->findBy(['redirectUrl' => $cleanUrl]);
if ($this->session->get('needs_translation_review', false)) {
// Stocke l'URL courante pour y revenir après validation
$this->session->set('translation_review_redirect', $_SERVER['REDIRECT_URL']);
// Supprime le flag et redirige vers la page de modération
// Vérifier si c'est une requête web (pas une requête API)
if (!$event->getRequest()->isXmlHttpRequest()) {
$this->session->remove('needs_translation_review');
if (count($exists) > 0) {
$event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
}
}
} else {
if (count($exists) > 0) {
$this->session->set('translation_review_redirect', $cleanUrl);
$event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
}
}
//// Stocke l'URL actuelle et redirige vers la page de modération
////$this->session->set('translation_review_redirect', $currentUrl);
////$event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
//$items = $this->session->get('translation_review_items', []);
//if (in_array($currentUrl, $items) ) {
// $this->session->set('translation_review_redirect', $currentUrl);
// $event->setResponse(new RedirectResponse($this->router->generate('translation_moderation')));
//}
}
}