silverstripe-reports/code/SideReport.php

113 lines
3.2 KiB
PHP
Raw Normal View History

2013-01-17 01:22:13 +01:00
<?php
namespace SilverStripe\Reports;
use TableListField;
use SilverStripe\Core\Convert;
use SilverStripe\View\ViewableData;
2013-01-17 01:22:13 +01:00
/**
* Renderer for showing SideReports in CMSMain
*/
2015-12-15 23:06:45 +01:00
class SideReportView extends ViewableData
{
2013-01-17 01:22:13 +01:00
2015-12-15 23:06:45 +01:00
protected $controller, $report;
protected $parameters;
2015-12-15 23:06:45 +01:00
public function __construct($controller, $report)
{
$this->controller = $controller;
$this->report = $report;
parent::__construct();
}
2015-12-15 23:06:45 +01:00
public function group()
{
return _t('SideReport.OtherGroupTitle', "Other");
}
2015-12-15 23:06:45 +01:00
public function sort()
{
return 0;
}
2015-12-15 23:06:45 +01:00
public function setParameters($parameters)
{
$this->parameters = $parameters;
}
2015-12-15 23:06:45 +01:00
public function forTemplate()
{
$records = $this->report->records($this->parameters);
$columns = $this->report->columns();
2015-12-15 23:06:45 +01:00
if ($records && $records->Count()) {
$result = "<ul class=\"" . get_class($this) . "\">\n";
2015-12-15 23:06:45 +01:00
foreach ($records as $record) {
$result .= "<li>\n";
foreach ($columns as $source => $info) {
if (is_string($info)) {
$info = array('title' => $info);
}
$result .= $this->formatValue($record, $source, $info);
}
$result .= "\n</li>\n";
}
$result .= "</ul>\n";
} else {
$result = "<p class=\"message notice\">" .
_t(
'SideReport.REPEMPTY',
'The {title} report is empty.',
array('title' => $this->report->title())
)
. "</p>";
}
return $result;
}
2015-12-15 23:06:45 +01:00
protected function formatValue($record, $source, $info)
{
// Field sources
//if(is_string($source)) {
$val = Convert::raw2xml($record->$source);
//} else {
// $val = $record->val($source[0], $source[1]);
//}
2013-01-17 01:22:13 +01:00
2015-12-15 23:06:45 +01:00
// Casting, a la TableListField. We're deep-calling a helper method on TableListField that
// should probably be pushed elsewhere...
if (!empty($info['casting'])) {
$val = TableListField::getCastedValue($val, $info['casting']);
}
2015-12-15 23:06:45 +01:00
// Formatting, a la TableListField
if (!empty($info['formatting'])) {
$format = str_replace('$value', "__VAL__", $info['formatting']);
$format = preg_replace('/\$([A-Za-z0-9-_]+)/', '$record->$1', $format);
$format = str_replace('__VAL__', '$val', $format);
$val = eval('return "' . $format . '";');
}
2013-01-17 01:22:13 +01:00
2015-12-15 23:06:45 +01:00
$prefix = empty($info['newline']) ? "" : "<br>";
2015-12-15 23:06:45 +01:00
$classClause = "";
if (isset($info['title'])) {
$cssClass = preg_replace('/[^A-Za-z0-9]+/', '', $info['title']);
$classClause = "class=\"$cssClass\"";
}
2015-12-15 23:06:45 +01:00
if (isset($info['link']) && $info['link']) {
2016-07-29 00:44:00 +02:00
$link = ($info['link'] === true && $record->hasMethod('CMSEditLink'))
? $record->CMSEditLink()
: $info['link'];
2015-12-15 23:06:45 +01:00
return $prefix . "<a $classClause href=\"$link\">$val</a>";
} else {
return $prefix . "<span $classClause>$val</span>";
}
}
2013-01-17 01:22:13 +01:00
}