diff --git a/lib/adminlib.php b/lib/adminlib.php index b14741ef7a4..8cf8a6148e4 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -7970,9 +7970,7 @@ function admin_externalpage_setup($section, $extrabutton = '', array $extraurlpa * @return object admin_root object */ function admin_get_root($reload=false, $requirefulltree=true) { - global $CFG, $DB, $OUTPUT; - - static $ADMIN = NULL; + global $CFG, $DB, $OUTPUT, $ADMIN; if (is_null($ADMIN)) { // create the admin tree! diff --git a/lib/classes/session/manager.php b/lib/classes/session/manager.php index f617cc2217c..6568e4b9b22 100644 --- a/lib/classes/session/manager.php +++ b/lib/classes/session/manager.php @@ -712,6 +712,7 @@ class manager { * @param \stdClass $user record */ public static function set_user(\stdClass $user) { + global $ADMIN; $GLOBALS['USER'] = $user; unset($GLOBALS['USER']->description); // Conserve memory. unset($GLOBALS['USER']->password); // Improve security. @@ -723,6 +724,9 @@ class manager { // Relink session with global $USER just in case it got unlinked somehow. $_SESSION['USER'] =& $GLOBALS['USER']; + // Nullify the $ADMIN tree global. If we're changing users, then this is now stale and must be generated again if needed. + $ADMIN = null; + // Init session key. sesskey(); }