From fde6f79faeb359af25a4ff5d02d2e09a3b481ddf Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Tue, 18 Sep 2012 13:14:37 +0800 Subject: [PATCH] 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"); }