Implements hook_menu_site_status_alter().
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();
}
if (user_is_anonymous()) {
switch ($path) {
case 'user':
// Forward anonymous user to login page.
drupal_goto('user/login');
case 'user/login':
case 'user/password':
// Disable offline mode.
$menu_site_status = MENU_SITE_ONLINE;
break;
default:
if (strpos($path, 'user/reset/') === 0) {
// Disable offline mode.
$menu_site_status = 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.
drupal_goto('user');
}
if ($path == 'user/register') {
// Authenticated user should be redirected to user edit page.
drupal_goto('user/' . $GLOBALS['user']->uid . '/edit');
}
}
}