diff --git a/core/modules/user/lib/Drupal/user/Access/LoginStatusCheck.php b/core/modules/user/lib/Drupal/user/Access/LoginStatusCheck.php new file mode 100644 index 0000000..7148709 --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Access/LoginStatusCheck.php @@ -0,0 +1,33 @@ +getRequirements()); + } + + /** + * {@inheritdoc} + */ + public function access(Route $route, Request $request) { + return (bool) $GLOBALS['user']->uid; + } + +} diff --git a/core/modules/user/lib/Drupal/user/UserAutocompleteController.php b/core/modules/user/lib/Drupal/user/Controller/UserAutocompleteController.php similarity index 96% rename from core/modules/user/lib/Drupal/user/UserAutocompleteController.php rename to core/modules/user/lib/Drupal/user/Controller/UserAutocompleteController.php index 7e294f5..38a887c 100644 --- a/core/modules/user/lib/Drupal/user/UserAutocompleteController.php +++ b/core/modules/user/lib/Drupal/user/Controller/UserAutocompleteController.php @@ -2,9 +2,9 @@ /** * @file - * Contains \Drupal\user\UserAutocompleteController. + * Contains \Drupal\user\Controller\UserAutocompleteController. */ -namespace Drupal\user; +namespace Drupal\Controller\user; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; @@ -79,4 +79,3 @@ public function autocompleteUserAnonymous(Request $request) { } } - diff --git a/core/modules/user/lib/Drupal/user/Controller/UserController.php b/core/modules/user/lib/Drupal/user/Controller/UserController.php new file mode 100644 index 0000000..095bffb --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Controller/UserController.php @@ -0,0 +1,57 @@ +moduleHandler = $module_handler; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('module_handler') + ); + } + + /** + * Logs the current user out. + * + * @return \Symfony\Component\HttpFoundation\RedirectResponse + * A redirection to home page. + */ + public function logout() { + global $user; + + watchdog('user', 'Session closed for %name.', array('%name' => $user->name)); + $this->moduleHandler->invokeAll('user_logout', array($user)); + // Destroy the current session, and reset $user to the anonymous user. + session_destroy(); + + return new RedirectResponse(url('', array('absolute' => TRUE))); + } + +} diff --git a/core/modules/user/user.module b/core/modules/user/user.module index 67c3118..850b894 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -8,6 +8,7 @@ use Drupal\file\Plugin\Core\Entity\File; use Drupal\user\Plugin\Core\Entity\User; use Drupal\user\UserRole; +use Drupal\user\Controller\UserController; use Drupal\Core\Template\Attribute; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Drupal\menu_link\Plugin\Core\Entity\MenuLink; @@ -906,11 +907,9 @@ function user_menu() { $items['user/logout'] = array( 'title' => 'Log out', - 'access callback' => 'user_is_logged_in', - 'page callback' => 'user_logout', + 'route_name' => 'user_logout', 'weight' => 10, 'menu_name' => 'account', - 'file' => 'user.pages.inc', ); // User listing pages. @@ -1056,8 +1055,7 @@ function user_menu_site_status_alter(&$menu_site_status, $path) { if ($menu_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')) { - module_load_include('pages.inc', 'user', 'user'); - user_logout(); + UserController::create(Drupal::getContainer())->logout()->send(); } if (user_is_anonymous()) { diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc index 5f0cfab..debb55a 100644 --- a/core/modules/user/user.pages.inc +++ b/core/modules/user/user.pages.inc @@ -163,22 +163,6 @@ function user_pass_reset($form, &$form_state, $uid, $timestamp, $hashed_pass, $a } /** - * Menu callback; logs the current user out, and redirects to the home page. - */ -function user_logout() { - global $user; - - watchdog('user', 'Session closed for %name.', array('%name' => $user->name)); - - module_invoke_all('user_logout', $user); - - // Destroy the current session, and reset $user to the anonymous user. - session_destroy(); - - drupal_goto(); -} - -/** * Process variables for user.tpl.php. * * The $variables array contains the following arguments: diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml index 0798e1d..e5d5615 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -8,14 +8,14 @@ user_register: user_autocomplete: pattern: '/user/autocomplete' defaults: - _controller: '\Drupal\user\UserAutocompleteController::autocompleteUser' + _controller: '\Drupal\user\Controller\UserAutocompleteController::autocompleteUser' requirements: _permission: 'access user profiles' user_autocomplete_anonymous: pattern: '/user/autocomplete/anonymous' defaults: - _controller: '\Drupal\user\UserAutocompleteController::autocompleteUserAnonymous' + _controller: '\Drupal\user\Controller\UserAutocompleteController::autocompleteUserAnonymous' requirements: _permission: 'access user profiles' @@ -25,3 +25,10 @@ user_account_settings: _form: '\Drupal\user\AccountSettingsForm' requirements: _permission: 'administer users' + +user_logout: + pattern: '/user/logout' + defaults: + _controller: '\Drupal\user\Controller\UserController::logout' + requirements: + _user_is_logged_in: 'TRUE' diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml index 77f93e2..468955d 100644 --- a/core/modules/user/user.services.yml +++ b/core/modules/user/user.services.yml @@ -11,6 +11,10 @@ services: class: Drupal\user\Access\RoleAccessCheck tags: - { name: access_check } + access_check.user.login_status: + class: Drupal\user\Access\LoginStatusCheck + tags: + - { name: access_check } user.data: class: Drupal\user\UserData arguments: ['@database']