vendor/boldr/maintenance-bundle/src/EventSubscriber/KernelEventSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. namespace Boldr\Cms\MaintenanceBundle\EventSubscriber;
  3. use Symfony\Component\HttpKernel\KernelEvents;
  4. use Symfony\Component\HttpKernel\Event\RequestEvent;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Boldr\Cms\SiteOptionsBundle\SiteOptionValueService;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  9. use Boldr\Cms\MaintenanceBundle\Event\MaintenancePageEvent;
  10. use Boldr\Cms\MaintenanceBundle\Presenter\MaintenancePagePresenter;
  11. use Twig\Environment;
  12. class KernelEventSubscriber implements EventSubscriberInterface
  13. {
  14. private SiteOptionValueService $service;
  15. private Environment $twig;
  16. private MaintenancePagePresenter $maintenancePagePresenter;
  17. private EventDispatcherInterface $eventDispatcher;
  18. public function __construct(SiteOptionValueService $service, MaintenancePagePresenter $maintenancePagePresenter, Environment $twig, EventDispatcherInterface $eventDispatcher)
  19. {
  20. $this->service = $service;
  21. $this->twig = $twig;
  22. $this->eventDispatcher = $eventDispatcher;
  23. $this->maintenancePagePresenter = $maintenancePagePresenter;
  24. }
  25. public static function getSubscribedEvents(): array
  26. {
  27. return [
  28. KernelEvents::REQUEST => [
  29. ['onKernelRequest', 0]
  30. ]
  31. ];
  32. }
  33. public function onKernelRequest(RequestEvent $event): void
  34. {
  35. $request = $event->getRequest();
  36. $path = $request->getPathInfo();
  37. // Exclude these paths from maintenance page so admins can still log in
  38. foreach ([
  39. '/boldr-admin',
  40. '/boldr-login',
  41. '/boldr-logout',
  42. '/boldr-admin-api/',
  43. '/_wdt/',
  44. '/boldr-api/cloudprnt'
  45. ] as $allowedPath) {
  46. if (strpos($path, $allowedPath) === 0)
  47. {
  48. return;
  49. }
  50. }
  51. $maintenancePage = $this->service->getOption('maintenance_page');
  52. if ($maintenancePage !== null)
  53. {
  54. $event2 = new MaintenancePageEvent($maintenancePage);
  55. $this->eventDispatcher->dispatch($event2);
  56. if ($event2->getBypassAllowed())
  57. {
  58. return;
  59. }
  60. $maintenancePageView = $this->maintenancePagePresenter->createMaintenancePageView($maintenancePage, $request->getLocale());
  61. $assets = $maintenancePageView->getAssets();
  62. $assets->addCssFile('/bundles/boldrmaintenance/maintenance.css');
  63. $responseHtml = $this->twig->render('@BoldrMaintenance/maintenance.html.twig', [
  64. 'maintenancePage' => $maintenancePageView,
  65. 'assets' => $assets
  66. ]);
  67. if ($event->getResponse() === null)
  68. {
  69. $event->setResponse(new Response($responseHtml));
  70. }
  71. }
  72. }
  73. }