Source of file PagesWithoutReviewScheduleReport.php
Size: 4,976 Bytes - Last Modified: 2021-12-23T10:29:07+00:00
/var/www/docs.ssmods.com/process/src/src/Reports/PagesWithoutReviewScheduleReport.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 | <?php namespace SilverStripe\ContentReview\Reports; use SilverStripe\CMS\Controllers\CMSPageEditController; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\CMS\Model\VirtualPage; use SilverStripe\ContentReview\Compatibility\ContentReviewCompatability; use SilverStripe\Core\ClassInfo; use SilverStripe\Forms\CheckboxField; use SilverStripe\Forms\FieldList; use SilverStripe\ORM\ArrayList; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\SS_List; use SilverStripe\Reports\Report; use SilverStripe\SiteConfig\SiteConfig; use SilverStripe\Versioned\Versioned; /** * Show all pages that need to be reviewed. */ class PagesWithoutReviewScheduleReport extends Report { /** * @return string */ public function title() { return _t(__CLASS__ . ".TITLE", "Pages without a scheduled review."); } /** * @return FieldList */ public function parameterFields() { $params = FieldList::create(); $params->push(CheckboxField::create("ShowVirtualPages", "Show Virtual Pages")); return $params; } /** * @return array */ public function columns() { $linkBase = singleton(CMSPageEditController::class)->Link("show"); $linkPath = parse_url($linkBase, PHP_URL_PATH); $linkQuery = parse_url($linkBase, PHP_URL_QUERY); $fields = [ "Title" => [ "title" => "Page name", "formatting" => "<a href='{$linkPath}/\$ID?{$linkQuery}' title='Edit page'>\$value</a>", ], "NextReviewDate" => [ "title" => "Review Date", "casting" => "Date->Full", ], "OwnerNames" => [ "title" => "Owner", ], "LastEditedByName" => "Last edited by", "AbsoluteLink" => [ "title" => "URL", "formatting" => function ($value, $item) { $liveLink = $item->AbsoluteLiveLink; $stageLink = $item->AbsoluteLink(); return sprintf( "%s <a href='%s'>%s</a>", $stageLink, $liveLink ? $liveLink : $stageLink . "?stage=Stage", $liveLink ? "(live)" : "(draft)" ); }, ], "ContentReviewType" => [ "title" => "Settings are", "formatting" => function ($value, $item) use ($linkPath, $linkQuery) { if ($item->ContentReviewType == "Inherit") { $options = $item->getOptions(); if ($options && $options instanceof SiteConfig) { return "Inherited from <a href='admin/settings'>Settings</a>"; } elseif ($options) { return sprintf( "Inherited from <a href='%s/%d?%s'>%s</a>", $linkPath, $options->ID, $linkQuery, $options->Title ); } } return $value; }, ], ]; return $fields; } /** * @param array $params * * @return SS_List */ public function sourceRecords($params = []) { Versioned::set_stage(Versioned::DRAFT); $records = SiteTree::get(); $compatibility = ContentReviewCompatability::start(); // If there's no review dates set, default to all pages due for review now. // Show virtual pages? if (empty($params["ShowVirtualPages"])) { $virtualPageClasses = ClassInfo::subclassesFor(VirtualPage::class); $records = $records->where(sprintf( "\"SiteTree\".\"ClassName\" NOT IN ('%s')", implode("','", array_values($virtualPageClasses)) )); } $records->sort("ParentID"); $records = $records->toArray(); // Trim out calculated values $list = ArrayList::create(); foreach ($records as $record) { if (!$this->hasReviewSchedule($record)) { $list->push($record); } } ContentReviewCompatability::done($compatibility); return $list; } /** * @param DataObject $record * * @return bool */ protected function hasReviewSchedule(DataObject $record) { if (!$record->obj("NextReviewDate")->exists()) { return false; } $options = $record->getOptions(); if ($options && $options->OwnerGroups()->count() == 0 && $options->OwnerUsers()->count() == 0) { return false; } return true; } } |