MDL-75931 reportbuilder: use datasource for custom report exporters.

Make the related data property of the custom report exporters expect
an actual custom report instance, rather than the root base type.
This commit is contained in:
Paul Holden 2022-10-10 17:37:48 +01:00
parent cc4fec275f
commit 045eb42c9d
7 changed files with 21 additions and 23 deletions

View file

@ -18,10 +18,10 @@ declare(strict_types=1);
namespace core_reportbuilder\external; namespace core_reportbuilder\external;
use core_reportbuilder\form\card_view;
use renderer_base; use renderer_base;
use core\external\exporter; use core\external\exporter;
use core_reportbuilder\local\report\base; use core_reportbuilder\datasource;
use core_reportbuilder\form\card_view;
/** /**
* Custom report card view exporter class * Custom report card view exporter class
@ -39,7 +39,7 @@ class custom_report_card_view_exporter extends exporter {
*/ */
protected static function define_related(): array { protected static function define_related(): array {
return [ return [
'report' => base::class, 'report' => datasource::class,
]; ];
} }
@ -66,7 +66,7 @@ class custom_report_card_view_exporter extends exporter {
* @return array * @return array
*/ */
protected function get_other_values(renderer_base $output): array { protected function get_other_values(renderer_base $output): array {
/** @var base $report */ /** @var datasource $report */
$report = $this->related['report']; $report = $this->related['report'];
$reportid = $report->get_report_persistent()->get('id'); $reportid = $report->get_report_persistent()->get('id');

View file

@ -19,7 +19,7 @@ declare(strict_types=1);
namespace core_reportbuilder\external; namespace core_reportbuilder\external;
use renderer_base; use renderer_base;
use core_reportbuilder\local\report\base; use core_reportbuilder\datasource;
/** /**
* Custom report column cards exporter class * Custom report column cards exporter class
@ -37,7 +37,7 @@ class custom_report_column_cards_exporter extends custom_report_menu_cards_expor
*/ */
protected static function define_related(): array { protected static function define_related(): array {
return [ return [
'report' => base::class, 'report' => datasource::class,
]; ];
} }
@ -48,7 +48,7 @@ class custom_report_column_cards_exporter extends custom_report_menu_cards_expor
* @return array * @return array
*/ */
protected function get_other_values(renderer_base $output): array { protected function get_other_values(renderer_base $output): array {
/** @var base $report */ /** @var datasource $report */
$report = $this->related['report']; $report = $this->related['report'];
$menucards = []; $menucards = [];

View file

@ -21,8 +21,8 @@ namespace core_reportbuilder\external;
use pix_icon; use pix_icon;
use renderer_base; use renderer_base;
use core\external\exporter; use core\external\exporter;
use core_reportbuilder\datasource;
use core_reportbuilder\local\models\column; use core_reportbuilder\local\models\column;
use core_reportbuilder\local\report\base;
/** /**
* Custom report columns sorting exporter class * Custom report columns sorting exporter class
@ -40,7 +40,7 @@ class custom_report_columns_sorting_exporter extends exporter {
*/ */
protected static function define_related(): array { protected static function define_related(): array {
return [ return [
'report' => base::class, 'report' => datasource::class,
]; ];
} }
@ -87,7 +87,7 @@ class custom_report_columns_sorting_exporter extends exporter {
* @return array * @return array
*/ */
protected function get_other_values(renderer_base $output): array { protected function get_other_values(renderer_base $output): array {
/** @var base $report */ /** @var datasource $report */
$report = $this->related['report']; $report = $this->related['report'];
$reportid = $report->get_report_persistent()->get('id'); $reportid = $report->get_report_persistent()->get('id');

View file

@ -20,8 +20,8 @@ namespace core_reportbuilder\external;
use renderer_base; use renderer_base;
use core\external\exporter; use core\external\exporter;
use core_reportbuilder\datasource;
use core_reportbuilder\form\condition; use core_reportbuilder\form\condition;
use core_reportbuilder\local\report\base;
use core_reportbuilder\local\models\filter; use core_reportbuilder\local\models\filter;
/** /**
@ -40,7 +40,7 @@ class custom_report_conditions_exporter extends exporter {
*/ */
protected static function define_related(): array { protected static function define_related(): array {
return [ return [
'report' => base::class, 'report' => datasource::class,
]; ];
} }
@ -94,7 +94,7 @@ class custom_report_conditions_exporter extends exporter {
* @return array * @return array
*/ */
protected function get_other_values(renderer_base $output): array { protected function get_other_values(renderer_base $output): array {
/** @var base $report */ /** @var datasource $report */
$report = $this->related['report']; $report = $this->related['report'];
$reportid = $report->get_report_persistent()->get('id'); $reportid = $report->get_report_persistent()->get('id');

View file

@ -125,6 +125,9 @@ class custom_report_exporter extends persistent_exporter {
* @return array * @return array
*/ */
protected function get_other_values(renderer_base $output): array { protected function get_other_values(renderer_base $output): array {
/** @var datasource $report */
$report = manager::get_report_from_persistent($this->persistent);
$filterspresent = false; $filterspresent = false;
$filtersform = ''; $filtersform = '';
@ -140,18 +143,12 @@ class custom_report_exporter extends persistent_exporter {
$table->set_filterset($filterset); $table->set_filterset($filterset);
// Generate filters form if report contains any filters. // Generate filters form if report contains any filters.
$source = $this->persistent->get('source'); $filterspresent = !empty($report->get_active_filters());
/** @var datasource $datasource */
$datasource = new $source($this->persistent);
$filterspresent = !empty($datasource->get_active_filters());
if ($filterspresent) { if ($filterspresent) {
$filtersform = $this->generate_filters_form()->render(); $filtersform = $this->generate_filters_form()->render();
} }
} }
$report = manager::get_report_from_persistent($this->persistent);
// If we are editing we need all this information for the template. // If we are editing we need all this information for the template.
$editordata = []; $editordata = [];
if ($this->editmode) { if ($this->editmode) {

View file

@ -20,7 +20,7 @@ namespace core_reportbuilder\external;
use renderer_base; use renderer_base;
use core\external\exporter; use core\external\exporter;
use core_reportbuilder\local\report\base; use core_reportbuilder\datasource;
use core_reportbuilder\local\models\filter; use core_reportbuilder\local\models\filter;
use core_reportbuilder\output\filter_heading_editable; use core_reportbuilder\output\filter_heading_editable;
@ -40,7 +40,7 @@ class custom_report_filters_exporter extends exporter {
*/ */
protected static function define_related(): array { protected static function define_related(): array {
return [ return [
'report' => base::class, 'report' => datasource::class,
]; ];
} }
@ -98,7 +98,7 @@ class custom_report_filters_exporter extends exporter {
* @return array * @return array
*/ */
protected function get_other_values(renderer_base $output): array { protected function get_other_values(renderer_base $output): array {
/** @var base $report */ /** @var datasource $report */
$report = $this->related['report']; $report = $this->related['report'];
// Current filters added to the report. // Current filters added to the report.

View file

@ -30,6 +30,7 @@ Information provided here is intended especially for developers.
- `core_reportbuilder_columns_*` - `core_reportbuilder_columns_*`
- `core_reportbuilder_conditions_*` - `core_reportbuilder_conditions_*`
- `core_reportbuilder_filters_*` - `core_reportbuilder_filters_*`
* The `custom_report_*` exporters now accept only classes that extend datasource as part of their related data properties
* The following permission methods now accept an optional `$context` parameter (default system context): * The following permission methods now accept an optional `$context` parameter (default system context):
- `[require_]can_view_reports_list` - `[require_]can_view_reports_list`
- `[require_]can_create_report` - `[require_]can_create_report`