2010-02-17 00:22:49 +01:00
|
|
|
<?php
|
2010-05-24 07:12:43 +02:00
|
|
|
require_once 'Zend/Date.php';
|
2010-02-17 00:22:49 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Show all pages that need to be reviewed
|
|
|
|
*
|
|
|
|
* @package contentreview
|
|
|
|
*/
|
|
|
|
class PagesDueForReviewReport extends SS_Report {
|
2014-02-13 02:07:39 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function title() {
|
2010-02-17 00:22:49 +01:00
|
|
|
return _t('PagesDueForReviewReport.TITLE', 'Pages due for review');
|
|
|
|
}
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2014-02-13 02:07:39 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return \FieldList
|
|
|
|
*/
|
|
|
|
public function parameterFields() {
|
2014-02-25 08:36:26 +01:00
|
|
|
$filtersList = new FieldList();
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2014-02-25 08:36:26 +01:00
|
|
|
$filtersList->push(
|
2012-07-10 18:36:05 +02:00
|
|
|
DateField::create('ReviewDateAfter', 'Review date after or on')
|
|
|
|
->setConfig('showcalendar', true)
|
|
|
|
);
|
2014-02-25 08:36:26 +01:00
|
|
|
$filtersList->push(
|
2012-07-10 18:36:05 +02:00
|
|
|
DateField::create('ReviewDateBefore', 'Review date before or on', date('d/m/Y', strtotime('midnight')))
|
2014-02-25 06:23:18 +01:00
|
|
|
->setConfig('showcalendar', true)
|
2012-07-10 18:36:05 +02:00
|
|
|
);
|
2010-02-17 00:22:49 +01:00
|
|
|
|
2014-02-25 08:36:26 +01:00
|
|
|
$filtersList->push(new CheckboxField('ShowVirtualPages', 'Show Virtual Pages'));
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2014-02-25 08:36:26 +01:00
|
|
|
return $filtersList;
|
2010-02-17 00:22:49 +01:00
|
|
|
}
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2014-02-13 02:07:39 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function columns() {
|
2014-02-25 06:23:18 +01:00
|
|
|
|
2012-07-10 18:36:05 +02:00
|
|
|
$linkBase = singleton('CMSPageEditController')->Link('show') . '/';
|
2014-02-25 06:23:18 +01:00
|
|
|
|
2010-02-17 00:22:49 +01:00
|
|
|
$fields = array(
|
|
|
|
'Title' => array(
|
|
|
|
'title' => 'Page name',
|
2012-07-10 18:36:05 +02:00
|
|
|
'formatting' => '<a href=\"' . $linkBase . '/$ID\" title=\"Edit page\">$value</a>'
|
2010-02-17 00:22:49 +01:00
|
|
|
),
|
|
|
|
'NextReviewDate' => array(
|
|
|
|
'title' => 'Review Date',
|
2014-02-24 01:38:16 +01:00
|
|
|
'casting' => 'Date->Full',
|
|
|
|
'formatting' => function($value, $item) {
|
|
|
|
if($item->ContentReviewType == 'Disabled') {
|
|
|
|
return 'disabled';
|
|
|
|
}
|
|
|
|
if($item->ContentReviewType == 'Inherit') {
|
2014-02-25 06:23:18 +01:00
|
|
|
$setting = $item->getOptions();
|
2014-02-24 01:38:16 +01:00
|
|
|
if(!$setting) {
|
|
|
|
return 'disabled';
|
|
|
|
}
|
2014-02-25 06:23:18 +01:00
|
|
|
return $item->obj('NextReviewDate')->Full();
|
2014-02-24 01:38:16 +01:00
|
|
|
}
|
|
|
|
return $value;
|
|
|
|
}
|
2010-02-17 00:22:49 +01:00
|
|
|
),
|
|
|
|
'OwnerNames' => array(
|
2014-02-25 08:36:26 +01:00
|
|
|
'title' => 'Owner'
|
2010-02-17 00:22:49 +01:00
|
|
|
),
|
|
|
|
'LastEditedByName' => 'Last edited by',
|
|
|
|
'AbsoluteLink' => array(
|
|
|
|
'title' => 'URL',
|
2012-07-10 18:36:05 +02:00
|
|
|
'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)'
|
|
|
|
);
|
|
|
|
}
|
2014-02-25 06:23:18 +01:00
|
|
|
),
|
|
|
|
'ContentReviewType' => array(
|
|
|
|
'title' => 'Settings are',
|
|
|
|
'formatting' => function($value, $item) use($linkBase) {
|
|
|
|
if($item->ContentReviewType == 'Inherit') {
|
|
|
|
$options = $item->getOptions();
|
|
|
|
if($options && $options instanceof SiteConfig) {
|
|
|
|
return 'Inherited from <a href="admin/settings">Settings</a>';
|
|
|
|
} elseif($options) {
|
|
|
|
return 'Inherited from <a href="'.$linkBase.$options->ID.'">'.$options->Title.'</a>';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $value;
|
|
|
|
}
|
|
|
|
),
|
2010-02-17 00:22:49 +01:00
|
|
|
);
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2010-02-17 00:22:49 +01:00
|
|
|
return $fields;
|
|
|
|
}
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2014-02-13 02:07:39 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param array $params
|
|
|
|
* @param string $sort
|
|
|
|
* @param array $limit
|
|
|
|
* @return DataList
|
|
|
|
*/
|
|
|
|
public function sourceRecords($params, $sort, $limit) {
|
2014-02-25 08:36:26 +01:00
|
|
|
Versioned::reading_stage('Stage');
|
2012-07-10 18:36:05 +02:00
|
|
|
$records = SiteTree::get();
|
|
|
|
|
2010-02-17 00:22:49 +01:00
|
|
|
if(empty($params['ReviewDateBefore']) && empty($params['ReviewDateAfter'])) {
|
|
|
|
// If there's no review dates set, default to all pages due for review now
|
2012-07-10 18:36:05 +02:00
|
|
|
$reviewDate = new Zend_Date(SS_Datetime::now()->Format('U'));
|
2010-05-24 07:12:43 +02:00
|
|
|
$reviewDate->add(1, Zend_Date::DAY);
|
2014-02-24 09:10:10 +01:00
|
|
|
$records = $records->where(sprintf('"NextReviewDate" < \'%s\'', $reviewDate->toString('YYYY-MM-dd')));
|
2010-02-17 00:22:49 +01:00
|
|
|
} else {
|
|
|
|
// Review date before
|
|
|
|
if(!empty($params['ReviewDateBefore'])) {
|
2012-07-10 18:36:05 +02:00
|
|
|
// TODO Get value from DateField->dataValue() once we have access to form elements here
|
|
|
|
$reviewDate = new Zend_Date($params['ReviewDateBefore'], i18n::get_date_format());
|
2010-05-24 07:12:43 +02:00
|
|
|
$reviewDate->add(1, Zend_Date::DAY);
|
2013-09-25 14:35:38 +02:00
|
|
|
$records = $records->where(sprintf('"NextReviewDate" < \'%s\'', $reviewDate->toString('YYYY-MM-dd')));
|
2010-02-17 00:22:49 +01:00
|
|
|
}
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2010-02-17 00:22:49 +01:00
|
|
|
// Review date after
|
|
|
|
if(!empty($params['ReviewDateAfter'])) {
|
2012-07-10 18:36:05 +02:00
|
|
|
// TODO Get value from DateField->dataValue() once we have access to form elements here
|
|
|
|
$reviewDate = new Zend_Date($params['ReviewDateAfter'], i18n::get_date_format());
|
2013-09-25 14:35:38 +02:00
|
|
|
$records = $records->where(sprintf('"NextReviewDate" >= \'%s\'', $reviewDate->toString('YYYY-MM-dd')));
|
2010-02-17 00:22:49 +01:00
|
|
|
}
|
|
|
|
}
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2010-02-17 00:22:49 +01:00
|
|
|
// Show virtual pages?
|
|
|
|
if(empty($params['ShowVirtualPages'])) {
|
2011-09-12 14:02:36 +02:00
|
|
|
$virtualPageClasses = ClassInfo::subclassesFor('VirtualPage');
|
2013-09-25 14:35:38 +02:00
|
|
|
$records = $records->where(sprintf(
|
2011-09-12 14:02:36 +02:00
|
|
|
'"SiteTree"."ClassName" NOT IN (\'%s\')',
|
|
|
|
implode("','", array_values($virtualPageClasses))
|
2012-07-10 18:36:05 +02:00
|
|
|
));
|
2010-02-17 00:22:49 +01:00
|
|
|
}
|
2010-07-20 05:51:15 +02:00
|
|
|
|
2010-02-17 00:22:49 +01:00
|
|
|
// Owner dropdown
|
2014-02-25 08:36:26 +01:00
|
|
|
if(!empty($params['ContentReviewOwner'])) {
|
|
|
|
$ownerNames = Convert::raw2sql($params['ContentReviewOwner']);
|
|
|
|
$records = $records->filter('OwnerNames:PartialMatch', $ownerNames);
|
2010-02-17 00:22:49 +01:00
|
|
|
}
|
2014-02-25 08:36:26 +01:00
|
|
|
|
2014-02-25 06:23:18 +01:00
|
|
|
return $records->sort('NextReviewDate', 'DESC');
|
2010-02-17 00:22:49 +01:00
|
|
|
}
|
2011-09-12 14:02:10 +02:00
|
|
|
}
|