mirror of
https://github.com/silverstripe/silverstripe-reports
synced 2024-10-22 11:05:53 +02:00
MINOR added broken links report (from r96139)
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/cms/branches/2.4@98187 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
0ffe4f7d5e
commit
dee3b20ccd
@ -54,6 +54,8 @@ HtmlEditorConfig::get('cms')->addButtonsToLine(3, 'tablecontrols');
|
||||
SSReport::register("SideReport", "SideReport_EmptyPages");
|
||||
SSReport::register("SideReport", "SideReport_RecentlyEdited");
|
||||
SSReport::register("SideReport", "SideReport_ToDo");
|
||||
if (class_exists('Subsite')) SSReport::register('ReportAdmin', 'SubsiteReportWrapper("BrokenLinksReport")',-20);
|
||||
else SSReport::register('ReportAdmin', 'BrokenLinksReport',-20);
|
||||
|
||||
|
||||
?>
|
||||
?>
|
||||
|
88
code/reports/BrokenLinksReport.php
Normal file
88
code/reports/BrokenLinksReport.php
Normal file
@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Content side-report listing pages with broken links
|
||||
* @package cms
|
||||
* @subpackage content
|
||||
*/
|
||||
|
||||
class BrokenLinksReport extends SSReport {
|
||||
function title() {
|
||||
return _t('BrokenLinksReport.BROKENLINKS',"Pages with broken links");
|
||||
}
|
||||
function sourceRecords($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 OR HasBrokenFile = 1)");
|
||||
else $ret = DataObject::get('SiteTree', "ClassName IN ($classNames) AND (HasBrokenFile = 1 OR HasBrokenLink = 1)");
|
||||
|
||||
$returnSet = new DataObjectSet();
|
||||
if ($ret) foreach($ret as $record) {
|
||||
$reason = false;
|
||||
$isRedirectorPage = in_array($record->ClassName, ClassInfo::subclassesFor('RedirectorPage'));
|
||||
$isVirtualPage = in_array($record->ClassName, ClassInfo::subclassesFor('VirtualPage'));
|
||||
|
||||
if ($isVirtualPage) {
|
||||
if ($record->HasBrokenLink) {
|
||||
$reason = "redirector page pointing to non-existant page";
|
||||
$reasonCodes = array("VPBROKENLINK");
|
||||
}
|
||||
} else if ($isRedirectorPage) {
|
||||
if ($record->HasBrokenLink) {
|
||||
$reason = "redirector page pointing to non-existant page";
|
||||
$reasonCodes = array("RPBROKENLINK");
|
||||
}
|
||||
} else {
|
||||
if ($record->HasBrokenLink && $record->HasBrokenFile) {
|
||||
$reason = "has broken link and file";
|
||||
$reasonCodes = array("BROKENFILE", "BROKENLINK");
|
||||
} else if ($record->HasBrokenLink && !$record->HasBrokenFile) {
|
||||
$reason = "has broken link";
|
||||
$reasonCodes = array("BROKENLINK");
|
||||
} else if (!$record->HasBrokenLink && $record->HasBrokenFile) {
|
||||
$reason = "has broken file";
|
||||
$reasonCodes = array("BROKENFILE");
|
||||
}
|
||||
}
|
||||
|
||||
if ($reason) {
|
||||
if ($params['Reason'] && !in_array($params['Reason'], $reasonCodes)) continue;
|
||||
$record->BrokenReason = $reason;
|
||||
$returnSet->push($record);
|
||||
}
|
||||
}
|
||||
|
||||
return $returnSet;
|
||||
}
|
||||
function columns() {
|
||||
$fields = array(
|
||||
"Title" => array(
|
||||
"title" => "Title",
|
||||
'formatting' => '<a href=\"admin/show/$ID\" title=\"Edit page\">$value</a>'
|
||||
),
|
||||
"BrokenReason" => array(
|
||||
"title" => "Reason"
|
||||
),
|
||||
'AbsoluteLink' => array(
|
||||
'title' => 'Links',
|
||||
'formatting' => '$value " . ($AbsoluteLiveLink ? "<a href=\"$AbsoluteLiveLink\">(live)</a>" : "") . " <a href=\"$value?stage=Stage\">(draft)</a>'
|
||||
)
|
||||
);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
function parameterFields() {
|
||||
return new FieldSet(
|
||||
new CheckboxField('OnLive', 'Check live site'),
|
||||
new DropdownField('Reason', 'Problem to check', array(
|
||||
'' => 'Any',
|
||||
'BROKENFILE' => 'Broken file',
|
||||
'BROKENLINK' => 'Broken link',
|
||||
'VPBROKENLINK' => 'Virtual page pointing to invalid source',
|
||||
'RPBROKENLINK' => 'Redirector page pointing to invalid destination',
|
||||
))
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user