From 6c9b4d1e243fec9757ab27f1578dbae285013713 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Thu, 18 Aug 2022 18:56:20 +0100 Subject: [PATCH] MDL-75349 course: include groups entity data in participants report. --- .../reportbuilder/datasource/participants.php | 21 +++++++++++++++++++++ .../reportbuilder/datasource/participants_test.php | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/course/classes/reportbuilder/datasource/participants.php b/course/classes/reportbuilder/datasource/participants.php index 54fcfda7f93..f6d1a67bcba 100644 --- a/course/classes/reportbuilder/datasource/participants.php +++ b/course/classes/reportbuilder/datasource/participants.php @@ -22,6 +22,7 @@ use core_course\reportbuilder\local\entities\course_category; use core_course\reportbuilder\local\entities\access; use core_course\reportbuilder\local\entities\completion; use core_course\reportbuilder\local\entities\enrolment; +use core_group\reportbuilder\local\entities\group; use core_reportbuilder\datasource; use core_reportbuilder\local\entities\course; use core_reportbuilder\local\entities\user; @@ -72,6 +73,26 @@ class participants extends datasource { $userentity->add_join("LEFT JOIN {user} {$user} ON {$userenrolment}.userid = {$user}.id AND {$user}.deleted = 0"); $this->add_entity($userentity); + // Join group entity. + $groupentity = (new group()) + ->set_table_alias('context', $courseentity->get_table_alias('context')); + $groups = $groupentity->get_table_alias('groups'); + + // Sub-select for all course group members. + $groupsinnerselect = " + SELECT grs.*, grms.userid + FROM {groups} grs + JOIN {groups_members} grms ON grms.groupid = grs.id"; + + $this->add_entity($groupentity + ->add_join($courseentity->get_context_join()) + ->add_joins($userentity->get_joins()) + ->add_join(" + LEFT JOIN ({$groupsinnerselect}) {$groups} + ON {$groups}.courseid = {$course}.id + AND {$groups}.userid = {$user}.id") + ); + // Join completion entity. $completionentity = new completion(); $completion = $completionentity->get_table_alias('course_completion'); diff --git a/course/tests/reportbuilder/datasource/participants_test.php b/course/tests/reportbuilder/datasource/participants_test.php index 427c2f62cd4..d703bff8027 100644 --- a/course/tests/reportbuilder/datasource/participants_test.php +++ b/course/tests/reportbuilder/datasource/participants_test.php @@ -69,6 +69,10 @@ class participants_test extends core_reportbuilder_testcase { $this->getDataGenerator()->enrol_user($user1->id, $course->id, 'student', 'manual', $timestart, $timeend, ENROL_USER_ACTIVE); + // Add them to a group. + $group = self::getDataGenerator()->create_group(['courseid' => $course->id]); + self::getDataGenerator()->create_group_member(['groupid' => $group->id, 'userid' => $user1->id]); + // Mark course as completed for the user. $ccompletion = new completion_completion(array('course' => $course->id, 'userid' => $user1->id)); $ccompletion->mark_enrolled($timestart); @@ -98,6 +102,8 @@ class participants_test extends core_reportbuilder_testcase { ->set('sortenabled', true) ->update(); $generator->create_column(['reportid' => $report->get('id'), + 'uniqueidentifier' => 'group:name']); + $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'completion:completed']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'access:timeaccess']); @@ -139,6 +145,7 @@ class participants_test extends core_reportbuilder_testcase { 'Music', // Course category name. fullname($user1), // User fullname. 'Manual enrolments', // Enrolment method. + $group->name, // Group name. 'Yes', // Course completed. userdate($timelastaccess), // Time last access. '100.0%', // Progress percentage. -- 2.11.4.GIT