MDL-75235 reportbuilder: allow default filter form to be disabled.

This allows for custom filter forms to be implemented, rather than
using the default one for system reports.
This commit is contained in:
Paul Holden
2022-07-22 09:17:48 +01:00
parent 4ce642e8ba
commit d16ea57405
4 changed files with 34 additions and 9 deletions
+5 -5
View File
@@ -21,9 +21,9 @@ namespace core_reportbuilder\external;
use core\external\persistent_exporter;
use core_table\local\filter\integer_filter;
use core_table\local\filter\string_filter;
use core_reportbuilder\system_report;
use core_reportbuilder\form\filter;
use core_reportbuilder\local\models\report;
use core_reportbuilder\local\report\base;
use core_reportbuilder\table\system_report_table;
use core_reportbuilder\table\system_report_table_filterset;
use renderer_base;
@@ -53,7 +53,7 @@ class system_report_exporter extends persistent_exporter {
*/
protected static function define_related(): array {
return [
'source' => base::class,
'source' => system_report::class,
'parameters' => 'string',
];
}
@@ -85,7 +85,7 @@ class system_report_exporter extends persistent_exporter {
* @return array
*/
protected function get_other_values(renderer_base $output): array {
/** @var base $source */
/** @var system_report $source */
$source = $this->related['source'];
/** @var string $parameters */
@@ -102,8 +102,8 @@ class system_report_exporter extends persistent_exporter {
$table = system_report_table::create($reportid, (array) json_decode($parameters, true));
$table->set_filterset($filterset);
// Generate filters form if report contains any filters.
$filterspresent = !empty($source->get_active_filters());
// Generate filters form if report uses the default form, and contains any filters.
$filterspresent = $source->get_filter_form_default() && !empty($source->get_active_filters());
if ($filterspresent) {
$filtersform = new filter(null, null, 'post', '', [], true, [
'reportid' => $reportid,
@@ -22,9 +22,9 @@ use renderable;
use renderer_base;
use stdClass;
use templatable;
use core_reportbuilder\system_report as system_report_base;
use core_reportbuilder\external\system_report_exporter;
use core_reportbuilder\local\models\report;
use core_reportbuilder\local\report\base;
/**
* System report output class
@@ -38,7 +38,7 @@ class system_report implements renderable, templatable {
/** @var report $report */
protected $report;
/** @var base $source */
/** @var system_report_base $source */
protected $source;
/** @var array $parameters */
@@ -48,10 +48,10 @@ class system_report implements renderable, templatable {
* Class constructor
*
* @param report $report
* @param base $source
* @param system_report_base $source
* @param array $parameters
*/
public function __construct(report $report, base $source, array $parameters) {
public function __construct(report $report, system_report_base $source, array $parameters) {
$this->report = $report;
$this->source = $source;
$this->parameters = $parameters;
+22
View File
@@ -40,6 +40,9 @@ abstract class system_report extends base {
/** @var string[] $basefields List of base fields */
private $basefields = [];
/** @var bool $filterformdefault Whether to use the default filters form */
private $filterformdefault = true;
/** @var action[] $actions */
private $actions = [];
@@ -119,6 +122,25 @@ abstract class system_report extends base {
return $this->basefields;
}
/**
* Override whether to use the default system report filters form, for instance this can be disabled if the UI requires
* it's own custom filter management form for a specific report
*
* @param bool $filterformdefault
*/
final public function set_filter_form_default(bool $filterformdefault = true): void {
$this->filterformdefault = $filterformdefault;
}
/**
* Whether to use the default filters form
*
* @return bool
*/
final public function get_filter_form_default(): bool {
return $this->filterformdefault;
}
/**
* Adds an action to the report
*
+3
View File
@@ -2,6 +2,9 @@ This file describes API changes in /reportbuilder/*
Information provided here is intended especially for developers.
=== 4.1 ===
* New method `set_filter_form_default` in base system report class, to override whether the default filters form
should be shown for a report
* 'set_default_per_page' and 'get_default_per_page' methods have been added to \local\report\base class
to manage the default displayed rows per page.
* Added two new methods in the datasource class: