2007-07-19 12:40:05 +02:00
< ? php
2008-02-25 03:10:37 +01:00
/**
* Base class for the small reports that appear in the left hand site of the Site Content section of the CMS .
* Create subclasses of this class to build new reports .
* @ package cms
* @ subpackage content
*/
2007-07-19 12:40:05 +02:00
abstract class SideReport extends Object {
abstract function records ();
abstract function fieldsToShow ();
abstract function title ();
function getHTML () {
$records = $this -> records ();
$fieldsToShow = $this -> fieldsToShow ();
if ( $records ) {
$result = " <ul class= \" $this->class\ " > \n " ;
foreach ( $records as $record ) {
$result .= " <li> \n " ;
2008-02-25 03:10:37 +01:00
foreach ( $fieldsToShow as $fieldTitle => $fieldInfo ) {
if ( isset ( $fieldInfo [ 'source' ])) {
$fieldSource = $fieldInfo [ 'source' ];
// Legacy format for the input data
} else {
$fieldSource = $fieldInfo ;
$fieldInfo = array (
'link' => true ,
'newline' => false ,
);
}
2009-08-04 06:19:38 +02:00
$val = isset ( $fieldInfo [ 'prefix' ]) ? $fieldInfo [ 'prefix' ] : '' ;
2007-07-19 12:40:05 +02:00
$fieldName = ereg_replace ( '[^A-Za-z0-9]+' , '' , $fieldTitle );
if ( is_string ( $fieldSource )) {
2009-08-04 06:19:38 +02:00
$val .= Convert :: raw2xml ( $record -> $fieldSource );
2007-07-19 12:40:05 +02:00
} else {
2009-08-04 06:19:38 +02:00
$val .= $record -> val ( $fieldSource [ 0 ], $fieldSource [ 1 ]);
2007-07-19 12:40:05 +02:00
}
2008-02-25 03:10:37 +01:00
if ( isset ( $fieldInfo [ 'newline' ]) && $fieldInfo [ 'newline' ]) $result .= " <br> " ;
if ( isset ( $fieldInfo [ 'link' ]) && $fieldInfo [ 'link' ]) {
$link = ( $fieldInfo [ 'link' ] === true ) ? " admin/show/ $record->ID " : $fieldInfo [ 'link' ];
$result .= " <a class= \" $fieldName\ " href = \ " $link\ " > $val </ a > " ;
} else {
$result .= " <span class= \" $fieldName\ " > $val </ span > " ;
}
2009-08-04 06:19:38 +02:00
$val .= isset ( $fieldInfo [ 'suffix' ]) ? $fieldInfo [ 'suffix' ] : '' ;
2007-07-19 12:40:05 +02:00
}
$result .= " \n </li> \n " ;
}
$result .= " </ul> \n " ;
} else {
2009-01-05 07:17:59 +01:00
$result = " <p class= \" message notice \" > " .
sprintf (
_t ( 'SideReport.REPEMPTY' , 'The %s report is empty.' , PR_MEDIUM , '%s is a report title' ),
$this -> title ()
)
. " </p> " ;
2007-07-19 12:40:05 +02:00
}
return $result ;
}
}
2008-02-25 03:10:37 +01:00
/**
* Content side - report listing empty pages
* @ package cms
* @ subpackage content
*/
2007-07-19 12:40:05 +02:00
class SideReport_EmptyPages extends SideReport {
function title () {
2007-09-16 18:33:05 +02:00
return _t ( 'SideReport.EMPTYPAGES' , " Empty pages " );
2007-07-19 12:40:05 +02:00
}
function records () {
2008-11-24 10:30:41 +01:00
return DataObject :: get ( " SiteTree " , " \" Content \" = '' OR \" Content \" IS NULL OR \" Content \" LIKE '<p></p>' OR \" Content \" LIKE '<p> </p>' " , '"Title"' );
2007-07-19 12:40:05 +02:00
}
function fieldsToShow () {
return array (
" Title " => array ( " NestedTitle " , array ( " 2 " )),
);
}
}
2008-02-25 03:10:37 +01:00
/**
* Content side - report listing recently editing pages .
* @ package cms
* @ subpackage content
*/
2007-07-19 12:40:05 +02:00
class SideReport_RecentlyEdited extends SideReport {
function title () {
2007-09-16 18:33:05 +02:00
return _t ( 'SideReport.LAST2WEEKS' , " Pages edited in the last 2 weeks " );
2007-07-19 12:40:05 +02:00
}
function records () {
2009-08-06 23:41:49 +02:00
$threshold = strtotime ( '-14 days' , SSDatetime :: now () -> Format ( 'U' ));
return DataObject :: get ( " SiteTree " , " \" SiteTree \" . \" LastEdited \" > ' " . date ( " Y-m-d H:i:s " , $threshold ) . " ' " , " \" SiteTree \" . \" LastEdited \" DESC " );
2007-07-19 12:40:05 +02:00
}
function fieldsToShow () {
return array (
" Title " => array ( " NestedTitle " , array ( " 2 " )),
2009-10-16 00:42:45 +02:00
);
}
}
/**
* Content side - report listing pages with broken links
* @ package cms
* @ subpackage content
*/
class SideReport_BrokenLinks extends SideReport {
function title () {
return _t ( 'SideReport.BROKENLINKS' , " Pages with broken links " );
}
function records () {
return DataObject :: get ( " SiteTree " , " HasBrokenLink = 1 " );
}
function fieldsToShow () {
return array (
" Title " => array ( " NestedTitle " , array ( " 2 " )),
2007-07-19 12:40:05 +02:00
);
}
}
2008-02-25 03:10:37 +01:00
class SideReport_ToDo extends SideReport {
function title () {
return _t ( 'SideReport.TODO' , " To do " );
}
function records () {
2008-11-24 10:30:41 +01:00
return DataObject :: get ( " SiteTree " , " \" SiteTree \" . \" ToDo \" IS NOT NULL AND \" SiteTree \" . \" ToDo \" <> '' " , " \" SiteTree \" . \" LastEdited \" DESC " );
2008-02-25 03:10:37 +01:00
}
function fieldsToShow () {
return array (
" Title " => array (
" source " => array ( " NestedTitle " , array ( " 2 " )),
" link " => true ,
),
" ToDo " => array (
" source " => " ToDo " ,
" newline " => true ,
),
);
}
}
2009-10-11 02:08:06 +02:00
/**
* Lists all pages with either broken page or file links .
*
* @ package cms
* @ subpackage content
*/
class SideReport_BrokenLinks extends SideReport {
public function title () {
return _t ( 'SideReport.BROKENPAGEFILELINKS' , 'Broken Page & File Links' );
}
public function records () {
return DataObject :: get ( 'SiteTree' , '"HasBrokenLink" = 1 OR "HasBrokenFile" = 1' );
}
public function fieldsToShow () {
return array (
'Title' => array ( 'NestedTitle' , array ( 2 )),
);
}
}