From e75324a53e57202b256b58b1f771ba7f632eebd3 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Fri, 9 Nov 2012 12:30:32 +0800 Subject: [PATCH 1/2] MDL-36369 Question types and behaviour settings should not require moodle/site:config --- admin/settings/plugins.php | 4 ++++ lib/adminlib.php | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 4d9365c5191..b7fa57e8884 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -312,6 +312,10 @@ if ($hassiteconfig) { // Question type settings if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) { + if (!$hassiteconfig) { + require_once("$CFG->libdir/pluginlib.php"); + $allplugins = plugin_manager::instance()->get_plugins(); + } // Question behaviour settings. $ADMIN->add('modules', new admin_category('qbehavioursettings', new lang_string('questionbehaviours', 'admin'))); $ADMIN->add('qbehavioursettings', new admin_page_manageqbehaviours()); diff --git a/lib/adminlib.php b/lib/adminlib.php index 9ed45e1128e..0da5fe1a5ac 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')); + new moodle_url('/admin/qbehaviours.php'), 'moodle/question:config'); } /** @@ -5299,7 +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"); + parent::__construct('manageqtypes', get_string('manageqtypes', 'admin'), "$CFG->wwwroot/$CFG->admin/qtypes.php", + 'moodle/question:config'); } /** From 837e1812257506601307787c0a946830c2adc463 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Tue, 13 Nov 2012 16:07:28 +0000 Subject: [PATCH 2/2] 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) {