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,
)
);
}