Webylon 3.2 API Docs
  • Package
  • Class
  • Tree
  • Deprecated
  • Download
Version: current
  • 3.2
  • 3.1

Packages

  • 1c
    • exchange
      • catalog
  • auth
  • Booking
  • building
    • company
  • cart
    • shipping
    • steppedcheckout
  • Catalog
    • monument
  • cms
    • assets
    • batchaction
    • batchactions
    • bulkloading
    • comments
    • content
    • core
    • export
    • newsletter
    • publishers
    • reports
    • security
    • tasks
  • Dashboard
  • DataObjectManager
  • event
  • faq
  • forms
    • actions
    • core
    • fields-basic
    • fields-dataless
    • fields-datetime
    • fields-files
    • fields-formatted
    • fields-formattedinput
    • fields-relational
    • fields-structural
    • transformations
    • validators
  • googlesitemaps
  • guestbook
  • installer
  • newsletter
  • None
  • photo
    • gallery
  • PHP
  • polls
  • recaptcha
  • sapphire
    • api
    • bulkloading
    • control
    • core
    • cron
    • dev
    • email
    • fields-formattedinput
    • filesystem
    • formatters
    • forms
    • i18n
    • integration
    • misc
    • model
    • parsers
    • search
    • security
    • tasks
    • testing
    • tools
    • validation
    • view
    • widgets
  • seo
    • open
      • graph
  • sfDateTimePlugin
  • spamprotection
  • stealth
    • captha
  • subsites
  • userform
    • pagetypes
  • userforms
  • webylon
  • widgets

Classes

  • BigFilesReport
  • BrokenLinksReport
  • CMSMain
  • CMSMainMarkingFilter
  • CMSMenu
  • CMSMenuItem
  • CMSSiteTreeFilter
  • CMSSiteTreeFilter_ChangedPages
  • CMSSiteTreeFilter_DeletedPages
  • CMSSiteTreeFilter_Search
  • NonUsedFilesReport
  • RedirectorPage
  • RedirectorPage_Controller
  • SideReport_BrokenFiles
  • SideReport_BrokenLinks
  • SideReport_BrokenRedirectorPages
  • SideReport_BrokenVirtualPages
  • SideReport_EmptyPages
  • SideReport_RecentlyEdited
  • SideReport_ToDo
  • SideReportView
  • SideReportWrapper
  • SilverStripeNavigator
  • SilverStripeNavigatorItem
  • SilverStripeNavigatorItem_ArchiveLink
  • SilverStripeNavigatorItem_CMSLink
  • SilverStripeNavigatorItem_LiveLink
  • SilverStripeNavigatorItem_StageLink
  • WidgetAreaEditor
  1 <?php
  2 
  3 /**
  4  * Renderer for showing SideReports in CMSMain
  5  * 
  6  * 
  7  * @package cms
  8  * @subpackage content
  9  */
 10 class SideReportView extends ViewableData {
 11     protected $controller, $report;
 12     protected $parameters;
 13     
 14     function __construct($controller, $report) {
 15         $this->controller = $controller;
 16         $this->report = $report;
 17         parent::__construct();
 18     }
 19     
 20     function group() {
 21         return _t('SideReport.OtherGroupTitle', "Other");
 22     }
 23     
 24     function sort() {
 25         return 0;
 26     }
 27     
 28     function setParameters($parameters) {
 29         $this->parameters = $parameters;
 30     }
 31     
 32     function forTemplate() {
 33         $records = $this->report->records($this->parameters);
 34         $columns = $this->report->columns();
 35         
 36         if($records && $records->Count()) {
 37             $result = "<ul class=\"$this->class\">\n";
 38             
 39             foreach($records as $record) {
 40                 $result .= "<li>\n";
 41                 foreach($columns as $source => $info) {
 42                     if(is_string($info)) $info = array('title' => $info);
 43                     $result .= $this->formatValue($record, $source, $info);
 44                 }
 45                 $result .= "\n</li>\n";
 46             }
 47             $result .= "</ul>\n";   
 48         } else {
 49             $result = "<p class=\"message notice\">" . 
 50                 sprintf(
 51                     _t('SideReport.REPEMPTY','The %s report is empty.',PR_MEDIUM,'%s is a report title'),
 52                     $this->report->title()
 53                 ) 
 54                 . "</p>";
 55         }
 56         return $result;
 57     }
 58     
 59     protected function formatValue($record, $source, $info) {
 60         // Field sources
 61         //if(is_string($source)) {
 62             $val = Convert::raw2xml($record->$source);
 63         //} else {
 64         //  $val = $record->val($source[0], $source[1]);
 65         //}
 66         
 67         // Casting, a la TableListField.  We're deep-calling a helper method on TableListField that
 68         // should probably be pushed elsewhere...
 69         if(!empty($info['casting'])) {
 70             $val = TableListField::getCastedValue($val, $info['casting']);
 71         }
 72         
 73         // Formatting, a la TableListField
 74         if(!empty($info['formatting'])) {
 75             $format = str_replace('$value', "__VAL__", $info['formatting']);
 76             $format = preg_replace('/\$([A-Za-z0-9-_]+)/','$record->$1', $format);
 77             $format = str_replace('__VAL__', '$val', $format);
 78             $val = eval('return "' . $format . '";');
 79         }
 80 
 81         $prefix = empty($info['newline']) ? "" : "<br>";
 82 
 83         
 84         $classClause = "";
 85         if(isset($info['title'])) {
 86             $cssClass = preg_replace('![^A-Za-z0-9]+!','',$info['title']);
 87             $classClause = "class=\"$cssClass\"";
 88         }
 89         
 90         if(isset($info['link']) && $info['link']) {
 91             $link = ($info['link'] === true) ? "admin/show/$record->ID" : $info['link'];
 92             return $prefix . "<a $classClause href=\"$link\">$val</a>";
 93         } else {
 94             return $prefix . "<span $classClause>$val</span>";
 95         }
 96 
 97     }
 98 }
 99 
