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;
}
}