<?php
/******************************************************************************
* Copyright (c) Echo-numeric 2020-2023. *
******************************************************************************/
namespace App\Listener;
use App\Entity\Setting;
use App\Entity\User;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class ClosedSiteListener
{
private EntityManagerInterface $em;
private RouterInterface $router;
private TokenStorageInterface $token;
private RequestStack $requestStack;
/**
* @param EntityManagerInterface $em
* @param RouterInterface $router
* @param TokenStorageInterface $token
* @param RequestStack $requestStack
*/
public function __construct( EntityManagerInterface $em, RouterInterface $router, TokenStorageInterface $token, RequestStack $requestStack)
{
$this->em = $em;
$this->router = $router;
$this->token = $token;
$this->requestStack = $requestStack;
}
/**
* @param ResponseEvent $event
*
* @return void
* @throws Exception
*/
public function onKernelResponse( ResponseEvent $event )
{
$request = $event->getRequest();
$token = $this->token->getToken();
if ( is_null( $token ) ) {
return;
}
/** @var User $user */
$user = $this->token->getToken()->getUser();
//
$request = $event->getRequest();
if ( in_array(
$request->get( '_route' ),
[
'static_file_folder',
'static_project_file',
'front_common_css_custom',
'global_common_platform_version',
'closed_platform',
'app_login',
]
) ) {
return;
}
// if ($user->getId() === 6579) {
// $this->requestStack->getMainRequest()->getSession()->getFlashBag()->add(
// 'danger', 'Le site est fermé, seul les développeurs y on accès'
// );
// return;
// }
// $event->setResponse(
// new RedirectResponse(
// $this->router->generate( 'closed_platform' )
// )
// );
// $closedSite = $this->em->getRepository( Setting::class )->findOneBy( [ 'name' => 'CLOSE_SITE', 'value' => '1' ] );
// $valueDateClosedSite = $this->em->getRepository( Setting::class )->findOneBy( [ 'name' => 'CLOSE_SITE_DATEFROM' ] );
// $now = new DateTime( 'now' );
// if ( !is_null( $valueDateClosedSite->getValue() ) && $this->isValidDateFormat( $valueDateClosedSite->getValue() ) ) {
// $dateClosedSite = DateTime::createFromFormat( 'Y-m-d H:i:s', $valueDateClosedSite->getValue() );
//
// if ( $closedSite && $now > $dateClosedSite ) {
// if ($user->isDeveloper()) {
// $this->requestStack->getMainRequest()->getSession()->getFlashBag()->add(
// 'danger', 'Le site est fermé, seul les développeurs y on accès'
// );
// return;
// }
// $event->setResponse(
// new RedirectResponse(
// $this->router->generate( 'closed_platform' )
// )
// );
// }
// }
}
/**
* @param string $dateString
*
* @return bool
*/
public function isValidDateFormat( string $dateString ): bool
{
$pattern = '/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/';
return preg_match( $pattern, $dateString ) === 1;
}
}