push(new CheckboxField('ShowVirtualPages', 'Show Virtual Pages')); return $params; } /** * * @return array */ public function columns() { $linkBase = singleton('CMSPageEditController')->Link('show'); $linkPath = parse_url($linkBase, PHP_URL_PATH); $linkQuery = parse_url($linkBase, PHP_URL_QUERY); $fields = array( 'Title' => array( 'title' => 'Page name', 'formatting' => sprintf('$value', $linkPath, $linkQuery) ), 'NextReviewDate' => array( 'title' => 'Review Date', 'casting' => 'Date->Full' ), 'OwnerNames' => array( 'title' => 'Owner' ), 'LastEditedByName' => 'Last edited by', 'AbsoluteLink' => array( 'title' => 'URL', 'formatting' => function($value, $item) { $liveLink = $item->AbsoluteLiveLink; $stageLink = $item->AbsoluteLink(); return sprintf('%s %s', $stageLink, $liveLink ? $liveLink : $stageLink . '?stage=Stage', $liveLink ? '(live)' : '(draft)' ); } ), 'ContentReviewType' => array( '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 Settings'; } elseif($options) { return sprintf( 'Inherited from %s', $linkPath, $options->ID, $linkQuery, $options->Title ); } } return $value; } ) ); return $fields; } /** * * @param array $params * @param string $sort * @param array $limit * @return SS_List */ public function sourceRecords($params, $sort, $limit) { Versioned::reading_stage('Stage'); $records = SiteTree::get(); // If there's no review dates set, default to all pages due for review now // $records = $records->where('"NextReviewDate" IS NULL OR "OwnerNames" IS NULL OR "OwnerNames" = \'\''); // Show virtual pages? if(empty($params['ShowVirtualPages'])) { $virtualPageClasses = ClassInfo::subclassesFor('VirtualPage'); $records = $records->where(sprintf( '"SiteTree"."ClassName" NOT IN (\'%s\')', implode("','", array_values($virtualPageClasses)) )); } $records->sort('ParentID'); // Make sure we get results from all subsites, because only the main site has the Reports section $subsiteFilterBefore = null; if(class_exists('Subsite')){ $subsiteFilterBefore = Subsite::disable_subsite_filter(true); } $records = $records->toArray(); if(class_exists('Subsite')){ Subsite::disable_subsite_filter($subsiteFilterBefore); } // Trim out calculated values $list = new ArrayList(); foreach($records as $record) { if(!$this->hasReviewSchedule($record)) { $list->push($record); } } return $list; } /** * * @param DataObject $record * @return boolean */ protected function hasReviewSchedule(DataObject $record) { if(!$record->obj('NextReviewDate')->exists()) { return false; } $options = $record->getOptions(); if($options->OwnerGroups()->count() == 0 && $options->OwnerUsers()->count() == 0) { return false; } return true; } }