diff --git a/competency/classes/reportbuilder/datasource/competencies.php b/competency/classes/reportbuilder/datasource/competencies.php index ee6013ba8ec..d86841f610e 100644 --- a/competency/classes/reportbuilder/datasource/competencies.php +++ b/competency/classes/reportbuilder/datasource/competencies.php @@ -19,10 +19,12 @@ declare(strict_types=1); namespace core_competency\reportbuilder\datasource; use core\reportbuilder\local\entities\context; +use core_cohort\reportbuilder\local\entities\cohort; use core_competency\reportbuilder\local\entities\{competency, framework, usercompetency}; use core_reportbuilder\datasource; use core_reportbuilder\local\entities\user; use core_reportbuilder\local\filters\boolean_select; +use core_reportbuilder\local\helpers\database; /** * Competencies datasource @@ -88,8 +90,33 @@ class competencies extends datasource { ->add_join("LEFT JOIN {user} {$useralias} ON {$useralias}.id = {$usercompetencyalias}.userid") ); + // Join cohort entity. + $cohortentity = new cohort(); + $cohortalias = $cohortentity->get_table_alias('cohort'); + $cohortmemberalias = database::generate_alias(); + $this->add_entity($cohortentity + ->add_joins($userentity->get_joins()) + ->add_joins([ + "LEFT JOIN {cohort_members} {$cohortmemberalias} ON {$cohortmemberalias}.userid = {$useralias}.id", + "LEFT JOIN {cohort} {$cohortalias} ON {$cohortalias}.id = {$cohortmemberalias}.cohortid", + ]) + ); + // Add report elements from each of the entities we added to the report. - $this->add_all_from_entities(); + $this->add_all_from_entities([ + $contextentity->get_entity_name(), + $frameworkentity->get_entity_name(), + $competencyentity->get_entity_name(), + $usercompetencyentity->get_entity_name(), + $userentity->get_entity_name(), + ]); + + $this->add_all_from_entity( + $cohortentity->get_entity_name(), + ['name', 'idnumber', 'description', 'customfield*'], + ['cohortselect', 'name', 'idnumber', 'customfield*'], + ['cohortselect', 'name', 'idnumber', 'customfield*'], + ); } /** diff --git a/competency/tests/reportbuilder/datasource/competencies_test.php b/competency/tests/reportbuilder/datasource/competencies_test.php index fc1a01d9a19..26738f5853b 100644 --- a/competency/tests/reportbuilder/datasource/competencies_test.php +++ b/competency/tests/reportbuilder/datasource/competencies_test.php @@ -90,6 +90,9 @@ final class competencies_test extends core_reportbuilder_testcase { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); + $cohort = $this->getDataGenerator()->create_cohort(['name' => 'My cohort']); + cohort_add_member($cohort->id, $user->id); + $scale = $this->getDataGenerator()->create_scale(['name' => 'My scale', 'scale' => 'A,B,C,D']); /** @var core_competency_generator $generator */ @@ -125,6 +128,9 @@ final class competencies_test extends core_reportbuilder_testcase { $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'usercompetency:status']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'usercompetency:rating']); + // Cohort. + $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'cohort:name']); + $content = $this->get_custom_report_content($report->get('id')); $this->assertCount(1, $content); @@ -140,6 +146,7 @@ final class competencies_test extends core_reportbuilder_testcase { $competencytimemodified, $usercompetencystatus, $usercompetencyrating, + $cohortname, ] = array_values($content[0]); $this->assertEquals('So cool', $frameworkdescription); @@ -153,6 +160,7 @@ final class competencies_test extends core_reportbuilder_testcase { $this->assertNotEmpty($competencytimemodified); $this->assertEquals('Idle', $usercompetencystatus); $this->assertEquals('C', $usercompetencyrating); + $this->assertEquals('My cohort', $cohortname); } /** @@ -269,6 +277,16 @@ final class competencies_test extends core_reportbuilder_testcase { 'user:username_operator' => text::IS_NOT_EQUAL_TO, 'user:username_value' => 'testuser', ], false], + + // Cohort. + 'Cohort name' => ['cohort:name', [ + 'cohort:name_operator' => text::IS_EQUAL_TO, + 'cohort:name_value' => 'My cohort', + ], true], + 'Cohort name (no match)' => ['cohort:name', [ + 'cohort:name_operator' => text::IS_EQUAL_TO, + 'cohort:name_value' => 'Another cohort', + ], false], ]; } @@ -289,7 +307,10 @@ final class competencies_test extends core_reportbuilder_testcase { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(['username' => 'testuser']); - $scale = $this->getDataGenerator()->create_scale(['name' => 'My scale', 'scale' => 'A,B,C,D']); + $cohort = $this->getDataGenerator()->create_cohort(['name' => 'My cohort']); + cohort_add_member($cohort->id, $user->id); + + $scale = $this->getDataGenerator()->create_scale([]); /** @var core_competency_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('core_competency');