mirror of
https://github.com/moodle/moodle.git
synced 2025-04-27 11:23:06 +02:00
MDL-80245 reportbuilder: define custom report tags area.
This commit is contained in:
parent
b2fa19f45d
commit
a1f064339d
@ -263,6 +263,7 @@ $string['sorting'] = 'Sorting';
|
||||
$string['sorting_help'] = 'You can set the initial sort order of columns in the report, which can then be changed by users by clicking on column names.';
|
||||
$string['switchedit'] = 'Switch to edit mode';
|
||||
$string['switchpreview'] = 'Switch to preview mode';
|
||||
$string['tagarea_reportbuilder_report'] = 'Custom reports';
|
||||
$string['tasksendschedule'] = 'Send report schedule';
|
||||
$string['tasksendschedules'] = 'Send report schedules';
|
||||
$string['timeadded'] = 'Time added';
|
||||
|
@ -93,4 +93,10 @@ $tagareas = [
|
||||
'callback' => 'badge_get_tagged_badges',
|
||||
'callbackfile' => '/badges/lib.php',
|
||||
],
|
||||
[
|
||||
'itemtype' => 'reportbuilder_report',
|
||||
'component' => 'core_reportbuilder',
|
||||
'callback' => 'core_reportbuilder_get_tagged_reports',
|
||||
'callbackfile' => '/reportbuilder/lib.php',
|
||||
],
|
||||
];
|
||||
|
@ -26,6 +26,7 @@ use core_reportbuilder\manager;
|
||||
use core_reportbuilder\local\models\column;
|
||||
use core_reportbuilder\local\models\filter;
|
||||
use core_reportbuilder\local\models\report as report_model;
|
||||
use core_tag_tag;
|
||||
|
||||
/**
|
||||
* Helper class for manipulating custom reports and their elements (columns, filters, conditions, etc)
|
||||
@ -48,19 +49,24 @@ class report {
|
||||
$data->name = trim($data->name);
|
||||
$data->type = datasource::TYPE_CUSTOM_REPORT;
|
||||
|
||||
$reportpersistent = manager::create_report_persistent($data);
|
||||
// Create report persistent.
|
||||
$report = manager::create_report_persistent($data);
|
||||
|
||||
// Add datasource default columns, filters and conditions to the report.
|
||||
if ($default) {
|
||||
$source = $reportpersistent->get('source');
|
||||
$source = $report->get('source');
|
||||
/** @var datasource $datasource */
|
||||
$datasource = new $source($reportpersistent, []);
|
||||
$datasource = new $source($report);
|
||||
$datasource->add_default_columns();
|
||||
$datasource->add_default_filters();
|
||||
$datasource->add_default_conditions();
|
||||
}
|
||||
|
||||
return $reportpersistent;
|
||||
// Report tags.
|
||||
core_tag_tag::set_item_tags('core_reportbuilder', 'reportbuilder_report', $report->get('id'),
|
||||
$report->get_context(), $data->tags);
|
||||
|
||||
return $report;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -80,6 +86,10 @@ class report {
|
||||
'uniquerows' => $data->uniquerows,
|
||||
])->update();
|
||||
|
||||
// Report tags.
|
||||
core_tag_tag::set_item_tags('core_reportbuilder', 'reportbuilder_report', $report->get('id'),
|
||||
$report->get_context(), $data->tags);
|
||||
|
||||
return $report;
|
||||
}
|
||||
|
||||
@ -96,6 +106,9 @@ class report {
|
||||
throw new invalid_parameter_exception('Invalid report');
|
||||
}
|
||||
|
||||
// Report tags.
|
||||
core_tag_tag::remove_all_item_tags('core_reportbuilder', 'reportbuilder_report', $report->get('id'));
|
||||
|
||||
return $report->delete();
|
||||
}
|
||||
|
||||
|
@ -51,6 +51,12 @@ class core_reportbuilder_generator extends component_generator_base {
|
||||
throw new coding_exception('Record must contain \'source\' property');
|
||||
}
|
||||
|
||||
// Report tags.
|
||||
$tags = $record['tags'] ?? '';
|
||||
if (!is_array($tags)) {
|
||||
$record['tags'] = preg_split('/\s*,\s*/', $tags, -1, PREG_SPLIT_NO_EMPTY);
|
||||
}
|
||||
|
||||
// Include default setup unless specifically disabled in passed record.
|
||||
$default = (bool) ($record['default'] ?? true);
|
||||
|
||||
|
@ -21,6 +21,7 @@ namespace core_reportbuilder;
|
||||
use advanced_testcase;
|
||||
use core_reportbuilder_generator;
|
||||
use core_reportbuilder\local\models\{audience, column, filter, report, schedule};
|
||||
use core_tag_tag;
|
||||
use core_user\reportbuilder\datasource\users;
|
||||
|
||||
/**
|
||||
@ -44,9 +45,11 @@ class generator_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']]);
|
||||
|
||||
$this->assertTrue(report::record_exists($report->get('id')));
|
||||
$this->assertEqualsCanonicalizing(['cat', 'dog'],
|
||||
core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $report->get('id')));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -21,8 +21,10 @@ namespace core_reportbuilder\local\helpers;
|
||||
use advanced_testcase;
|
||||
use core_reportbuilder_generator;
|
||||
use invalid_parameter_exception;
|
||||
use core_reportbuilder\datasource;
|
||||
use core_reportbuilder\local\models\column;
|
||||
use core_reportbuilder\local\models\filter;
|
||||
use core_tag_tag;
|
||||
use core_user\reportbuilder\datasource\users;
|
||||
|
||||
/**
|
||||
@ -35,6 +37,49 @@ use core_user\reportbuilder\datasource\users;
|
||||
*/
|
||||
class report_test extends advanced_testcase {
|
||||
|
||||
/**
|
||||
* Test creation report
|
||||
*/
|
||||
public function test_create_report(): void {
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$report = report::create_report((object) [
|
||||
'name' => 'My report',
|
||||
'source' => users::class,
|
||||
'tags' => ['cat', 'dog'],
|
||||
]);
|
||||
|
||||
$this->assertEquals('My report', $report->get('name'));
|
||||
$this->assertEquals(datasource::TYPE_CUSTOM_REPORT, $report->get('type'));
|
||||
$this->assertEqualsCanonicalizing(['cat', 'dog'],
|
||||
core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $report->get('id')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test updating report
|
||||
*/
|
||||
public function test_update_report(): void {
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
/** @var core_reportbuilder_generator $generator */
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
||||
$report = $generator->create_report(['name' => 'My report', 'source' => users::class, 'uniquerows' => 0]);
|
||||
|
||||
$reportupdated = report::update_report((object) [
|
||||
'id' => $report->get('id'),
|
||||
'name' => 'My renamed report',
|
||||
'uniquerows' => 1,
|
||||
'tags' => ['cat', 'dog'],
|
||||
]);
|
||||
|
||||
$this->assertEquals('My renamed report', $reportupdated->get('name'));
|
||||
$this->assertTrue($reportupdated->get('uniquerows'));
|
||||
$this->assertEqualsCanonicalizing(['cat', 'dog'],
|
||||
core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $reportupdated->get('id')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test deleting report
|
||||
*/
|
||||
@ -46,7 +91,8 @@ class report_test extends advanced_testcase {
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
||||
|
||||
// Create Report1 and add some elements.
|
||||
$report1 = $generator->create_report(['name' => 'My report 1', 'source' => users::class, 'default' => false]);
|
||||
$report1 = $generator->create_report(['name' => 'My report 1', 'source' => users::class, 'default' => false,
|
||||
'tags' => ['cat', 'dog']]);
|
||||
$column1 = $generator->create_column(['reportid' => $report1->get('id'), 'uniqueidentifier' => 'user:email']);
|
||||
$filter1 = $generator->create_filter(['reportid' => $report1->get('id'), 'uniqueidentifier' => 'user:email']);
|
||||
$condition1 = $generator->create_condition(['reportid' => $report1->get('id'), 'uniqueidentifier' => 'user:email']);
|
||||
@ -58,13 +104,15 @@ class report_test extends advanced_testcase {
|
||||
$condition2 = $generator->create_condition(['reportid' => $report2->get('id'), 'uniqueidentifier' => 'user:email']);
|
||||
|
||||
// Delete Report1.
|
||||
report::delete_report($report1->get('id'));
|
||||
$result = report::delete_report($report1->get('id'));
|
||||
$this->assertTrue($result);
|
||||
|
||||
// Make sure Report1, and all it's elements are deleted.
|
||||
$this->assertFalse($report1::record_exists($report1->get('id')));
|
||||
$this->assertFalse($column1::record_exists($column1->get('id')));
|
||||
$this->assertFalse($filter1::record_exists($filter1->get('id')));
|
||||
$this->assertFalse($condition1::record_exists($condition1->get('id')));
|
||||
$this->assertEmpty(core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $report1->get('id')));
|
||||
|
||||
// Make sure Report2, and all it's elements still exist.
|
||||
$this->assertTrue($report2::record_exists($report2->get('id')));
|
||||
|
@ -15,6 +15,8 @@ Information provided here is intended especially for developers.
|
||||
* The base datasource `add_all_from_entity` method accepts additional parameters to limit which columns, filters and conditions
|
||||
are added. The `add_[columns|filters|conditions]_from_entity` class methods also now support wildcard matching in both `$include`
|
||||
and `$exclude` parameters
|
||||
* Custom reports now implement the tag API, with options for specifying in the `report::[create|update]_report` helper methods
|
||||
as well as in the `create_report` test generator method
|
||||
* New report filter types:
|
||||
- `filesize` for reports containing filesize data
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$version = 2024030500.00; // YYYYMMDD = weekly release date of this DEV branch.
|
||||
$version = 2024030600.00; // YYYYMMDD = weekly release date of this DEV branch.
|
||||
// RR = release increments - 00 in DEV branches.
|
||||
// .XX = incremental changes.
|
||||
$release = '4.4dev+ (Build: 20240305)'; // Human-friendly version name
|
||||
|
Loading…
x
Reference in New Issue
Block a user