Chris@0: maintenanceMode = $maintenance_mode; Chris@0: $this->config = $config_factory; Chris@0: $this->stringTranslation = $translation; Chris@0: $this->urlGenerator = $url_generator; Chris@0: $this->account = $account; Chris@0: $this->bareHtmlPageRenderer = $bare_html_page_renderer; Chris@14: $this->messenger = $messenger; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the site maintenance page if the site is offline. Chris@0: * Chris@0: * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event Chris@0: * The event to process. Chris@0: */ Chris@0: public function onKernelRequestMaintenance(GetResponseEvent $event) { Chris@0: $request = $event->getRequest(); Chris@0: $route_match = RouteMatch::createFromRequest($request); Chris@0: if ($this->maintenanceMode->applies($route_match)) { Chris@0: // Don't cache maintenance mode pages. Chris@0: \Drupal::service('page_cache_kill_switch')->trigger(); Chris@0: Chris@0: if (!$this->maintenanceMode->exempt($this->account)) { Chris@0: // Deliver the 503 page if the site is in maintenance mode and the Chris@0: // logged in user is not allowed to bypass it. Chris@0: Chris@0: // If the request format is not 'html' then show default maintenance Chris@0: // mode page else show a text/plain page with maintenance message. Chris@0: if ($request->getRequestFormat() !== 'html') { Chris@0: $response = new Response($this->getSiteMaintenanceMessage(), 503, ['Content-Type' => 'text/plain']); Chris@0: $event->setResponse($response); Chris@0: return; Chris@0: } Chris@0: drupal_maintenance_theme(); Chris@0: $response = $this->bareHtmlPageRenderer->renderBarePage(['#markup' => $this->getSiteMaintenanceMessage()], $this->t('Site under maintenance'), 'maintenance_page'); Chris@0: $response->setStatusCode(503); Chris@0: $event->setResponse($response); Chris@0: } Chris@0: else { Chris@0: // Display a message if the logged in user has access to the site in Chris@0: // maintenance mode. However, suppress it on the maintenance mode Chris@0: // settings page. Chris@0: if ($route_match->getRouteName() != 'system.site_maintenance_mode') { Chris@0: if ($this->account->hasPermission('administer site configuration')) { Chris@14: $this->messenger->addMessage($this->t('Operating in maintenance mode. Go online.', [':url' => $this->urlGenerator->generate('system.site_maintenance_mode')]), 'status', FALSE); Chris@0: } Chris@0: else { Chris@14: $this->messenger->addMessage($this->t('Operating in maintenance mode.'), 'status', FALSE); Chris@0: } Chris@0: } Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Gets the site maintenance message. Chris@0: * Chris@0: * @return \Drupal\Component\Render\MarkupInterface Chris@0: * The formatted site maintenance message. Chris@0: */ Chris@0: protected function getSiteMaintenanceMessage() { Chris@17: return new FormattableMarkup($this->config->get('system.maintenance')->get('message'), [ Chris@0: '@site' => $this->config->get('system.site')->get('name'), Chris@0: ]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function getSubscribedEvents() { Chris@0: $events[KernelEvents::REQUEST][] = ['onKernelRequestMaintenance', 30]; Chris@0: $events[KernelEvents::EXCEPTION][] = ['onKernelRequestMaintenance']; Chris@0: return $events; Chris@0: } Chris@0: Chris@0: }