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 $serviceMaintenancePagePresenter $maintenancePagePresenterEnvironment $twigEventDispatcherInterface $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. }