From 5cdb1893a9d7d331627c0f7d311ca32c922f5dc3 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Tue, 2 Oct 2012 15:49:03 +0800 Subject: [PATCH 01/14] MDL-35661 Add functionality to plugininfo_base to load settings and check the settings url - added plugin_manager and plugininfo_base::load_settings(), get_settings_section_name() --- admin/settings/plugins.php | 3 +++ lib/pluginlib.php | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 4f22f08f702..182935b1f03 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -5,6 +5,9 @@ */ if ($hassiteconfig) { + require_once("$CFG->libdir/pluginlib.php"); + $allplugins = plugin_manager::instance()->get_plugins(); + $ADMIN->add('modules', new admin_page_pluginsoverview()); $ADMIN->add('modules', new admin_category('modsettings', new lang_string('activitymodules'))); $ADMIN->add('modsettings', new admin_page_managemods()); diff --git a/lib/pluginlib.php b/lib/pluginlib.php index c3a5456297b..4ab589fe47f 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -1762,6 +1762,15 @@ abstract class plugininfo_base { return $updates; } + /** + * Returns the node name used in admin settings menu for this plugin settings (if applicable) + * + * @return null|string node name or null if plugin does not create settings node (default) + */ + public function get_settings_section_name() { + return null; + } + /** * Returns the URL of the plugin settings screen * @@ -1771,7 +1780,31 @@ abstract class plugininfo_base { * @return null|moodle_url */ public function get_settings_url() { - return null; + $section = $this->get_settings_section_name(); + if ($section === null) { + return null; + } + $settings = admin_get_root()->locate($section); + if ($settings && $settings instanceof admin_settingpage) { + return new moodle_url('/admin/settings.php', array('section' => $section)); + } else if ($settings && $settings instanceof admin_externalpage) { + return new moodle_url($settings->url); + } else { + return null; + } + } + + /** + * Loads plugin settings to the settings tree + * + * This function usually includes settings.php file in plugins folder. + * Alternatively it can create a link to some settings page (instance of admin_externalpage) + * + * @param part_of_admin_tree $adminroot + * @param string $parentnodename + * @param bool $hassiteconfig whether the current user has moodle/site:config capability + */ + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { } /** From fde6f79faeb359af25a4ff5d02d2e09a3b481ddf Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Tue, 18 Sep 2012 13:14:37 +0800 Subject: [PATCH 02/14] MDL-35661 Loading of plugin settings for modules (plugininfo_mod) --- admin/settings/plugins.php | 19 ++++--------------- lib/pluginlib.php | 39 +++++++++++++++++++++++++++++++++----- mod/assign/adminlib.php | 6 +++--- mod/assign/settings.php | 6 +++--- mod/quiz/settings.php | 4 ++-- 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 182935b1f03..6e6847e9e64 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -9,23 +9,12 @@ if ($hassiteconfig) { $allplugins = plugin_manager::instance()->get_plugins(); $ADMIN->add('modules', new admin_page_pluginsoverview()); + + // activity modules $ADMIN->add('modules', new admin_category('modsettings', new lang_string('activitymodules'))); $ADMIN->add('modsettings', new admin_page_managemods()); - $modules = $DB->get_records('modules', array(), "name ASC"); - foreach ($modules as $module) { - $modulename = $module->name; - if (!file_exists("$CFG->dirroot/mod/$modulename/lib.php")) { - continue; - } - $strmodulename = new lang_string('modulename', 'mod_'.$modulename); - if (file_exists($CFG->dirroot.'/mod/'.$modulename.'/settings.php')) { - // do not show disabled modules in tree, keep only settings link on manage page - $settings = new admin_settingpage('modsetting'.$modulename, $strmodulename, 'moodle/site:config', !$module->visible); - include($CFG->dirroot.'/mod/'.$modulename.'/settings.php'); - if ($settings) { - $ADMIN->add('modsettings', $settings); - } - } + foreach ($allplugins['mod'] as $module) { + $module->load_settings($ADMIN, 'modsettings', $hassiteconfig); } // hidden script for converting journals to online assignments (or something like that) linked from elsewhere diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 4ab589fe47f..7333e075511 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2200,6 +2200,23 @@ class plugininfo_mod extends plugininfo_base { return $modules; } + /** + * Magic method getter, redirects to read only values. + * + * For module plugins we pretend the object has 'visible' property for compatibility + * with plugins developed for Moodle version below 2.4 + * + * @param string $name + * @return mixed + */ + public function __get($name) { + if ($name === 'visible') { + debugging('This is now an instance of plugininfo_mod, please use $module->is_enabled() instead of $module->visible', DEBUG_DEVELOPER); + return ($this->is_enabled() !== false); + } + return parent::__get($name); + } + public function init_display_name() { if (get_string_manager()->string_exists('pluginname', $this->component)) { $this->displayname = get_string('pluginname', $this->component); @@ -2245,12 +2262,24 @@ class plugininfo_mod extends plugininfo_base { } } - public function get_settings_url() { + public function get_settings_section_name() { + return 'modsetting' . $this->name; + } - if (file_exists($this->full_path('settings.php')) or file_exists($this->full_path('settingstree.php'))) { - return new moodle_url('/admin/settings.php', array('section' => 'modsetting' . $this->name)); - } else { - return parent::get_settings_url(); + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + $module = $this; // also can be used inside settings.php + $section = $this->get_settings_section_name(); + + $settings = null; + if ($hassiteconfig && file_exists($this->full_path('settings.php'))) { + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); } } diff --git a/mod/assign/adminlib.php b/mod/assign/adminlib.php index 43c1e7d8e16..fcc5311b72e 100644 --- a/mod/assign/adminlib.php +++ b/mod/assign/adminlib.php @@ -447,10 +447,10 @@ class assign_plugin_manager { * @param string $subtype - The type of plugin (submission or feedback) * @param part_of_admin_tree $admin - The handle to the admin menu * @param admin_settingpage $settings - The handle to current node in the navigation tree - * @param stdClass $module - The handle to the current module + * @param stdClass|plugininfo_mod $module - The handle to the current module * @return None */ - static function add_admin_assign_plugin_settings($subtype, part_of_admin_tree $admin, admin_settingpage $settings, stdClass $module) { + static function add_admin_assign_plugin_settings($subtype, part_of_admin_tree $admin, admin_settingpage $settings, $module) { global $CFG; $plugins = get_plugin_list_with_file($subtype, 'settings.php', false); @@ -463,7 +463,7 @@ class assign_plugin_manager { foreach ($pluginsbyname as $pluginname => $plugin) { $settings = new admin_settingpage($subtype . '_'.$plugin, - $pluginname, 'moodle/site:config', !$module->visible); + $pluginname, 'moodle/site:config', $module->is_enabled() === false); if ($admin->fulltree) { $shortsubtype = substr($subtype, strlen('assign')); include($CFG->dirroot . "/mod/assign/$shortsubtype/$plugin/settings.php"); diff --git a/mod/assign/settings.php b/mod/assign/settings.php index ea7427fc552..fd29d76d784 100644 --- a/mod/assign/settings.php +++ b/mod/assign/settings.php @@ -27,12 +27,12 @@ defined('MOODLE_INTERNAL') || die; require_once($CFG->dirroot . '/mod/assign/adminlib.php'); $ADMIN->add('modules', new admin_category('assignmentplugins', - new lang_string('assignmentplugins', 'assign'), !$module->visible)); + new lang_string('assignmentplugins', 'assign'), $module->is_enabled() === false)); $ADMIN->add('assignmentplugins', new admin_category('assignsubmissionplugins', - new lang_string('submissionplugins', 'assign'), !$module->visible)); + new lang_string('submissionplugins', 'assign'), $module->is_enabled() === false)); $ADMIN->add('assignsubmissionplugins', new assign_admin_page_manage_assign_plugins('assignsubmission')); $ADMIN->add('assignmentplugins', new admin_category('assignfeedbackplugins', - new lang_string('feedbackplugins', 'assign'), !$module->visible)); + new lang_string('feedbackplugins', 'assign'), $module->is_enabled() === false)); $ADMIN->add('assignfeedbackplugins', new assign_admin_page_manage_assign_plugins('assignfeedback')); diff --git a/mod/quiz/settings.php b/mod/quiz/settings.php index 78efa460bcd..7efd52606f5 100644 --- a/mod/quiz/settings.php +++ b/mod/quiz/settings.php @@ -199,7 +199,7 @@ if (empty($reportsbyname)) { $ADMIN->add('modsettings', $quizsettings); } else { $ADMIN->add('modsettings', new admin_category('modsettingsquizcat', - get_string('modulename', 'quiz'), !$module->visible)); + get_string('modulename', 'quiz'), $module->is_enabled() === false)); $ADMIN->add('modsettingsquizcat', $quizsettings); // Add the report pages for the settings.php files in sub directories of mod/quiz/report. @@ -207,7 +207,7 @@ if (empty($reportsbyname)) { $reportname = $report; $settings = new admin_settingpage('modsettingsquizcat'.$reportname, - $strreportname, 'moodle/site:config', !$module->visible); + $strreportname, 'moodle/site:config', $module->is_enabled() === false); if ($ADMIN->fulltree) { include($CFG->dirroot . "/mod/quiz/report/$reportname/settings.php"); } From 870d42809a5c1c812af0cfb20ca9420bb660972d Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 19 Sep 2012 11:59:59 +0800 Subject: [PATCH 03/14] MDL-35661 Loading of plugin settings for blocks (plugininfo_block) --- admin/settings/plugins.php | 17 +++---------- lib/pluginlib.php | 49 +++++++++++++++++++++++++++++++------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 6e6847e9e64..74b1f29e842 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -20,22 +20,11 @@ if ($hassiteconfig) { // hidden script for converting journals to online assignments (or something like that) linked from elsewhere $ADMIN->add('modsettings', new admin_externalpage('oacleanup', 'Online Assignment Cleanup', $CFG->wwwroot.'/'.$CFG->admin.'/oacleanup.php', 'moodle/site:config', true)); + // blocks $ADMIN->add('modules', new admin_category('blocksettings', new lang_string('blocks'))); $ADMIN->add('blocksettings', new admin_page_manageblocks()); - $blocks = $DB->get_records('block', array(), "name ASC"); - foreach ($blocks as $block) { - $blockname = $block->name; - if (!file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) { - continue; - } - $strblockname = new lang_string('pluginname', 'block_'.$blockname); - if (file_exists($CFG->dirroot.'/blocks/'.$blockname.'/settings.php')) { - $settings = new admin_settingpage('blocksetting'.$blockname, $strblockname, 'moodle/site:config', !$block->visible); - include($CFG->dirroot.'/blocks/'.$blockname.'/settings.php'); - if ($settings) { - $ADMIN->add('blocksettings', $settings); - } - } + foreach ($allplugins['block'] as $block) { + $block->load_settings($ADMIN, 'blocksettings', $hassiteconfig); } // message outputs diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 7333e075511..7af0e854563 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -1900,6 +1900,23 @@ class plugininfo_block extends plugininfo_base { return $blocks; } + /** + * Magic method getter, redirects to read only values. + * + * For block plugins pretends the object has 'visible' property for compatibility + * with plugins developed for Moodle version below 2.4 + * + * @param string $name + * @return mixed + */ + public function __get($name) { + if ($name === 'visible') { + debugging('This is now an instance of plugininfo_block, please use $block->is_enabled() instead of $block->visible', DEBUG_DEVELOPER); + return ($this->is_enabled() !== false); + } + return parent::__get($name); + } + public function init_display_name() { if (get_string_manager()->string_exists('pluginname', 'block_' . $this->name)) { @@ -1936,21 +1953,35 @@ class plugininfo_block extends plugininfo_base { } } - public function get_settings_url() { + public function get_settings_section_name() { + return 'blocksetting' . $this->name; + } - if (($block = block_instance($this->name)) === false) { - return parent::get_settings_url(); + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + $block = $this; // also can be used inside settings.php + $section = $this->get_settings_section_name(); - } else if ($block->has_config()) { + if (!$hassiteconfig || (($blockinstance = block_instance($this->name)) === false)) { + return; + } + + $settings = null; + if ($blockinstance->has_config()) { if (file_exists($this->full_path('settings.php'))) { - return new moodle_url('/admin/settings.php', array('section' => 'blocksetting' . $this->name)); + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null } else { $blocksinfo = self::get_blocks_info(); - return new moodle_url('/admin/block.php', array('block' => $blocksinfo[$this->name]->id)); + $settingsurl = new moodle_url('/admin/block.php', array('block' => $blocksinfo[$this->name]->id)); + $settings = new admin_externalpage($section, $this->displayname, + $settingsurl, 'moodle/site:config', $this->is_enabled() === false); } - - } else { - return parent::get_settings_url(); + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); } } From cbe9f609f884e48a3952966d92641ceb07029ffe Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 19 Sep 2012 09:15:05 +0800 Subject: [PATCH 04/14] MDL-35661 Loading of plugin settings for auth plugins (plugininfo_auth) --- admin/settings/plugins.php | 21 ++------------------- lib/pluginlib.php | 30 +++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 74b1f29e842..5ea166042bd 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -73,27 +73,10 @@ if ($hassiteconfig) { $temp->add(new admin_setting_configtext('recaptchaprivatekey', new lang_string('recaptchaprivatekey', 'admin'), new lang_string('configrecaptchaprivatekey', 'admin'), '', PARAM_NOTAGS)); $ADMIN->add('authsettings', $temp); - - $auths = get_plugin_list('auth'); - $authsenabled = get_enabled_auth_plugins(); - foreach ($auths as $authname => $authdir) { - $strauthname = new lang_string('pluginname', "auth_{$authname}"); - // do not show disabled auths in tree, keep only settings link on manage page - $enabled = in_array($authname, $authsenabled); - if (file_exists($authdir.'/settings.php')) { - // TODO: finish implementation of common settings - locking, etc. - $settings = new admin_settingpage('authsetting'.$authname, $strauthname, 'moodle/site:config', !$enabled); - include($authdir.'/settings.php'); - if ($settings) { - $ADMIN->add('authsettings', $settings); - } - - } else { - $ADMIN->add('authsettings', new admin_externalpage('authsetting'.$authname, $strauthname, "$CFG->wwwroot/$CFG->admin/auth_config.php?auth=$authname", 'moodle/site:config', !$enabled)); - } + foreach ($allplugins['auth'] as $auth) { + $auth->load_settings($ADMIN, 'authsettings', $hassiteconfig); } - // Enrolment plugins $ADMIN->add('modules', new admin_category('enrolments', new lang_string('enrolments', 'enrol'))); $temp = new admin_settingpage('manageenrols', new lang_string('manageenrols', 'enrol')); diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 7af0e854563..45de46cd804 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2393,11 +2393,31 @@ class plugininfo_auth extends plugininfo_base { return isset($enabled[$this->name]); } - public function get_settings_url() { - if (file_exists($this->full_path('settings.php'))) { - return new moodle_url('/admin/settings.php', array('section' => 'authsetting' . $this->name)); - } else { - return new moodle_url('/admin/auth_config.php', array('auth' => $this->name)); + public function get_settings_section_name() { + return 'authsetting' . $this->name; + } + + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + $auth = $this; // also to be used inside settings.php + $section = $this->get_settings_section_name(); + + $settings = null; + if ($hassiteconfig) { + if (file_exists($this->full_path('settings.php'))) { + // TODO: finish implementation of common settings - locking, etc. + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null + } else { + $settingsurl = new moodle_url('/admin/auth_config.php', array('auth' => $this->name)); + $settings = new admin_externalpage($section, $this->displayname, + $settingsurl, 'moodle/site:config', $this->is_enabled() === false); + } + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); } } } From 79c5c3fa965c55b98e2461e34961fecc1a30edc6 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 19 Sep 2012 09:20:58 +0800 Subject: [PATCH 05/14] MDL-35661 Loading of plugin settings for enrol plugins (plugininfo_enrol) --- admin/settings/plugins.php | 22 ++-------------------- enrol/imsenterprise/settings.php | 2 +- lib/pluginlib.php | 22 +++++++++++++++++----- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 5ea166042bd..6d8f95a6a82 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -81,28 +81,10 @@ if ($hassiteconfig) { $ADMIN->add('modules', new admin_category('enrolments', new lang_string('enrolments', 'enrol'))); $temp = new admin_settingpage('manageenrols', new lang_string('manageenrols', 'enrol')); $temp->add(new admin_setting_manageenrols()); - if (empty($CFG->enrol_plugins_enabled)) { - $enabled = array(); - } else { - $enabled = explode(',', $CFG->enrol_plugins_enabled); - } - $enrols = get_plugin_list('enrol'); $ADMIN->add('enrolments', $temp); - foreach($enrols as $enrol=>$enrolpath) { - if (!file_exists("$enrolpath/settings.php")) { - continue; - } - - $settings = new admin_settingpage('enrolsettings'.$enrol, new lang_string('pluginname', 'enrol_'.$enrol), 'moodle/site:config', !in_array($enrol, $enabled)); - // settings.php may create a subcategory or unset the settings completely - include("$enrolpath/settings.php"); - if ($settings) { - $ADMIN->add('enrolments', $settings); - } - + foreach($allplugins['enrol'] as $enrol) { + $enrol->load_settings($ADMIN, 'enrolments', $hassiteconfig); } - unset($enabled); - unset($enrols); /// Editor plugins diff --git a/enrol/imsenterprise/settings.php b/enrol/imsenterprise/settings.php index 9040b21dd67..1c7f205308e 100644 --- a/enrol/imsenterprise/settings.php +++ b/enrol/imsenterprise/settings.php @@ -27,7 +27,7 @@ defined('MOODLE_INTERNAL') || die(); if ($ADMIN->fulltree) { - require_once('locallib.php'); + require_once($CFG->dirroot.'/enrol/imsenterprise/locallib.php'); $settings->add(new admin_setting_heading('enrol_imsenterprise_settings', '', get_string('pluginname_desc', 'enrol_imsenterprise'))); diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 45de46cd804..c0a5884576f 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2445,12 +2445,24 @@ class plugininfo_enrol extends plugininfo_base { return isset($enabled[$this->name]); } - public function get_settings_url() { + public function get_settings_section_name() { + return 'enrolsettings' . $this->name; + } - if ($this->is_enabled() or file_exists($this->full_path('settings.php'))) { - return new moodle_url('/admin/settings.php', array('section' => 'enrolsettings' . $this->name)); - } else { - return parent::get_settings_url(); + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + $enrol = $this; // also can be used inside settings.php + $section = $this->get_settings_section_name(); + + $settings = null; + if ($hassiteconfig && file_exists($this->full_path('settings.php'))) { + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); } } From 087001ee424ff8cfd4e7e8252e250ccc2295f1d2 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 19 Sep 2012 09:33:33 +0800 Subject: [PATCH 06/14] MDL-35661 Loading of plugin settings for editor plugins (plugininfo_editor) --- admin/settings/plugins.php | 14 ++-------- lib/editor/tinymce/settings.php | 2 +- lib/pluginlib.php | 48 +++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 6d8f95a6a82..f415aca3abb 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -91,19 +91,9 @@ if ($hassiteconfig) { $ADMIN->add('modules', new admin_category('editorsettings', new lang_string('editors', 'editor'))); $temp = new admin_settingpage('manageeditors', new lang_string('editorsettings', 'editor')); $temp->add(new admin_setting_manageeditors()); - $htmleditors = editors_get_available(); $ADMIN->add('editorsettings', $temp); - - $editors_available = editors_get_available(); - foreach ($editors_available as $editor=>$editorstr) { - if (file_exists($CFG->dirroot . '/lib/editor/'.$editor.'/settings.php')) { - $settings = new admin_settingpage('editorsettings'.$editor, new lang_string('pluginname', 'editor_'.$editor), 'moodle/site:config'); - // settings.php may create a subcategory or unset the settings completely - include($CFG->dirroot . '/lib/editor/'.$editor.'/settings.php'); - if ($settings) { - $ADMIN->add('editorsettings', $settings); - } - } + foreach ($allplugins['editor'] as $editor) { + $editor->load_settings($ADMIN, 'editorsettings', $hassiteconfig); } /// License types diff --git a/lib/editor/tinymce/settings.php b/lib/editor/tinymce/settings.php index 56ee3d03fab..b216d5af446 100644 --- a/lib/editor/tinymce/settings.php +++ b/lib/editor/tinymce/settings.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die; -$ADMIN->add('editorsettings', new admin_category('editortinymce', new lang_string('pluginname', 'editor_tinymce'))); +$ADMIN->add('editorsettings', new admin_category('editortinymce', $editor->displayname, $editor->is_enabled() === false)); $settings = new admin_settingpage('editorsettingstinymce', new lang_string('settings', 'editor_tinymce')); if ($ADMIN->fulltree) { diff --git a/lib/pluginlib.php b/lib/pluginlib.php index c0a5884576f..253b87c0af3 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2669,3 +2669,51 @@ class plugininfo_local extends plugininfo_base { } } } + +/** + * Class for HTML editors + */ +class plugininfo_editor extends plugininfo_base { + + public function get_settings_section_name() { + return 'editorsettings' . $this->name; + } + + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + $editor = $this; // also can be used inside settings.php + $section = $this->get_settings_section_name(); + + $settings = null; + if ($hassiteconfig && file_exists($this->full_path('settings.php'))) { + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); + } + } + + /** + * Returns the information about plugin availability + * + * True means that the plugin is enabled. False means that the plugin is + * disabled. Null means that the information is not available, or the + * plugin does not support configurable availability or the availability + * can not be changed. + * + * @return null|bool + */ + public function is_enabled() { + global $CFG; + if (empty($CFG->texteditors)) { + $CFG->texteditors = 'tinymce,textarea'; + } + if (in_array($this->name, explode(',', $CFG->texteditors))) { + return true; + } + return false; + } +} From 5827bf96ed2aa40b046487d94986f9f4afe7496c Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 3 Oct 2012 10:54:11 +0800 Subject: [PATCH 07/14] MDL-35661 Loading of plugin settings for Tinymce plugins (plugininfo_tinymce) --- lib/editor/tinymce/adminlib.php | 23 +++++++++++++++++------ lib/editor/tinymce/settings.php | 17 ++++------------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/lib/editor/tinymce/adminlib.php b/lib/editor/tinymce/adminlib.php index 2aa9caa49df..e6e300ba796 100644 --- a/lib/editor/tinymce/adminlib.php +++ b/lib/editor/tinymce/adminlib.php @@ -39,12 +39,23 @@ class plugininfo_tinymce extends plugininfo_base { return new moodle_url('/lib/editor/tinymce/subplugins.php', array('delete' => $this->name, 'sesskey' => sesskey())); } - public function get_settings_url() { - global $CFG; - if (file_exists("$CFG->dirroot/lib/editor/tinymce/plugins/$this->name/settings.php")) { - return new moodle_url('/admin/settings.php', array('section'=>'tinymce'.$this->name.'settings')); - } else { - return null; + public function get_settings_section_name() { + return 'tinymce'.$this->name.'settings'; + } + + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + + $settings = null; + if ($hassiteconfig && file_exists($this->full_path('settings.php'))) { + $section = $this->get_settings_section_name(); + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); } } diff --git a/lib/editor/tinymce/settings.php b/lib/editor/tinymce/settings.php index b216d5af446..5b16a610de8 100644 --- a/lib/editor/tinymce/settings.php +++ b/lib/editor/tinymce/settings.php @@ -45,20 +45,11 @@ bullist,numlist,outdent,indent,|,link,unlink,|,image,nonbreaking,charmap,table,| $ADMIN->add('editortinymce', $settings); unset($settings); -$subplugins = get_plugin_list('tinymce'); -$disabled = array(); // Disabling of subplugins to be implemented later. -foreach ($subplugins as $name=>$dir) { - if (file_exists("$dir/settings.php")) { - $settings = new admin_settingpage('tinymce'.$name.'settings', new lang_string('pluginname', 'tinymce_'.$name), 'moodle/site:config', in_array($name, $disabled)); - // settings.php may create a subcategory or unset the settings completely. - include("$dir/settings.php"); - if ($settings) { - $ADMIN->add('editortinymce', $settings); - } - } +require_once("$CFG->libdir/pluginlib.php"); +$allplugins = plugin_manager::instance()->get_plugins(); +foreach ($allplugins['tinymce'] as $plugin) { + $plugin->load_settings($ADMIN, 'editortinymce', $hassiteconfig); } -unset($subplugins); -unset($disabled); // TinyMCE does not have standard settings page. $settings = null; From 1de1a6665c236c4a5bf28704652562e397130769 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 19 Sep 2012 09:46:21 +0800 Subject: [PATCH 08/14] MDL-35661 Loading of plugin settings for filters plugins (plugininfo_filter) --- admin/settings/plugins.php | 13 ++----------- lib/pluginlib.php | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index f415aca3abb..add775b67c3 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -154,17 +154,8 @@ if ($hassiteconfig) { } $ADMIN->add('filtersettings', $temp); - $activefilters = filter_get_globally_enabled(); - $filternames = filter_get_all_installed(); - foreach ($filternames as $filterpath => $strfiltername) { - if (file_exists("$CFG->dirroot/$filterpath/filtersettings.php")) { - $settings = new admin_settingpage('filtersetting'.str_replace('/', '', $filterpath), - $strfiltername, 'moodle/site:config', !isset($activefilters[$filterpath])); - include("$CFG->dirroot/$filterpath/filtersettings.php"); - if ($settings) { - $ADMIN->add('filtersettings', $settings); - } - } + foreach ($allplugins['filter'] as $filter) { + $filter->load_settings($ADMIN, 'filtersettings', $hassiteconfig); } diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 253b87c0af3..6a6ccc7eaed 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2122,14 +2122,26 @@ class plugininfo_filter extends plugininfo_base { return null; } - public function get_settings_url() { - + public function get_settings_section_name() { $globalstates = self::get_global_states(); $legacyname = $globalstates[$this->name]->legacyname; - if (filter_has_global_settings($legacyname)) { - return new moodle_url('/admin/settings.php', array('section' => 'filtersetting' . str_replace('/', '', $legacyname))); - } else { - return null; + return 'filtersetting' . str_replace('/', '', $legacyname); + } + + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + $filter = $this; // also can be used inside settings.php + + $settings = null; + if ($hassiteconfig && file_exists($this->full_path('filtersettings.php'))) { + $section = $this->get_settings_section_name(); + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('filtersettings.php')); // this may also set $settings to null + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); } } From 66f3684a38679a1b96ff70de5ce2859781098327 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 19 Sep 2012 12:14:35 +0800 Subject: [PATCH 09/14] MDL-35661 Loading of plugin settings for qtype plugins (plugininfo_qtype) --- admin/settings/plugins.php | 13 ++----------- lib/pluginlib.php | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index add775b67c3..f724735a581 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -332,17 +332,8 @@ if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) // Question type settings. $ADMIN->add('modules', new admin_category('qtypesettings', new lang_string('questiontypes', 'admin'))); $ADMIN->add('qtypesettings', new admin_page_manageqtypes()); - $qtypes = get_plugin_list('qtype'); - foreach ($qtypes as $qtype => $path) { - $settingsfile = $path . '/settings.php'; - if (file_exists($settingsfile)) { - $settings = new admin_settingpage('qtypesetting' . $qtype, - new lang_string('pluginname', 'qtype_' . $qtype), 'moodle/question:config'); - include($settingsfile); - if ($settings) { - $ADMIN->add('qtypesettings', $settings); - } - } + foreach ($allplugins['qtype'] as $qtype) { + $qtype->load_settings($ADMIN, 'qtypesettings', $hassiteconfig); } } diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 6a6ccc7eaed..f2cbc17e9c1 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2380,6 +2380,27 @@ class plugininfo_qtype extends plugininfo_base { return new moodle_url('/admin/qtypes.php', array('delete' => $this->name, 'sesskey' => sesskey())); } + + public function get_settings_section_name() { + return 'qtypesetting' . $this->name; + } + + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + $qtype = $this; // also can be used inside settings.php + $section = $this->get_settings_section_name(); + + $settings = null; + if ($hassiteconfig && file_exists($this->full_path('settings.php'))) { + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); + } + } } From d98305bddaa6f5ed24daea26c59a038c9758cfb9 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 19 Sep 2012 12:34:47 +0800 Subject: [PATCH 10/14] MDL-35661 Loading of plugin settings for plagiarism plugins (plugininfo_plagiarism) --- admin/settings/plugins.php | 6 ++---- lib/pluginlib.php | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index f724735a581..bca18107ecd 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -343,10 +343,8 @@ if ($hassiteconfig && !empty($CFG->enableplagiarism)) { $ADMIN->add('plagiarism', new admin_externalpage('manageplagiarismplugins', new lang_string('manageplagiarism', 'plagiarism'), $CFG->wwwroot . '/' . $CFG->admin . '/plagiarism.php')); - foreach (get_plugin_list('plagiarism') as $plugin => $plugindir) { - if (file_exists($plugindir.'/settings.php')) { - $ADMIN->add('plagiarism', new admin_externalpage('plagiarism'.$plugin, new lang_string($plugin, 'plagiarism_'.$plugin), "$CFG->wwwroot/plagiarism/$plugin/settings.php", 'moodle/site:config')); - } + foreach ($allplugins['plagiarism'] as $plugin) { + $plugin->load_settings($ADMIN, 'plagiarism', $hassiteconfig); } } $ADMIN->add('reports', new admin_externalpage('comments', new lang_string('comments'), $CFG->wwwroot.'/comment/', 'moodle/site:viewreports')); diff --git a/lib/pluginlib.php b/lib/pluginlib.php index f2cbc17e9c1..88ef2585306 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2750,3 +2750,24 @@ class plugininfo_editor extends plugininfo_base { return false; } } + +/** + * Class for plagiarism plugins + */ +class plugininfo_plagiarism extends plugininfo_base { + + public function get_settings_section_name() { + return 'plagiarism'. $this->name; + } + + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + // plagiarism plugin just redirect to settings.php in the plugins directory + if ($hassiteconfig && file_exists($this->full_path('settings.php'))) { + $section = $this->get_settings_section_name(); + $settingsurl = new moodle_url($this->get_dir().'/settings.php'); + $settings = new admin_externalpage($section, $this->displayname, + $settingsurl, 'moodle/site:config', $this->is_enabled() === false); + $adminroot->add($parentnodename, $settings); + } + } +} From e8d169320bed101f76e145f076d34a9cbc7f2920 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Thu, 27 Sep 2012 09:45:50 +0800 Subject: [PATCH 11/14] MDL-35661 Loading of plugin settings for message processors (plugininfo_message) --- admin/settings/plugins.php | 17 ++--------------- lib/pluginlib.php | 24 ++++++++++++++++++++---- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index bca18107ecd..42ab58d29c9 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -31,21 +31,8 @@ if ($hassiteconfig) { $ADMIN->add('modules', new admin_category('messageoutputs', new lang_string('messageoutputs', 'message'))); $ADMIN->add('messageoutputs', new admin_page_managemessageoutputs()); $ADMIN->add('messageoutputs', new admin_page_defaultmessageoutputs()); - require_once($CFG->dirroot.'/message/lib.php'); - $processors = get_message_processors(); - foreach ($processors as $processor) { - $processorname = $processor->name; - if (!$processor->available) { - continue; - } - if ($processor->hassettings) { - $strprocessorname = new lang_string('pluginname', 'message_'.$processorname); - $settings = new admin_settingpage('messagesetting'.$processorname, $strprocessorname, 'moodle/site:config', !$processor->enabled); - include($CFG->dirroot.'/message/output/'.$processor->name.'/settings.php'); - if ($settings) { - $ADMIN->add('messageoutputs', $settings); - } - } + foreach ($allplugins['message'] as $processor) { + $processor->load_settings($ADMIN, 'messageoutputs', $hassiteconfig); } // authentication plugins diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 88ef2585306..910686c915c 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2510,15 +2510,31 @@ class plugininfo_enrol extends plugininfo_base { */ class plugininfo_message extends plugininfo_base { - public function get_settings_url() { + public function get_settings_section_name() { + return 'messagesetting' . $this->name; + } + + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + if (!$hassiteconfig) { + return; + } + $section = $this->get_settings_section_name(); + + $settings = null; $processors = get_message_processors(); if (isset($processors[$this->name])) { $processor = $processors[$this->name]; if ($processor->available && $processor->hassettings) { - return new moodle_url('settings.php', array('section' => 'messagesetting'.$processor->name)); + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null } } - return parent::get_settings_url(); + if ($settings) { + $ADMIN->add($parentnodename, $settings); + } } /** @@ -2539,7 +2555,7 @@ class plugininfo_message extends plugininfo_base { public function get_uninstall_url() { $processors = get_message_processors(); if (isset($processors[$this->name])) { - return new moodle_url('message.php', array('uninstall' => $processors[$this->name]->id, 'sesskey' => sesskey())); + return new moodle_url('/admin/message.php', array('uninstall' => $processors[$this->name]->id, 'sesskey' => sesskey())); } else { return parent::get_uninstall_url(); } From eb30df1e5ffa3685c53c6c307b85eaf169d4a4ff Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Thu, 27 Sep 2012 10:18:07 +0800 Subject: [PATCH 12/14] MDL-35661 Removed function plugininfo_local::get_settings_url() introduced in MDL-35442 Local plugins do not create settings node with particular name, there is no standard way to return the settings url --- admin/settings/plugins.php | 2 ++ lib/pluginlib.php | 8 -------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 42ab58d29c9..596176f12ad 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -402,6 +402,8 @@ if ($hassiteconfig) { $CFG->wwwroot . '/' . $CFG->admin . '/localplugins.php')); } +// extend settings for each local plugin. Note that their settings may be in any part of the +// settings tree and may be visible not only for administrators. We can not use $allplugins here foreach (get_plugin_list('local') as $plugin => $plugindir) { $settings_path = "$plugindir/settings.php"; if (file_exists($settings_path)) { diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 910686c915c..6d120b4a1db 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2709,14 +2709,6 @@ class plugininfo_local extends plugininfo_base { public function get_uninstall_url() { return new moodle_url('/admin/localplugins.php', array('delete' => $this->name, 'sesskey' => sesskey())); } - - public function get_settings_url() { - if (file_exists($this->full_path('settings.php'))) { - return new moodle_url('/admin/settings.php', array('section' => 'local_' . $this->name)); - } else { - return parent::get_settings_url(); - } - } } /** From c517dd68f7f19e05bf185552ed8b323ffc5cd045 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Thu, 27 Sep 2012 10:39:33 +0800 Subject: [PATCH 13/14] MDL-35661 Loading of plugin settings for repositories plugins (plugininfo_repository) --- admin/settings/plugins.php | 13 ++----------- lib/pluginlib.php | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 596176f12ad..4b82bfd1ce7 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -239,17 +239,8 @@ if ($hassiteconfig) { $ADMIN->add('repositorysettings', new admin_externalpage('repositoryinstanceedit', new lang_string('editrepositoryinstance', 'repository'), $url, 'moodle/site:config', true), '', $url); - foreach (repository::get_types() as $repositorytype) { - //display setup page for plugins with: general options or multiple instances (e.g. has instance config) - $typeoptionnames = repository::static_function($repositorytype->get_typename(), 'get_type_option_names'); - $instanceoptionnames = repository::static_function($repositorytype->get_typename(), 'get_instance_option_names'); - if (!empty($typeoptionnames) || !empty($instanceoptionnames)) { - - $params = array('action'=>'edit', 'sesskey'=>sesskey(), 'repos'=>$repositorytype->get_typename()); - $settingsurl = new moodle_url("/$CFG->admin/repository.php", $params); - $repositoryexternalpage = new admin_externalpage('repositorysettings'.$repositorytype->get_typename(), $repositorytype->get_readablename(), $settingsurl); - $ADMIN->add('repositorysettings', $repositoryexternalpage); - } + foreach ($allplugins['repository'] as $repositorytype) { + $repositorytype->load_settings($ADMIN, 'repositorysettings', $hassiteconfig); } } diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 6d120b4a1db..88d11576588 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2575,12 +2575,19 @@ class plugininfo_repository extends plugininfo_base { return isset($enabled[$this->name]); } - public function get_settings_url() { + public function get_settings_section_name() { + return 'repositorysettings'.$this->name; + } - if ($this->is_enabled()) { - return new moodle_url('/admin/repository.php', array('sesskey' => sesskey(), 'action' => 'edit', 'repos' => $this->name)); - } else { - return parent::get_settings_url(); + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + if ($hassiteconfig && $this->is_enabled()) { + // completely no access to repository setting when it is not enabled + $sectionname = $this->get_settings_section_name(); + $settingsurl = new moodle_url('/admin/repository.php', + array('sesskey' => sesskey(), 'action' => 'edit', 'repos' => $this->name)); + $settings = new admin_externalpage($sectionname, $this->displayname, + $settingsurl, 'moodle/site:config', false); + $adminroot->add($parentnodename, $settings); } } From 2567584d5eaa5509d31b098e11c588da1329d1c8 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Thu, 27 Sep 2012 14:48:10 +0800 Subject: [PATCH 14/14] MDL-35661 Loading of plugin settings for webservices plugins (plugininfo_webservice) - webservicesettings must be only created if user has site:config capability, otherwise the nodes are added to non-existing parent --- admin/settings/plugins.php | 15 +++---------- lib/pluginlib.php | 44 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 4b82bfd1ce7..e28d7e6d8ae 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -242,7 +242,6 @@ if ($hassiteconfig) { foreach ($allplugins['repository'] as $repositorytype) { $repositorytype->load_settings($ADMIN, 'repositorysettings', $hassiteconfig); } -} /// Web services $ADMIN->add('modules', new admin_category('webservicesettings', new lang_string('webservices', 'webservice'))); @@ -280,17 +279,8 @@ if ($hassiteconfig) { 'admin'), new lang_string('configenablewsdocumentation', 'admin', $wsdoclink), false)); $ADMIN->add('webservicesettings', $temp); /// links to protocol pages - $webservices_available = get_plugin_list('webservice'); - $active_webservices = empty($CFG->webserviceprotocols) ? array() : explode(',', $CFG->webserviceprotocols); - foreach ($webservices_available as $webservice => $location) { - if (file_exists("$location/settings.php")) { - $name = new lang_string('pluginname', 'webservice_'.$webservice); - $settings = new admin_settingpage('webservicesetting'.$webservice, $name, 'moodle/site:config', !in_array($webservice, $active_webservices) or empty($CFG->enablewebservices)); - include("$location/settings.php"); - if ($settings) { - $ADMIN->add('webservicesettings', $settings); - } - } + foreach ($allplugins['webservice'] as $webservice) { + $webservice->load_settings($ADMIN, 'webservicesettings', $hassiteconfig); } /// manage token page link $ADMIN->add('webservicesettings', new admin_externalpage('addwebservicetoken', new lang_string('managetokens', 'webservice'), "$CFG->wwwroot/$CFG->admin/webservice/tokens.php", 'moodle/site:config', true)); @@ -300,6 +290,7 @@ if ($hassiteconfig) { $temp->add(new admin_setting_heading('webservicesaredisabled', '', new lang_string('disabledwarning', 'webservice'))); } $ADMIN->add('webservicesettings', $temp); +} // Question type settings if ($hassiteconfig || has_capability('moodle/question:config', $systemcontext)) { diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 88d11576588..18ffa8675c0 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2786,3 +2786,47 @@ class plugininfo_plagiarism extends plugininfo_base { } } } + +/** + * Class for webservice protocols + */ +class plugininfo_webservice extends plugininfo_base { + + public function get_settings_section_name() { + return 'webservicesetting' . $this->name; + } + + public function load_settings(part_of_admin_tree $adminroot, $parentnodename, $hassiteconfig) { + global $CFG, $USER, $DB, $OUTPUT, $PAGE; // in case settings.php wants to refer to them + $ADMIN = $adminroot; // may be used in settings.php + $webservice = $this; // also can be used inside settings.php + $section = $this->get_settings_section_name(); + + $settings = null; + if ($hassiteconfig && file_exists($this->full_path('settings.php'))) { + $settings = new admin_settingpage($section, $this->displayname, + 'moodle/site:config', $this->is_enabled() === false); + include($this->full_path('settings.php')); // this may also set $settings to null + } + if ($settings) { + $ADMIN->add($parentnodename, $settings); + } + } + + public function is_enabled() { + global $CFG; + if (empty($CFG->enablewebservices)) { + return false; + } + $active_webservices = empty($CFG->webserviceprotocols) ? array() : explode(',', $CFG->webserviceprotocols); + if (in_array($this->name, $active_webservices)) { + return true; + } + return false; + } + + public function get_uninstall_url() { + return new moodle_url('/admin/webservice/protocols.php', + array('sesskey' => sesskey(), 'action' => 'uninstall', 'webservice' => $this->name)); + } +} \ No newline at end of file