diff --git a/code/Report.php b/code/Report.php index 1e727d42..9f08ea8b 100644 --- a/code/Report.php +++ b/code/Report.php @@ -25,7 +25,8 @@ use SilverStripe\Security\Member; use SilverStripe\Security\Permission; use SilverStripe\Security\Security; use SilverStripe\View\ViewableData; - +use SilverStripe\Core\Injector\Injector; +use SilverStripe\Control\HTTPRequest; /** * Base "abstract" class creating reports on your data. * @@ -85,6 +86,8 @@ class Report extends ViewableData */ protected $sort = 0; + protected $params = []; + /** * Reports which should not be collected and returned in get_reports * @@ -97,6 +100,15 @@ class Report extends ViewableData SideReportWrapper::class, ]; + public function __construct() + { + if (Injector::inst()->has(HTTPRequest::class)) { + $this->params = Injector::inst()->get(HTTPRequest::class)->param('filters'); + } + + parent::__construct(); + } + /** * Return the title of this report. * @@ -162,6 +174,11 @@ class Report extends ViewableData } } + public function columns() + { + return []; + } + /** * Return the data class for this report */ @@ -324,9 +341,7 @@ class Report extends ViewableData */ public function getReportField() { - // TODO Remove coupling with global state - $params = isset($_REQUEST['filters']) ? $_REQUEST['filters'] : array(); - $items = $this->sourceRecords($params, null, null); + $items = $this->sourceRecords($this->params, null, null); $gridFieldConfig = GridFieldConfig::create()->addComponents( @@ -334,7 +349,6 @@ class Report extends ViewableData new GridFieldPrintButton('buttons-before-left'), new GridFieldExportButton('buttons-before-left'), new GridFieldToolbarHeader(), - new GridFieldSortableHeader(), new GridFieldDataColumns(), new GridFieldPaginator() ); @@ -361,18 +375,22 @@ class Report extends ViewableData } if (isset($info['link']) && $info['link']) { - $fieldFormatting[$source] = function ($value, $item) { - if ($item instanceof CMSPreviewable) { - /** @var CMSPreviewable $item */ - return sprintf( - '%s', - Convert::raw2att($item->CMSEditLink()), - Convert::raw2att($value), - Convert::raw2xml($value) - ); - } - return $value; - }; + if (is_callable($info['link'])) { + $fieldFormatting[$source] = $info['link']; + } else { + $fieldFormatting[$source] = function ($value, $item) { + if ($item instanceof CMSPreviewable) { + /** @var CMSPreviewable $item */ + return sprintf( + '%s', + Convert::raw2att($item->CMSEditLink()), + Convert::raw2att($value), + Convert::raw2xml($value) + ); + } + return $value; + }; + } } $displayFields[$source] = isset($info['title']) ? $info['title'] : $source;