summaryrefslogtreecommitdiff
path: root/modules/user/user.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/user/user.module')
-rw-r--r--modules/user/user.module42
1 files changed, 42 insertions, 0 deletions
diff --git a/modules/user/user.module b/modules/user/user.module
index 0fa22cb09..226f2f152 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -1741,6 +1741,48 @@ function user_menu() {
}
/**
+ * 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');
+ }
+ }
+}
+
+/**
* Implements hook_init().
*/
function user_init() {