From: skodak Date: Fri, 12 Dec 2008 10:50:25 +0000 (+0000) Subject: MDL-17589 fixed handling of missing caps in admin tree; merged from MOODLE_19_STABLE X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=1a5b427e4433efc853f437d13e1cec2b64f09205;p=moodle.git MDL-17589 fixed handling of missing caps in admin tree; merged from MOODLE_19_STABLE --- diff --git a/lib/accesslib.php b/lib/accesslib.php index b74c4139fd..47aaf63aed 100755 --- a/lib/accesslib.php +++ b/lib/accesslib.php @@ -3295,6 +3295,9 @@ function update_capabilities($component='moodle') { // role assignments? capabilities_cleanup($component, $filecaps); + // reset static caches + is_valid_capability('reset', false); + return true; } @@ -3894,10 +3897,17 @@ function get_related_contexts_string($context) { } } -function is_valid_capability($capabilityname) { +/** + * Verifies if given capability installed. + * + * @param string $capabilityname + * @param bool $cached + * @return book true if capability exists + */ +function is_valid_capability($capabilityname, $cached=true) { static $capsnames = null; // one request per page only - if (is_null($capsnames)) { + if (is_null($capsnames) or !$cached) { global $DB; $capsnames = $DB->get_records_menu('capabilities', null, '', 'name, 1'); } diff --git a/lib/adminlib.php b/lib/adminlib.php index 724b81e38f..dbf59e2e86 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -2196,7 +2196,7 @@ class admin_externalpage extends part_of_admin_tree { } $context = empty($this->context) ? get_context_instance(CONTEXT_SYSTEM) : $this->context; foreach($this->req_capability as $cap) { - if (has_capability($cap, $context)) { + if (is_valid_capability($cap) and has_capability($cap, $context)) { return true; } } @@ -2346,7 +2346,7 @@ class admin_settingpage extends part_of_admin_tree { } $context = empty($this->context) ? get_context_instance(CONTEXT_SYSTEM) : $this->context; foreach($this->req_capability as $cap) { - if (has_capability($cap, $context)) { + if (is_valid_capability($cap) and has_capability($cap, $context)) { return true; } }