100 /**
101  * A report wrapper that makes it easier to define slightly different behaviour for side-reports.
102  * 
103  * This report wrapper will use sideReportColumns() for the report columns, instead of columns().
104  * 
105  * @package cms
106  * @subpackage content
107  */
108 class SideReportWrapper extends SS_ReportWrapper {
109     function columns() {
110         if($this->baseReport->hasMethod('sideReportColumns')) {
111             return $this->baseReport->sideReportColumns();
112         } else {
113             return parent::columns();
114         }
115     }
116 }
117 
118 ////////////////////////////////////////////////////////////////////////////////////////////////
119 
120 /**
121  * Content side-report listing empty pages
122  * 
123  * @package cms
124  * @subpackage content
125  */
126 class SideReport_EmptyPages extends SS_Report {
127     function title() {
128         return _t('SideReport.EMPTYPAGES',"Pages with no content");
129     }
130 
131     function group() {
132         return _t('SideReport.ContentGroupTitle', "Content reports");
133     }
134     function sort() {
135         return 100;
136     }
137     function sourceRecords($params = null) {
138         return DataObject::get("SiteTree", "\"ClassName\" != 'RedirectorPage' AND (\"Content\" = '' OR \"Content\" IS NULL OR \"Content\" LIKE '<p></p>' OR \"Content\" LIKE '<p>&nbsp;</p>')", '"Title"');
139     }
140     function columns() {
141         return array(
142             "Title" => array(
143                 "title" => "Title", // todo: use NestedTitle(2)
144                 "link" => true,
145             ),
146         );
147     }
148 }
149 
150 /**
151  * Content side-report listing recently editing pages.
152  * 
153  * @package cms
154  * @subpackage content
155  */
156 class SideReport_RecentlyEdited extends SS_Report {
157     function title() {
158         return _t('SideReport.LAST2WEEKS',"Pages edited in the last 2 weeks");
159     }
160     function group() {
161         return _t('SideReport.ContentGroupTitle', "Content reports");
162     }
163     function sort() {
164         return 200;
165     }
166     function sourceRecords($params = null) {
167         $threshold = strtotime('-14 days', SS_Datetime::now()->Format('U'));
168         return DataObject::get("SiteTree", "\"SiteTree\".\"LastEdited\" > '".date("Y-m-d H:i:s", $threshold)."'", "\"SiteTree\".\"LastEdited\" DESC");
169     }
170     function columns() {
171         return array(
172             "Title" => array(
173                 "title" => "Title", // todo: use NestedTitle(2)
174                 "link" => true,
175             ),
176         );
177     }
178 }
179 
180 /**
181  * @package cms
182  * @subpackage content
183  */
184 class SideReport_ToDo extends SS_Report {
185     function title() {
186         return _t('SideReport.TODO',"Pages with To Do items");
187     }
188     function group() {
189         return _t('SideReport.ContentGroupTitle', "Content reports");
190     }
191     function sort() {
192         return 0;
193     }
194     function sourceRecords($params = null) {
195         return DataObject::get("SiteTree", "\"SiteTree\".\"ToDo\" IS NOT NULL AND \"SiteTree\".\"ToDo\" <> ''", "\"SiteTree\".\"LastEdited\" DESC");
196     }
197     function columns() {
198         return array(
199             "Title" => array(
200                 "title" => "Title", // todo: use NestedTitle(2)
201                 "link" => true,
202             ),
203             "ToDo" => array(
204                 "title" => "ToDo",
205                 "newline" => true,
206             ), 
207         );
208     }
209 }
210 
211 /**
212  * Content side-report listing pages with broken links
213  * 
214  * @package cms
215  * @subpackage content
216  */
217 class SideReport_BrokenLinks extends SS_Report {
218     function title() {
219         return _t('SideReport.BROKENLINKS',"Pages with broken links");
220     }
221     function group() {
222         return _t('SideReport.BrokenLinksGroupTitle', "Broken links reports");
223     }
224     function sourceRecords($params = null) {
225         // Get class names for page types that are not virtual pages or redirector pages
226         $classes = array_diff(ClassInfo::subclassesFor('SiteTree'), ClassInfo::subclassesFor('VirtualPage'), ClassInfo::subclassesFor('RedirectorPage'));
227         $classNames = "'".join("','", $classes)."'";
228         
229         if (isset($_REQUEST['OnLive'])) $ret = Versioned::get_by_stage('SiteTree', 'Live', "ClassName IN ($classNames) AND HasBrokenLink = 1");
230         else $ret = DataObject::get('SiteTree', "ClassName IN ($classNames) AND HasBrokenLink = 1");
231         return $ret;
232     }
233     function columns() {
234         return array(
235             "Title" => array(
236                 "title" => "Title", // todo: use NestedTitle(2)
237                 "link" => true,
238             ),
239         );
240     }
241     function getParameterFields() {
242         return new FieldSet(
243             new CheckboxField('OnLive', _t('SideReport.ParameterLiveCheckbox', 'Check live site'))
244         );
245     }
246 }
247 
248 /**
249  * Content side-report listing pages with broken files
250  * or asset links
251  * 
252  * @package cms
253  * @subpackage content
254  */
255 class SideReport_BrokenFiles extends SS_Report {
256     function title() {
257         return _t('SideReport.BROKENFILES',"Pages with broken files");
258     }
259     function group() {
260         return _t('SideReport.BrokenLinksGroupTitle', "Broken links reports");
261     }
262     function sourceRecords($params = null) {
263         // Get class names for page types that are not virtual pages or redirector pages
264         $classes = array_diff(ClassInfo::subclassesFor('SiteTree'), ClassInfo::subclassesFor('VirtualPage'), ClassInfo::subclassesFor('RedirectorPage'));
265         $classNames = "'".join("','", $classes)."'";
266         
267         if (isset($_REQUEST['OnLive'])) $ret = Versioned::get_by_stage('SiteTree', 'Live', "ClassName IN ($classNames) AND HasBrokenFile = 1");
268         else $ret = DataObject::get('SiteTree', "ClassName IN ($classNames) AND HasBrokenFile = 1");
269         return $ret;
270     }
271     function columns() {
272         return array(
273             "Title" => array(
274                 "title" => "Title", // todo: use NestedTitle(2)
275                 "link" => true,
276             ),
277         );
278     }
279 
280     function getParameterFields() {
281         return new FieldSet(
282             new CheckboxField('OnLive', _t('SideReport.ParameterLiveCheckbox', 'Check live site'))
283         );
284     }
285 
286 }
287 
288 /**
289  * @package cms
290  * @subpackage content
291  */
292 class SideReport_BrokenVirtualPages extends SS_Report {
293     function title() {
294         return _t('SideReport.BROKENVIRTUALPAGES', 'VirtualPages pointing to deleted pages');
295     }
296     function group() {
297         return _t('SideReport.BrokenLinksGroupTitle', "Broken links reports");
298     }
299     function sourceRecords($params = null) {
300         $classNames = "'".join("','", ClassInfo::subclassesFor('VirtualPage'))."'";
301         if (isset($_REQUEST['OnLive'])) $ret = Versioned::get_by_stage('SiteTree', 'Live', "ClassName IN ($classNames) AND HasBrokenLink = 1");
302         else $ret = DataObject::get('SiteTree', "ClassName IN ($classNames) AND HasBrokenLink = 1");
303         return $ret;
304     }
305     
306     function columns() {
307         return array(
308             "Title" => array(
309                 "title" => "Title", // todo: use NestedTitle(2)
310                 "link" => true,
311             ),
312         );
313     }
314 
315     function getParameterFields() {
316         return new FieldSet(
317             new CheckboxField('OnLive', _t('SideReport.ParameterLiveCheckbox', 'Check live site'))
318         );
319     }
320 }
321 
322 /**
323  * @package cms
324  * @subpackage content
325  */
326 class SideReport_BrokenRedirectorPages extends SS_Report {
327     function title() {
328         return _t('SideReport.BROKENREDIRECTORPAGES', 'RedirectorPages pointing to deleted pages');
329     }
330     function group() {
331         return _t('SideReport.BrokenLinksGroupTitle', "Broken links reports");
332     }
333     function sourceRecords($params = null) {
334         $classNames = "'".join("','", ClassInfo::subclassesFor('RedirectorPage'))."'";
335         
336         if (isset($_REQUEST['OnLive'])) $ret = Versioned::get_by_stage('SiteTree', 'Live', "ClassName IN ($classNames) AND HasBrokenLink = 1");
337         else $ret = DataObject::get('SiteTree', "ClassName IN ($classNames) AND HasBrokenLink = 1");
338         return $ret;
339     }
340     
341     function columns() {
342         return array(
343             "Title" => array(
344                 "title" => "Title", // todo: use NestedTitle(2)
345                 "link" => true,
346             ),
347         );
348     }
349     
350     function getParameterFields() {
351         return new FieldSet(
352             new CheckboxField('OnLive', _t('SideReport.ParameterLiveCheckbox', 'Check live site'))
353         );
354     }
355 }
356 
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -
Webylon 3.2 API Docs API documentation generated by ApiGen 2.8.0