Mercurial > hg > isophonics-drupal-site
diff core/modules/user/src/EventSubscriber/MaintenanceModeSubscriber.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/user/src/EventSubscriber/MaintenanceModeSubscriber.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,74 @@ +<?php + +namespace Drupal\user\EventSubscriber; + +use Drupal\Core\Routing\RouteMatch; +use Drupal\Core\Routing\UrlGeneratorTrait; +use Drupal\Core\Session\AccountInterface; +use Drupal\Core\Site\MaintenanceModeInterface; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\KernelEvents; + +/** + * Maintenance mode subscriber to log out users. + */ +class MaintenanceModeSubscriber implements EventSubscriberInterface { + + use UrlGeneratorTrait; + + /** + * The maintenance mode. + * + * @var \Drupal\Core\Site\MaintenanceMode + */ + protected $maintenanceMode; + + /** + * The current account. + * + * @var \Drupal\Core\Session\AccountInterface + */ + protected $account; + + /** + * Constructs a new MaintenanceModeSubscriber. + * + * @param \Drupal\Core\Site\MaintenanceModeInterface $maintenance_mode + * The maintenance mode. + * @param \Drupal\Core\Session\AccountInterface $account + * The current user. + */ + public function __construct(MaintenanceModeInterface $maintenance_mode, AccountInterface $account) { + $this->maintenanceMode = $maintenance_mode; + $this->account = $account; + } + + /** + * Logout users if site is in maintenance mode. + * + * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event + * The event to process. + */ + public function onKernelRequestMaintenance(GetResponseEvent $event) { + $request = $event->getRequest(); + $route_match = RouteMatch::createFromRequest($request); + if ($this->maintenanceMode->applies($route_match)) { + // If the site is offline, log out unprivileged users. + if ($this->account->isAuthenticated() && !$this->maintenanceMode->exempt($this->account)) { + user_logout(); + // Redirect to homepage. + $event->setResponse($this->redirect($this->url('<front>'))); + } + } + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events[KernelEvents::REQUEST][] = ['onKernelRequestMaintenance', 31]; + return $events; + } + +}