diff --git a/reportbuilder/classes/external/system_report_exporter.php b/reportbuilder/classes/external/system_report_exporter.php index a75feacee07..6123a895ae4 100644 --- a/reportbuilder/classes/external/system_report_exporter.php +++ b/reportbuilder/classes/external/system_report_exporter.php @@ -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, diff --git a/reportbuilder/classes/output/system_report.php b/reportbuilder/classes/output/system_report.php index f1468a14e4a..be87f1255d0 100644 --- a/reportbuilder/classes/output/system_report.php +++ b/reportbuilder/classes/output/system_report.php @@ -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; diff --git a/reportbuilder/classes/system_report.php b/reportbuilder/classes/system_report.php index d8de149c9be..7b61948eabc 100644 --- a/reportbuilder/classes/system_report.php +++ b/reportbuilder/classes/system_report.php @@ -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 * diff --git a/reportbuilder/upgrade.txt b/reportbuilder/upgrade.txt index bde3cd2c67a..8f848d4adf9 100644 --- a/reportbuilder/upgrade.txt +++ b/reportbuilder/upgrade.txt @@ -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: