MDL-39454 Accesslib: is_siteadmin is a bit slow

This commit is contained in:
sam marshall
2013-06-11 12:27:09 +12:00
committed by Sam Hemelryk
parent 96241e57e9
commit aca67ae8b0
2 changed files with 29 additions and 2 deletions
+14 -1
View File
@@ -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;
}
/**
+15 -1
View File
@@ -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);
}
/**