summaryrefslogtreecommitdiff
path: root/includes/menu.inc
diff options
context:
space:
mode:
Diffstat (limited to 'includes/menu.inc')
-rw-r--r--includes/menu.inc21
1 files changed, 21 insertions, 0 deletions
diff --git a/includes/menu.inc b/includes/menu.inc
index ee8875b22..826d1c0ed 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -164,6 +164,7 @@ define('MENU_CUSTOM_MENU', MENU_IS_ROOT | MENU_VISIBLE_IN_TREE | MENU_CREATED_BY
define('MENU_FOUND', 1);
define('MENU_NOT_FOUND', 2);
define('MENU_ACCESS_DENIED', 3);
+define('MENU_SITE_OFFLINE', 4);
/**
* @} End of "Menu status codes".
@@ -324,6 +325,10 @@ function menu_set_location($location) {
* act as if the user were in a different location on the site.
*/
function menu_execute_active_handler() {
+ if (_menu_site_is_offline()) {
+ return MENU_SITE_OFFLINE;
+ }
+
$menu = menu_get_menu();
// Determine the menu item containing the callback.
@@ -1040,3 +1045,19 @@ function _menu_build_local_tasks($pid) {
return $forked;
}
+/**
+ * Returns TRUE if the is offline for maintenance.
+ */
+function _menu_site_is_offline() {
+ // Check if site is set to offline mode
+ if (variable_get('site_offline', 0)) {
+ // Check if the user has administration privileges
+ if (!user_access('administer site configuration')) {
+ // Check if this is an attempt to login
+ if (drupal_get_normal_path($_GET['q']) != 'user/login') {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}