<?php
// src/EventListener/RequestListener.php
namespace App\EventListener;
use App\Entity\Users;
use App\Service\ConfigService;
use App\Repository\ParametersRepository;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class SuspendedListener
{
private $urlGenerator;
private $security;
public function __construct(UrlGeneratorInterface $urlGenerator, Security $security,
private FlashBagInterface $flashBag,
private ParametersRepository $parametersRepository
)
{
$this->urlGenerator = $urlGenerator;
$this->security = $security;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
$user = $this->security->getUser();
if($user && (in_array("ROLE_PLAYER", $user->getRoles()) || in_array("ROLE_ADMIN", $user->getRoles()))){
return;
}
if($this->isAppActive()){
if(!$this->isInsideTheInaccessiblePath($request->getPathInfo())){
return;
}
$url = $this->urlGenerator->generate('app_client_dahsboard');
if($user && $user->getState() == Users::SUSPENDED ){
$this->flashBag->add('error_message', "Vous n'avez pas accès à cette fonctionnalité car votre compte a été suspendu.");
$event->setResponse(new RedirectResponse($url));
}
}
else{
if($this->isInsideTheAccessiblePathAppDesactivated($request->getPathInfo())){
return;
}
$url = $this->urlGenerator->generate('app_client_dahsboard');
if($user && !in_array("ROLE_ADMIN", $user->getRoles())){
$this->flashBag->add('error_message', "Désolé, cette fonctionnalité n'est plus disponible.");
$event->setResponse(new RedirectResponse($url));
}
}
}
public function isInsideTheAccessiblePathAppDesactivated($pathInfo){
$excludePaths = [
'/auth/connexion',
'/reset-password',
'/auth/formulaire_contact',
'/auth/print_condition_utilisation',
'/auth/condition-utilisation',
'/auth/check-existing-user',
'/otp',
'/informations',
'/verification',
'/wallet',
'/contrat',
'/revenue',
$this->urlGenerator->generate('app_data_protection_infos'),
$this->urlGenerator->generate('app_client_dahsboard')
];
foreach($excludePaths as $path){
if(strncmp($pathInfo, $path, strlen($path)) == 0){
return true;
}
}
return false;
}
public function isAppActive(){
$parameter = $this->parametersRepository->findOneBy(['name' => "AppState"]);
if(is_null($parameter) || $parameter->getValue() >=1 ){
return true;
}
return false;
}
public function isInsideTheInaccessiblePath($pathInfo){
$pathToCheck = ['/boutique/pack-prestation/','/auth/inscription/back-office'];
foreach($pathToCheck as $path){
if(strncmp($pathInfo, $path, strlen($path)) == 0){
return true;
}
}
return false;
}
}