MDL-39454 Accesslib: is_siteadmin is a bit slow
This commit is contained in:
committed by
Sam Hemelryk
parent
96241e57e9
commit
aca67ae8b0
+14
-1
@@ -572,8 +572,21 @@ function is_siteadmin($user_or_id = null) {
|
||||
$userid = $user_or_id;
|
||||
}
|
||||
|
||||
// Because this script is called many times (150+ for course page) with
|
||||
// the same parameters, it is worth doing minor optimisations. This static
|
||||
// cache stores the value for a single userid, saving about 2ms from course
|
||||
// page load time without using significant memory. As the static cache
|
||||
// also includes the value it depends on, this cannot break unit tests.
|
||||
static $knownid, $knownresult, $knownsiteadmins;
|
||||
if ($knownid === $userid && $knownsiteadmins === $CFG->siteadmins) {
|
||||
return $knownresult;
|
||||
}
|
||||
$knownid = $userid;
|
||||
$knownsiteadmins = $CFG->siteadmins;
|
||||
|
||||
$siteadmins = explode(',', $CFG->siteadmins);
|
||||
return in_array($userid, $siteadmins);
|
||||
$knownresult = in_array($userid, $siteadmins);
|
||||
return $knownresult;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -123,7 +123,7 @@ class accesslib_testcase extends advanced_testcase {
|
||||
* @return void
|
||||
*/
|
||||
public function test_is_siteadmin() {
|
||||
global $DB;
|
||||
global $DB, $CFG;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
@@ -145,6 +145,20 @@ class accesslib_testcase extends advanced_testcase {
|
||||
$this->assertFalse(is_siteadmin(null));
|
||||
}
|
||||
}
|
||||
|
||||
// Change the site admin list and check that it still works with
|
||||
// multiple admins. We do this with userids only (not real user
|
||||
// accounts) because it makes the test simpler.
|
||||
$before = $CFG->siteadmins;
|
||||
set_config('siteadmins', '666,667,668');
|
||||
$this->assertTrue(is_siteadmin(666));
|
||||
$this->assertTrue(is_siteadmin(667));
|
||||
$this->assertTrue(is_siteadmin(668));
|
||||
$this->assertFalse(is_siteadmin(669));
|
||||
set_config('siteadmins', '13');
|
||||
$this->assertTrue(is_siteadmin(13));
|
||||
$this->assertFalse(is_siteadmin(666));
|
||||
set_config('siteadmins', $before);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user