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 {
2009-10-16 00:43:58 +02:00
protected $params = array ();
2007-07-19 12:40:05 +02:00
abstract function records ();
abstract function fieldsToShow ();
abstract function title ();
2009-10-29 03:50:47 +01:00
function group () {
return 'Other' ;
}
function sort () {
return 0 ;
}
2007-07-19 12:40:05 +02:00
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 ;
}
2009-10-16 00:43:58 +02:00
function setParams ( $params ) {
$this -> params = $params ;
}
// if your batchaction has parameters, return a fieldset here
function getParameterFields () {
return false ;
}
2009-10-28 03:21:01 +01:00
function canView () {
return true ;
}
2007-07-19 12:40:05 +02:00
}
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 () {
2009-10-29 03:50:47 +01:00
return _t ( 'SideReport.EMPTYPAGES' , " Pages with no content " );
}
function group () {
return " Content reports " ;
}
function sort () {
return 100 ;
2007-07-19 12:40:05 +02:00
}
2009-10-16 00:43:58 +02:00
function records ( $params = null ) {
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
}
2009-10-29 03:50:47 +01:00
function group () {
return " Content reports " ;
}
function sort () {
return 200 ;
}
2009-10-16 00:43:58 +02:00
function records ( $params = null ) {
API CHANGE: Renamed conflicting classes to have an "SS_" namespace, and renamed existing "SS" namespace to "SS_". The affected classes are: HTTPRequest, HTTPResponse, Query, Database, SSBacktrace, SSCli, SSDatetime, SSDatetimeTest, SSLog, SSLogTest, SSLogEmailWriter, SSLogErrorEmailFormatter, SSLogErrorFileFormatter, SSLogFileWriter and SSZendLog.
MINOR: Replaced usage of renamed classes with the new namespaced name.
From: Sam Minnee <sam@silverstripe.com>
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/trunk@90076 467b73ca-7a2a-4603-9d3b-597d59a354a9
2009-10-26 04:06:42 +01:00
$threshold = strtotime ( '-14 days' , SS_Datetime :: now () -> Format ( 'U' ));
2009-08-06 23:41:49 +02:00
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 " )),
);
}
}
2008-02-25 03:10:37 +01:00
class SideReport_ToDo extends SideReport {
function title () {
2009-10-29 03:50:47 +01:00
return _t ( 'SideReport.TODO' , " Pages with To Do items " );
}
function group () {
return " Content reports " ;
}
function sort () {
return 0 ;
2008-02-25 03:10:37 +01:00
}
2009-10-16 00:43:58 +02:00
function records ( $params = null ) {
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
/**
2009-10-29 22:59:47 +01:00
* Content side - report listing pages with broken links
2009-10-11 02:08:06 +02:00
* @ package cms
* @ subpackage content
*/
class SideReport_BrokenLinks extends SideReport {
2009-10-29 22:59:47 +01:00
function title () {
return _t ( 'SideReport.BROKENLINKS' , " Pages with broken links " );
2009-10-11 02:08:06 +02:00
}
2009-10-29 03:50:47 +01:00
function group () {
return " Broken links reports " ;
}
2009-10-29 22:59:47 +01:00
function records ( $params = null ) {
// Get class names for page types that are not virtual pages or redirector pages
$classes = array_diff ( ClassInfo :: subclassesFor ( 'SiteTree' ), ClassInfo :: subclassesFor ( 'VirtualPage' ), ClassInfo :: subclassesFor ( 'RedirectorPage' ));
$classNames = " ' " . join ( " ',' " , $classes ) . " ' " ;
if ( isset ( $_REQUEST [ 'OnLive' ])) $ret = Versioned :: get_by_stage ( 'SiteTree' , 'Live' , " ClassName IN ( $classNames ) AND HasBrokenLink = 1 " );
else $ret = DataObject :: get ( 'SiteTree' , " ClassName IN ( $classNames ) AND HasBrokenLink = 1 " );
return $ret ;
}
function fieldsToShow () {
return array (
" Title " => array ( " NestedTitle " , array ( " 2 " )),
);
}
function getParameterFields () {
return new FieldSet (
new CheckboxField ( 'OnLive' , 'Check live site' )
);
}
}
/**
* Content side - report listing pages with broken files
* or asset links
* @ package cms
* @ subpackage content
*/
class SideReport_BrokenFiles extends SideReport {
function title () {
return _t ( 'SideReport.BROKENFILES' , " Pages with broken files " );
}
function group () {
return " Broken links reports " ;
}
function records ( $params = null ) {
// Get class names for page types that are not virtual pages or redirector pages
$classes = array_diff ( ClassInfo :: subclassesFor ( 'SiteTree' ), ClassInfo :: subclassesFor ( 'VirtualPage' ), ClassInfo :: subclassesFor ( 'RedirectorPage' ));
$classNames = " ' " . join ( " ',' " , $classes ) . " ' " ;
if ( isset ( $_REQUEST [ 'OnLive' ])) $ret = Versioned :: get_by_stage ( 'SiteTree' , 'Live' , " ClassName IN ( $classNames ) AND HasBrokenFile = 1 " );
else $ret = DataObject :: get ( 'SiteTree' , " ClassName IN ( $classNames ) AND HasBrokenFile = 1 " );
return $ret ;
}
function fieldsToShow () {
return array (
" Title " => array ( " NestedTitle " , array ( " 2 " )),
);
}
function getParameterFields () {
return new FieldSet (
new CheckboxField ( 'OnLive' , 'Check live site' )
);
}
}
class SideReport_BrokenVirtualPages extends SideReport {
function title () {
return _t ( 'SideReport.BROKENVIRTUALPAGES' , 'VirtualPages pointing to deleted pages' );
}
function group () {
return " Broken links reports " ;
}
function records ( $params = null ) {
$classNames = " ' " . join ( " ',' " , ClassInfo :: subclassesFor ( 'VirtualPage' )) . " ' " ;
if ( isset ( $_REQUEST [ 'OnLive' ])) $ret = Versioned :: get_by_stage ( 'SiteTree' , 'Live' , " ClassName IN ( $classNames ) AND HasBrokenLink = 1 " );
else $ret = DataObject :: get ( 'SiteTree' , " ClassName IN ( $classNames ) AND HasBrokenLink = 1 " );
return $ret ;
2009-10-11 02:08:06 +02:00
}
2009-10-29 22:59:47 +01:00
function fieldsToShow () {
2009-10-11 02:08:06 +02:00
return array (
2009-10-29 22:59:47 +01:00
" Title " => array ( " NestedTitle " , array ( " 2 " )),
2009-10-11 02:08:06 +02:00
);
}
2009-10-29 22:59:47 +01:00
function getParameterFields () {
return new FieldSet (
new CheckboxField ( 'OnLive' , 'Check live site' )
);
}
}
class SideReport_BrokenRedirectorPages extends SideReport {
function title () {
return _t ( 'SideReport.BROKENREDIRECTORPAGES' , 'RedirectorPages pointing to deleted pages' );
}
function group () {
return " Broken links reports " ;
}
function records ( $params = null ) {
$classNames = " ' " . join ( " ',' " , ClassInfo :: subclassesFor ( 'RedirectorPage' )) . " ' " ;
if ( isset ( $_REQUEST [ 'OnLive' ])) $ret = Versioned :: get_by_stage ( 'SiteTree' , 'Live' , " ClassName IN ( $classNames ) AND HasBrokenLink = 1 " );
else $ret = DataObject :: get ( 'SiteTree' , " ClassName IN ( $classNames ) AND HasBrokenLink = 1 " );
return $ret ;
}
2009-10-11 02:08:06 +02:00
2009-10-29 22:59:47 +01:00
function fieldsToShow () {
return array (
" Title " => array ( " NestedTitle " , array ( " 2 " )),
);
}
function getParameterFields () {
return new FieldSet (
new CheckboxField ( 'OnLive' , 'Check live site' )
);
}
2009-10-11 02:08:06 +02:00
}