From 57ef6e471f4f5ff4dfed110326b279440d6ab145 Mon Sep 17 00:00:00 2001 From: Mark Sharp Date: Fri, 15 Aug 2025 12:06:06 +0100 Subject: [PATCH] MDL-80942 enrol_meta: Let course meta link be clickable --- public/enrol/meta/lib.php | 19 +++++++++ public/enrol/meta/tests/plugin_test.php | 53 +++++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/public/enrol/meta/lib.php b/public/enrol/meta/lib.php index 1bc08ca49df..8128cb3ad41 100644 --- a/public/enrol/meta/lib.php +++ b/public/enrol/meta/lib.php @@ -22,6 +22,9 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +use core\output\html_writer; +use core\url; + defined('MOODLE_INTERNAL') || die(); /** @@ -63,6 +66,22 @@ class enrol_meta_plugin extends enrol_plugin { } } + /** + * Display meta course name with link if user has permissions. + * + * @param stdClass $instance + * @return string + */ + public function get_instance_name_for_management_page(stdClass $instance): string { + $displayname = $this->get_instance_name($instance); + $metacoursecontext = \core\context\course::instance($instance->customint1); + $canviewmetacourse = course_can_view_participants($metacoursecontext); + if ($canviewmetacourse) { + $displayname = html_writer::link(new url('/user/index.php', ['id' => $instance->customint1]), $displayname); + } + return $displayname; + } + /** * Returns true if we can add a new instance to this course. * diff --git a/public/enrol/meta/tests/plugin_test.php b/public/enrol/meta/tests/plugin_test.php index b0d4078530c..986614b277d 100644 --- a/public/enrol/meta/tests/plugin_test.php +++ b/public/enrol/meta/tests/plugin_test.php @@ -1258,4 +1258,57 @@ final class plugin_test extends \advanced_testcase { $instance = $metaplugin->find_instance($enrolmentdata, $course1->id); $this->assertEquals($instance2->id, $instance->id); } + + /** + * Test the display name is linked to the meta course depending on permissions. + * + * @covers ::get_instance_name_for_management_page + * @return void + */ + public function test_get_instance_name_for_management_page(): void { + global $DB; + $this->resetAfterTest(); + + $cat = $this->getDataGenerator()->create_category(); + $course1 = $this->getDataGenerator()->create_course(['category' => $cat->id, 'shortname' => 'course1']); + $course2 = $this->getDataGenerator()->create_course(['category' => $cat->id, 'shortname' => 'course2']); + $course3 = $this->getDataGenerator()->create_course(['category' => $cat->id, 'shortname' => 'course3']); + + $metaplugin = enrol_get_plugin('meta'); + + $teacher1 = $this->getDataGenerator()->create_and_enrol($course1, 'editingteacher'); + $teacher2 = $this->getDataGenerator()->create_and_enrol($course2, 'editingteacher'); + $this->getDataGenerator()->enrol_user($teacher1->id, $course3->id, 'editingteacher'); + $this->getDataGenerator()->enrol_user($teacher2->id, $course3->id, 'editingteacher'); + + // Add two meta enrol instances. + $instanceid1 = $metaplugin->add_instance($course3, ['customint1' => $course1->id]); + $instanceid2 = $metaplugin->add_instance($course3, ['customint1' => $course2->id]); + $instance1 = $DB->get_record('enrol', ['id' => $instanceid1]); + $instance2 = $DB->get_record('enrol', ['id' => $instanceid2]); + + $this->setUser($teacher1); + $this->assertMatchesRegularExpression( + '#Course meta link \(Test course 1\)<\/a>#', + $metaplugin->get_instance_name_for_management_page($instance1), + 'Teacher1 has permissions to view Course 1 so should have a link' + ); + $this->assertEquals( + 'Course meta link (Test course 2)', + $metaplugin->get_instance_name_for_management_page($instance2), + "Teacher1 doesn't have permissions to view Course 2 so no link" + ); + + $this->setUser($teacher2); + $this->assertEquals( + 'Course meta link (Test course 1)', + $metaplugin->get_instance_name_for_management_page($instance1), + "Teacher2 doesn't have permissions to view Course 1 so no link" + ); + $this->assertMatchesRegularExpression( + '#Course meta link \(Test course 2\)<\/a>#', + $metaplugin->get_instance_name_for_management_page($instance2), + 'Teacher2 has permissions to view Course 2 so should have a link' + ); + } }