src/Listener/MaintenanceListener.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use App\Services\Common\PlatformService;
  4. use Exception;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  7. use Twig\Environment;
  8. use Twig\Error\LoaderError;
  9. use Twig\Error\RuntimeError;
  10. use Twig\Error\SyntaxError;
  11. class MaintenanceListener
  12. {
  13. private Environment $twig;
  14. private PlatformService $platformService;
  15. public function __construct(
  16. Environment $twig,
  17. PlatformService $platformService
  18. )
  19. {
  20. $this->twig = $twig;
  21. $this->platformService = $platformService;
  22. }
  23. /**
  24. * @param ControllerEvent $event
  25. *
  26. * @return void
  27. *
  28. * @throws LoaderError
  29. * @throws RuntimeError
  30. * @throws SyntaxError
  31. * @throws Exception
  32. */
  33. public function onKernelController( ControllerEvent $event )
  34. {
  35. $request = $event->getRequest();
  36. if ( in_array(
  37. $request->get( '_route' ),
  38. [
  39. 'static_file_folder',
  40. 'static_project_file',
  41. 'front_common_css_custom',
  42. 'global_common_platform_version',
  43. ]
  44. ) ) {
  45. return;
  46. }
  47. $maintenance = $this->platformService->maintenanceMode();
  48. if ( !isset( $maintenance[ 'enabled' ] ) || !$maintenance[ 'enabled' ] ) {
  49. return;
  50. }
  51. $ips = str_replace( [ '[', ']' ], '', $maintenance[ 'ips' ] );
  52. $ips = explode( ',', $ips );
  53. if ( in_array( $request->getClientIp(), $ips ) ) {
  54. return;
  55. }
  56. $message = $this->twig->render( 'common/maintenance/default.html.twig', [
  57. 'maintenance' => $maintenance,
  58. 'project' => $this->platformService->getDomain(),
  59. ] );
  60. $event->setController(
  61. function () use ( $message ) {
  62. return new Response( $message, 200 );
  63. }
  64. );
  65. }
  66. }