This commit is contained in:
Ilya Tregubov 2024-05-09 10:54:40 +08:00
commit 7c535198ea
5 changed files with 35 additions and 6 deletions

View File

@ -24,6 +24,7 @@ use core\external\persistent_exporter;
use core_reportbuilder\datasource;
use core_reportbuilder\manager;
use core_reportbuilder\local\models\report;
use core_tag\external\{tag_item_exporter, util};
use core_user\external\user_summary_exporter;
/**
@ -58,6 +59,10 @@ class custom_report_details_exporter extends persistent_exporter {
'type' => PARAM_RAW,
'null' => NULL_ALLOWED,
],
'tags' => [
'type' => tag_item_exporter::read_properties_definition(),
'multiple' => true,
],
'modifiedby' => ['type' => user_summary_exporter::read_properties_definition()],
];
}
@ -74,6 +79,7 @@ class custom_report_details_exporter extends persistent_exporter {
return [
'sourcename' => manager::report_source_exists($source, datasource::class) ? $source::get_name() : null,
'tags' => util::get_item_tags('core_reportbuilder', 'reportbuilder_report', $this->persistent->get('id')),
'modifiedby' => (new user_summary_exporter($usermodified))->export($output),
];
}

View File

@ -30,7 +30,7 @@ use core_user\reportbuilder\datasource\users;
* @copyright 2022 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class custom_report_details_exporter_test extends advanced_testcase {
final class custom_report_details_exporter_test extends advanced_testcase {
/**
* Test exported data structure
@ -45,7 +45,7 @@ class custom_report_details_exporter_test extends advanced_testcase {
/** @var core_reportbuilder_generator $generator */
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
$report = $generator->create_report(['name' => 'My report', 'source' => users::class]);
$report = $generator->create_report(['name' => 'My report', 'source' => users::class, 'tags' => ['cat', 'dog']]);
$exporter = new custom_report_details_exporter($report);
$export = $exporter->export($PAGE->get_renderer('core_reportbuilder'));
@ -55,8 +55,13 @@ class custom_report_details_exporter_test extends advanced_testcase {
$this->assertEquals($report->get('source'), $export->source);
// Source name should be the name of the source.
$this->assertObjectHasProperty('sourcename', $export);
$this->assertEquals(users::get_name(), $export->sourcename);
// We use the tag exporter for report tags.
$this->assertObjectHasProperty('tags', $export);
$this->assertEquals(['cat', 'dog'], array_column($export->tags, 'name'));
// We use the user exporter for the modifier of the report.
$this->assertObjectHasProperty('modifiedby', $export);
$this->assertEquals(fullname($user), $export->modifiedby->fullname);

View File

@ -39,7 +39,7 @@ require_once("{$CFG->dirroot}/webservice/tests/helpers.php");
* @copyright 2022 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class listing_test extends externallib_advanced_testcase {
final class listing_test extends externallib_advanced_testcase {
/**
* Text execute method
@ -52,7 +52,7 @@ class listing_test extends externallib_advanced_testcase {
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
// Create three reports.
$reportone = $generator->create_report(['name' => 'Report one', 'source' => users::class]);
$reportone = $generator->create_report(['name' => 'Report one', 'source' => users::class, 'tags' => ['cat', 'dog']]);
$reporttwo = $generator->create_report(['name' => 'Report two', 'source' => users::class]);
$reportthree = $generator->create_report(['name' => 'Report three', 'source' => users::class]);
@ -67,7 +67,15 @@ class listing_test extends externallib_advanced_testcase {
$result = listing::execute();
$result = external_api::clean_returnvalue(listing::execute_returns(), $result);
// All data is generated by exporters, just assert relevant sample of each.
$this->assertEquals(['Report one', 'Report two'], array_column($result['reports'], 'name'));
$tagscolumn = array_column($result['reports'], 'tags');
$this->assertEquals([
['cat', 'dog'],
[],
], array_map(fn(array $tags) => array_column($tags, 'name'), $tagscolumn));
$this->assertEmpty($result['warnings']);
}

View File

@ -37,7 +37,7 @@ require_once("{$CFG->dirroot}/webservice/tests/helpers.php");
* @copyright 2022 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class retrieve_test extends externallib_advanced_testcase {
final class retrieve_test extends externallib_advanced_testcase {
/**
* Text execute method
@ -52,7 +52,8 @@ class retrieve_test extends externallib_advanced_testcase {
/** @var core_reportbuilder_generator $generator */
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
$report = $generator->create_report(['name' => 'My report', 'source' => users::class, 'default' => false]);
$report = $generator->create_report(['name' => 'My report', 'source' => users::class, 'default' => false,
'tags' => ['cat', 'dog']]);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:fullname', 'sortenabled' => 1]);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:email']);
@ -63,6 +64,7 @@ class retrieve_test extends externallib_advanced_testcase {
// All data is generated by exporters, just assert relevant sample of each.
$this->assertArrayHasKey('details', $result);
$this->assertEquals('My report', $result['details']['name']);
$this->assertEquals(['cat', 'dog'], array_column($result['details']['tags'], 'name'));
$this->assertArrayHasKey('data', $result);
$this->assertEquals(['Full name', 'Email address'], $result['data']['headers']);
@ -81,8 +83,10 @@ class retrieve_test extends externallib_advanced_testcase {
$result = retrieve::execute($report->get('id'), 1, 2);
$result = external_api::clean_returnvalue(retrieve::execute_returns(), $result);
// All data is generated by exporters, just assert relevant sample of each.
$this->assertArrayHasKey('details', $result);
$this->assertEquals('My report', $result['details']['name']);
$this->assertEquals(['cat', 'dog'], array_column($result['details']['tags'], 'name'));
$this->assertArrayHasKey('data', $result);
$this->assertEquals(['Full name', 'Email address'], $result['data']['headers']);

View File

@ -1,6 +1,12 @@
This file describes API changes in /reportbuilder/*
Information provided here is intended especially for developers.
=== 4.5 ===
* The following external methods now return tags data relevant to each custom report:
- `core_reportbuilder_list_reports`
- `core_reportbuilder_retrieve_report`
=== 4.4 ===
* New methods `get_identity_[columns|filters]` in user entity, for retrieving all user identity field report elements