From 837e1812257506601307787c0a946830c2adc463 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Tue, 13 Nov 2012 16:07:28 +0000 Subject: [PATCH] MDL-36369 qtypes and qbehaviour settings permissions. The correct policy is that users with moodle/question:config can set the default settings for particular qtypes. However, it requires moodle/site:config in order to do manage qbehaviours or manage qtypes. --- lib/adminlib.php | 6 +++--- lib/pluginlib.php | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/adminlib.php b/lib/adminlib.php index 0da5fe1a5ac..e5b47608348 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -5252,7 +5252,7 @@ class admin_page_manageqbehaviours extends admin_externalpage { public function __construct() { global $CFG; parent::__construct('manageqbehaviours', get_string('manageqbehaviours', 'admin'), - new moodle_url('/admin/qbehaviours.php'), 'moodle/question:config'); + new moodle_url('/admin/qbehaviours.php')); } /** @@ -5299,8 +5299,8 @@ class admin_page_manageqtypes extends admin_externalpage { */ public function __construct() { global $CFG; - parent::__construct('manageqtypes', get_string('manageqtypes', 'admin'), "$CFG->wwwroot/$CFG->admin/qtypes.php", - 'moodle/question:config'); + parent::__construct('manageqtypes', get_string('manageqtypes', 'admin'), + new moodle_url('/admin/qtypes.php')); } /** diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 6f15d954f7a..1ba40566a5b 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2924,9 +2924,11 @@ class plugininfo_qtype extends plugininfo_base { $section = $this->get_settings_section_name(); $settings = null; - if ($hassiteconfig && file_exists($this->full_path('settings.php'))) { + $systemcontext = context_system::instance(); + if (($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) && + file_exists($this->full_path('settings.php'))) { $settings = new admin_settingpage($section, $this->displayname, - 'moodle/site:config', $this->is_enabled() === false); + 'moodle/question:config', $this->is_enabled() === false); include($this->full_path('settings.php')); // this may also set $settings to null } if ($settings) {