From 9bdd0845574340aef5019b0e18d06fcd54785d75 Mon Sep 17 00:00:00 2001 From: Guy Sartorelli <36352093+GuySartorelli@users.noreply.github.com> Date: Mon, 7 Mar 2022 12:37:13 +1300 Subject: [PATCH] ENH: Respect sort and limit arguments These parameters are defined in the PHPDocs for `Report` and are technically part of the method signature. They should be respected and in the case of the new default limit in silverstripe/silverstripe-reports#139 this could have performance ramifications for large datasets. --- src/Reports/PagesDueForReviewReport.php | 10 +++++++++- .../PagesWithoutReviewScheduleReport.php | 19 +++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/Reports/PagesDueForReviewReport.php b/src/Reports/PagesDueForReviewReport.php index fc0bd02..20e0e56 100644 --- a/src/Reports/PagesDueForReviewReport.php +++ b/src/Reports/PagesDueForReviewReport.php @@ -151,13 +151,21 @@ public function columns() * * @return SS_List */ - public function sourceRecords($params = []) + public function sourceRecords($params = [], $sort = null, $limit = null) { Versioned::set_stage(Versioned::DRAFT); $records = SiteTree::get(); $compatibility = ContentReviewCompatability::start(); + // Apply sort and limit if appropriate. + if ($sort !== null) { + $records = $records->sort($sort); + } + if ($limit !== null) { + $records = $records->limit($limit); + } + if (empty($params['ReviewDateBefore']) && empty($params['ReviewDateAfter'])) { // If there's no review dates set, default to all pages due for review now $records = $records->where( diff --git a/src/Reports/PagesWithoutReviewScheduleReport.php b/src/Reports/PagesWithoutReviewScheduleReport.php index 0f7b402..b233d58 100644 --- a/src/Reports/PagesWithoutReviewScheduleReport.php +++ b/src/Reports/PagesWithoutReviewScheduleReport.php @@ -107,7 +107,7 @@ public function columns() * * @return SS_List */ - public function sourceRecords($params = []) + public function sourceRecords($params = [], $sort = null, $limit = null) { Versioned::set_stage(Versioned::DRAFT); @@ -125,16 +125,19 @@ public function sourceRecords($params = []) )); } - $records->sort("ParentID"); + if ($sort !== null) { + $sort = 'ParentID'; + } + $records = $records->sort($sort); + if ($limit !== null) { + $records = $records->limit($limit); + } $records = $records->toArray(); // Trim out calculated values - $list = ArrayList::create(); - foreach ($records as $record) { - if (!$this->hasReviewSchedule($record)) { - $list->push($record); - } - } + $list = $records->filterByCallback(function($record) { + return !$this->hasReviewSchedule($record); + }); ContentReviewCompatability::done($compatibility);