diff --git a/lib/adminlib.php b/lib/adminlib.php index 9d93918a232..6c4571e4208 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -811,6 +811,20 @@ class admin_category implements parentable_part_of_admin_tree { $this->hidden = $hidden; } + /** + * Get the URL to view this page. + * + * @return moodle_url + */ + public function get_settings_page_url(): moodle_url { + return new moodle_url( + '/admin/category.php', + [ + 'category' => $this->name, + ] + ); + } + /** * Returns a reference to the part_of_admin_tree object with internal name $name. * diff --git a/lib/classes/plugininfo/base.php b/lib/classes/plugininfo/base.php index 486baee309f..f32498f40b6 100644 --- a/lib/classes/plugininfo/base.php +++ b/lib/classes/plugininfo/base.php @@ -509,13 +509,22 @@ abstract class base { 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; + if ($settings) { + if ($settings instanceof \admin_settingpage) { + return new moodle_url('/admin/settings.php', [ + 'section' => $section, + ]); + } + + if ($settings instanceof \admin_externalpage) { + return new moodle_url($settings->url); + } + + if ($settings instanceof \admin_category) { + return $settings->get_settings_page_url(); + } } + return null; } /**