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) { } /**