2013-01-17 01:22:13 +01:00
|
|
|
<?php
|
|
|
|
|
2016-08-29 03:55:43 +02:00
|
|
|
namespace SilverStripe\Reports;
|
|
|
|
|
|
|
|
use SilverStripe\Core\Convert;
|
2017-06-21 06:30:14 +02:00
|
|
|
use SilverStripe\ORM\FieldType\DBField;
|
2016-08-29 03:55:43 +02:00
|
|
|
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
|
|
|
|
{
|
2019-01-09 20:59:28 +01:00
|
|
|
protected $controller;
|
|
|
|
protected $report;
|
2015-12-15 23:06:45 +01:00
|
|
|
protected $parameters;
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
public function __construct($controller, $report)
|
|
|
|
{
|
|
|
|
$this->controller = $controller;
|
|
|
|
$this->report = $report;
|
|
|
|
parent::__construct();
|
|
|
|
}
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
public function group()
|
|
|
|
{
|
2017-05-08 07:56:43 +02:00
|
|
|
return _t('SilverStripe\\Reports\\SideReport.OtherGroupTitle', "Other");
|
2015-12-15 23:06:45 +01:00
|
|
|
}
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
public function sort()
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
public function setParameters($parameters)
|
|
|
|
{
|
|
|
|
$this->parameters = $parameters;
|
|
|
|
}
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2024-08-28 00:54:34 +02:00
|
|
|
public function forTemplate(): string
|
2015-12-15 23:06:45 +01:00
|
|
|
{
|
|
|
|
$records = $this->report->records($this->parameters);
|
|
|
|
$columns = $this->report->columns();
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
if ($records && $records->Count()) {
|
2016-09-28 00:34:42 +02:00
|
|
|
$result = "<ul class=\"" . static::class . "\">\n";
|
2016-08-29 03:55:43 +02:00
|
|
|
|
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(
|
2017-05-08 07:56:43 +02:00
|
|
|
'SilverStripe\\Reports\\SideReport.REPEMPTY',
|
2015-12-15 23:06:45 +01:00
|
|
|
'The {title} report is empty.',
|
|
|
|
array('title' => $this->report->title())
|
|
|
|
)
|
|
|
|
. "</p>";
|
|
|
|
}
|
|
|
|
return $result;
|
|
|
|
}
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
protected function formatValue($record, $source, $info)
|
|
|
|
{
|
2017-06-21 06:30:14 +02:00
|
|
|
// Cast value
|
2015-12-15 23:06:45 +01:00
|
|
|
if (!empty($info['casting'])) {
|
2017-06-21 06:30:14 +02:00
|
|
|
$val = DBField::create_field($info['casting'], $record->source)->forTemplate();
|
|
|
|
} else {
|
|
|
|
$val = Convert::raw2xml($record->$source);
|
2015-12-15 23:06:45 +01:00
|
|
|
}
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
// Formatting, a la TableListField
|
|
|
|
if (!empty($info['formatting'])) {
|
2022-04-13 07:39:46 +02:00
|
|
|
$format = str_replace('$value', "__VAL__", $info['formatting'] ?? '');
|
|
|
|
$format = preg_replace('/\$([A-Za-z0-9-_]+)/', '$record->$1', $format ?? '');
|
|
|
|
$format = str_replace('__VAL__', '$val', $format ?? '');
|
2015-12-15 23:06:45 +01:00
|
|
|
$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>";
|
|
|
|
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
$classClause = "";
|
|
|
|
if (isset($info['title'])) {
|
2022-04-13 07:39:46 +02:00
|
|
|
$cssClass = preg_replace('/[^A-Za-z0-9]+/', '', $info['title'] ?? '');
|
2015-12-15 23:06:45 +01:00
|
|
|
$classClause = "class=\"$cssClass\"";
|
|
|
|
}
|
2016-08-29 03:55:43 +02:00
|
|
|
|
2015-12-15 23:06:45 +01:00
|
|
|
if (isset($info['link']) && $info['link']) {
|
2024-08-25 23:58:30 +02:00
|
|
|
$link = ($info['link'] === true && $record->hasMethod('getCMSEditLink'))
|
|
|
|
? $record->getCMSEditLink()
|
2016-07-29 00:44:00 +02:00
|
|
|
: $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
|
|
|
}
|