MDL-75349 course: include groups entity data in participants report.

This commit is contained in:
Paul Holden 2022-08-18 18:56:20 +01:00
parent b10b89ec74
commit 6c9b4d1e24
2 changed files with 28 additions and 0 deletions

View File

@ -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');

View File

@ -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);
@ -97,6 +101,8 @@ class participants_test extends core_reportbuilder_testcase {
'uniqueidentifier' => 'enrolment:method'])
->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'),
@ -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.