diff --git a/code/Report.php b/code/Report.php index 069b0309..298ffef8 100644 --- a/code/Report.php +++ b/code/Report.php @@ -23,6 +23,7 @@ use SilverStripe\Forms\GridField\GridField; use SilverStripe\Core\Convert; use SilverStripe\View\ViewableData; use ReflectionClass; +use SilverStripe\Admin\CMSPreviewable ; /** * Base "abstract" class creating reports on your data. @@ -369,12 +370,15 @@ class Report extends ViewableData if (isset($info['link']) && $info['link']) { $fieldFormatting[$source] = function($value, $item) { - /** @var CMSPreviewable $item */ - return sprintf( - '%s', - Convert::raw2att($item->CMSEditLink()), - Convert::raw2xml($value) - ); + if ($item instanceof CMSPreviewable) { + /** @var CMSPreviewable $item */ + return sprintf( + '%s', + Convert::raw2att($item->CMSEditLink()), + Convert::raw2xml($value) + ); + } + return $value; }; } diff --git a/tests/ReportTest.php b/tests/ReportTest.php index 01b2e2db..59126ae9 100644 --- a/tests/ReportTest.php +++ b/tests/ReportTest.php @@ -1,10 +1,13 @@ logInWithPermission('CMS_ACCESS_ReportAdmin'); $this->assertTrue($report->canView()); - // Admin can view - $this->logInWithPermission('ADMIN'); - $this->assertTrue($report->canView()); + // Admin can view + $this->logInWithPermission('ADMIN'); + $this->assertTrue($report->canView()); + } + + public function testColumnLink() { + $report = new ReportTest_FakeTest(); + /** @var GridField $gridField */ + $gridField = $report->getReportField(); + /** @var GridFieldDataColumns $columns */ + $columns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns'); + + $page = new ReportTest_FakeObject(); + $page->Title = 'My Object'; + $page->ID = 959547; + + $titleContent = $columns->getColumnContent($gridField, $page, 'Title'); + $this->assertEquals('My Object', $titleContent); + } +} + +class ReportTest_FakeObject extends DataObject implements CMSPreviewable, TestOnly { + + private static $db = array( + 'Title' => 'Varchar' + ); + + /** + * @return String Absolute URL to the end-user view for this record. + * Example: http://mysite.com/my-record + */ + public function Link() + { + return Controller::join_links('dummy-link', $this->ID); + } + + public function CMSEditLink() + { + return Controller::join_links('dummy-edit-link', $this->ID); + } + + public function PreviewLink($action = null) { + return false; + } + + public function getMimeType() { + return 'text/html'; } } @@ -105,7 +152,8 @@ class ReportTest_FakeTest extends Report implements TestOnly { return array( "Title" => array( - "title" => "Page Title" + "title" => "Page Title", + "link" => true, ) ); }