public function MaintenanceModeSubscriber::onKernelRequestMaintenance

Same name in this branch
  1. 8.x drupal/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php \Drupal\Core\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestMaintenance()
  2. 8.x drupal/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php \Drupal\user\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestMaintenance()
  3. 8.x drupal/core/modules/system/tests/modules/menu_test/lib/Drupal/menu_test/EventSubscriber/MaintenanceModeSubscriber.php \Drupal\menu_test\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestMaintenance()

Determine whether the page is configured to be offline.

Parameters

\Symfony\Component\HttpKernel\Event\GetResponseEvent $event: The event to process.

File

drupal/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php, line 26
Contains \Drupal\user\EventSubscriber\MaintenanceModeSubscriber.

Class

MaintenanceModeSubscriber
Maintenance mode subscriber to logout users.

Namespace

Drupal\user\EventSubscriber

Code

public function onKernelRequestMaintenance(GetResponseEvent $event) {
  $request = $event
    ->getRequest();
  $site_status = $request->attributes
    ->get('_maintenance');
  $path = $request->attributes
    ->get('system_path');
  if ($site_status == MENU_SITE_OFFLINE) {

    // If the site is offline, log out unprivileged users.
    if (user_is_logged_in() && !user_access('access site in maintenance mode')) {
      user_logout();

      // Redirect to homepage.
      $event
        ->setResponse(new RedirectResponse(url('<front>', array(
        'absolute' => TRUE,
      ))));
      return;
    }
    if (user_is_anonymous()) {
      switch ($path) {
        case 'user':

          // Forward anonymous user to login page.
          $event
            ->setResponse(new RedirectResponse(url('user/login', array(
            'absolute' => TRUE,
          ))));
          return;
        case 'user/login':
        case 'user/password':

          // Disable offline mode.
          $request->attributes
            ->set('_maintenance', MENU_SITE_ONLINE);
          break;
        default:
          if (strpos($path, 'user/reset/') === 0) {

            // Disable offline mode.
            $request->attributes
              ->set('_maintenance', MENU_SITE_ONLINE);
          }
          break;
      }
    }
  }
  if (user_is_logged_in()) {
    if ($path == 'user/login') {

      // If user is logged in, redirect to 'user' instead of giving 403.
      $event
        ->setResponse(new RedirectResponse(url('user', array(
        'absolute' => TRUE,
      ))));
      return;
    }
    if ($path == 'user/register') {

      // Authenticated user should be redirected to user edit page.
      $event
        ->setResponse(new RedirectResponse(url('user/' . $GLOBALS['user']->uid . '/edit', array(
        'absolute' => TRUE,
      ))));
      return;
    }
  }
}