comparison core/modules/user/src/EventSubscriber/MaintenanceModeSubscriber.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children 12f9dff5fda9
comparison
equal deleted inserted replaced
-1:000000000000 0:c75dbcec494b
1 <?php
2
3 namespace Drupal\user\EventSubscriber;
4
5 use Drupal\Core\Routing\RouteMatch;
6 use Drupal\Core\Routing\UrlGeneratorTrait;
7 use Drupal\Core\Session\AccountInterface;
8 use Drupal\Core\Site\MaintenanceModeInterface;
9 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
10 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
11 use Symfony\Component\HttpKernel\KernelEvents;
12
13 /**
14 * Maintenance mode subscriber to log out users.
15 */
16 class MaintenanceModeSubscriber implements EventSubscriberInterface {
17
18 use UrlGeneratorTrait;
19
20 /**
21 * The maintenance mode.
22 *
23 * @var \Drupal\Core\Site\MaintenanceMode
24 */
25 protected $maintenanceMode;
26
27 /**
28 * The current account.
29 *
30 * @var \Drupal\Core\Session\AccountInterface
31 */
32 protected $account;
33
34 /**
35 * Constructs a new MaintenanceModeSubscriber.
36 *
37 * @param \Drupal\Core\Site\MaintenanceModeInterface $maintenance_mode
38 * The maintenance mode.
39 * @param \Drupal\Core\Session\AccountInterface $account
40 * The current user.
41 */
42 public function __construct(MaintenanceModeInterface $maintenance_mode, AccountInterface $account) {
43 $this->maintenanceMode = $maintenance_mode;
44 $this->account = $account;
45 }
46
47 /**
48 * Logout users if site is in maintenance mode.
49 *
50 * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
51 * The event to process.
52 */
53 public function onKernelRequestMaintenance(GetResponseEvent $event) {
54 $request = $event->getRequest();
55 $route_match = RouteMatch::createFromRequest($request);
56 if ($this->maintenanceMode->applies($route_match)) {
57 // If the site is offline, log out unprivileged users.
58 if ($this->account->isAuthenticated() && !$this->maintenanceMode->exempt($this->account)) {
59 user_logout();
60 // Redirect to homepage.
61 $event->setResponse($this->redirect($this->url('<front>')));
62 }
63 }
64 }
65
66 /**
67 * {@inheritdoc}
68 */
69 public static function getSubscribedEvents() {
70 $events[KernelEvents::REQUEST][] = ['onKernelRequestMaintenance', 31];
71 return $events;
72 }
73
74 }