From fc6caa2011ec663710731cc71f0edbb2def43994 Mon Sep 17 00:00:00 2001 From: David Craig Date: Thu, 12 Nov 2015 16:00:34 +1300 Subject: [PATCH] Add report filter for only the pages a user is assigned to --- .../ContentReviewDefaultSettings.php | 5 +--- code/reports/PagesDueForReviewReport.php | 26 ++++++++++++++++--- readme.md | 2 +- tests/ContentReviewReportTest.php | 8 +++--- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/code/extensions/ContentReviewDefaultSettings.php b/code/extensions/ContentReviewDefaultSettings.php index 49a1351..1631b5a 100644 --- a/code/extensions/ContentReviewDefaultSettings.php +++ b/code/extensions/ContentReviewDefaultSettings.php @@ -112,10 +112,7 @@ class ContentReviewDefaultSettings extends DataExtension * * @return ArrayList */ - public function ContentReviewOwners() - { - return new ArrayList(); - + public function ContentReviewOwners() { return SiteTreeContentReview::merge_owners($this->OwnerGroups(), $this->OwnerUsers()); } } diff --git a/code/reports/PagesDueForReviewReport.php b/code/reports/PagesDueForReviewReport.php index 5e0baf0..27dd42a 100644 --- a/code/reports/PagesDueForReviewReport.php +++ b/code/reports/PagesDueForReviewReport.php @@ -23,16 +23,18 @@ class PagesDueForReviewReport extends SS_Report $filtersList = new FieldList(); $filtersList->push( - DateField::create("ReviewDateAfter", "Review date after or on") + DateField::create("ReviewDateAfter", _t("PagesDueForReviewReport.REVIEWDATEAFTER", "Review date after or on")) ->setConfig("showcalendar", true) ); $filtersList->push( - DateField::create("ReviewDateBefore", "Review date before or on", date("d/m/Y", strtotime("midnight"))) + DateField::create("ReviewDateBefore", _t("PagesDueForReviewReport.REVIEWDATEBEFORE", "Review date before or on"), date("d/m/Y", strtotime("midnight"))) ->setConfig("showcalendar", true) ); - $filtersList->push(new CheckboxField("ShowVirtualPages", "Show Virtual Pages")); + $filtersList->push(new CheckboxField("ShowVirtualPages", _t("PagesDueForReviewReport.SHOWVIRTUALPAGES", "Show Virtual Pages"))); + + $filtersList->push(new CheckboxField("OnlyMyPages", _t("PagesDueForReviewReport.ONLYMYPAGES", "Only Show pages assigned to me"))); return $filtersList; } @@ -159,7 +161,23 @@ class PagesDueForReviewReport extends SS_Report $records = $records->filter("OwnerNames:PartialMatch", $ownerNames); } - $records = new ArrayList($records->sort("NextReviewDate", "DESC")->toArray()); + // Only show pages assigned to the current user? + // This come last because it transforms $records to an ArrayList. + if (!empty($params["OnlyMyPages"])) { + $currentUser = Member::currentUser(); + + $records = $records->filterByCallback(function($page) use ($currentUser) { + $options = $page->getOptions(); + + foreach ($options->ContentReviewOwners() as $owner) { + if ($currentUser->ID == $owner->ID) { + return true; + } + } + + return false; + }); + } ContentReviewCompatability::done($compatibility); diff --git a/readme.md b/readme.md index 4c1f3c8..69d715b 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ You'll also need to run `dev/build`. ## Documentation -See the [docs/en](docs/en/introduction.md) folder. +See the [docs/en](docs/en/index.md) folder. ## Versioning diff --git a/tests/ContentReviewReportTest.php b/tests/ContentReviewReportTest.php index bf5d6fa..488cc66 100644 --- a/tests/ContentReviewReportTest.php +++ b/tests/ContentReviewReportTest.php @@ -37,11 +37,11 @@ class ContentReviewReportTest extends FunctionalTest )); $this->assertEquals(array( - "Contact Us", "Contact Us Child", - "Staff", - "About Us", "Home", + "About Us", + "Staff", + "Contact Us", ), $results->column("Title")); SS_Datetime::set_mock_now("2010-02-13 00:00:00"); @@ -49,8 +49,8 @@ class ContentReviewReportTest extends FunctionalTest $results = $report->sourceRecords(array()); $this->assertEquals(array( - "About Us", "Home", + "About Us", ), $results->column("Title")); SS_Datetime::clear_mock_now();