diff --git a/reportbuilder/classes/external/custom_report_exporter.php b/reportbuilder/classes/external/custom_report_exporter.php index 8fb9026f1a0..635f32e5087 100644 --- a/reportbuilder/classes/external/custom_report_exporter.php +++ b/reportbuilder/classes/external/custom_report_exporter.php @@ -30,6 +30,7 @@ use core_reportbuilder\table\custom_report_table_filterset; use core_reportbuilder\table\custom_report_table_view; use core_reportbuilder\table\custom_report_table_view_filterset; use core_reportbuilder\local\helpers\report as report_helper; +use core_table\local\filter\integer_filter; /** * Custom report exporter class @@ -78,6 +79,7 @@ class custom_report_exporter extends persistent_exporter { */ protected static function define_related(): array { return [ + 'pagesize' => 'int?', ]; } @@ -119,8 +121,12 @@ class custom_report_exporter extends persistent_exporter { $table = custom_report_table::create($this->persistent->get('id')); $table->set_filterset(new custom_report_table_filterset()); } else { + // We store the pagesize within the table filterset so that it's available between AJAX requests. + $filterset = new custom_report_table_view_filterset(); + $filterset->add_filter(new integer_filter('pagesize', null, [$this->related['pagesize']])); + $table = custom_report_table_view::create($this->persistent->get('id'), $this->download); - $table->set_filterset(new custom_report_table_view_filterset()); + $table->set_filterset($filterset); // Generate filters form if report contains any filters. $source = $this->persistent->get('source'); diff --git a/reportbuilder/classes/output/custom_report.php b/reportbuilder/classes/output/custom_report.php index f907ff824fb..0e4cdfb3e56 100644 --- a/reportbuilder/classes/output/custom_report.php +++ b/reportbuilder/classes/output/custom_report.php @@ -18,6 +18,7 @@ declare(strict_types=1); namespace core_reportbuilder\output; +use core_reportbuilder\manager; use core_reportbuilder\external\custom_report_exporter; use core_reportbuilder\local\models\report; use renderable; @@ -63,7 +64,11 @@ class custom_report implements renderable, templatable { * @return stdClass */ public function export_for_template(renderer_base $output): stdClass { - $exporter = new custom_report_exporter($this->persistent, [], $this->editmode, $this->download); + $report = manager::get_report_from_persistent($this->persistent); + + $exporter = new custom_report_exporter($this->persistent, [ + 'pagesize' => $report->get_default_per_page(), + ], $this->editmode, $this->download); return $exporter->export($output); } diff --git a/reportbuilder/classes/table/custom_report_table_view.php b/reportbuilder/classes/table/custom_report_table_view.php index c257298e59d..2ed750d51c8 100644 --- a/reportbuilder/classes/table/custom_report_table_view.php +++ b/reportbuilder/classes/table/custom_report_table_view.php @@ -44,6 +44,17 @@ class custom_report_table_view extends custom_report_table { base_report_table::print_headers(); } + /** + * Override base implementation, return pagesize as defined in table filterset + * + * @return int + */ + public function get_default_per_page(): int { + $filterset = $this->get_filterset(); + + return $filterset->get_filter('pagesize')->current(); + } + /** * Get the html for the download buttons * diff --git a/reportbuilder/classes/table/custom_report_table_view_filterset.php b/reportbuilder/classes/table/custom_report_table_view_filterset.php index 45216863f84..2b34585e795 100644 --- a/reportbuilder/classes/table/custom_report_table_view_filterset.php +++ b/reportbuilder/classes/table/custom_report_table_view_filterset.php @@ -18,6 +18,9 @@ declare(strict_types=1); namespace core_reportbuilder\table; +use core_table\local\filter\filterset; +use core_table\local\filter\integer_filter; + /** * Custom report dynamic table filterset class * @@ -25,5 +28,16 @@ namespace core_reportbuilder\table; * @copyright 2021 Paul Holden * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class custom_report_table_view_filterset extends custom_report_table_filterset { +class custom_report_table_view_filterset extends filterset { + + /** + * Get the required filters + * + * @return array. + */ + public function get_required_filters(): array { + return [ + 'pagesize' => integer_filter::class, + ]; + } }