From abd1e6b856ffcd4487d80424cb7aa350b33dd462 Mon Sep 17 00:00:00 2001 From: Will Rossiter Date: Tue, 3 Feb 2015 16:21:37 +1300 Subject: [PATCH] FIX GridFieldExportButton should honour can method. --- forms/gridfield/GridFieldExportButton.php | 30 ++++++------ .../gridfield/GridFieldExportButtonTest.php | 46 ++++++++++++++++++- .../gridfield/GridFieldExportButtonTest.yml | 3 ++ 3 files changed, 63 insertions(+), 16 deletions(-) diff --git a/forms/gridfield/GridFieldExportButton.php b/forms/gridfield/GridFieldExportButton.php index 464a3366d..f6fed92f4 100644 --- a/forms/gridfield/GridFieldExportButton.php +++ b/forms/gridfield/GridFieldExportButton.php @@ -132,26 +132,28 @@ class GridFieldExportButton implements GridField_HTMLProvider, GridField_ActionP } foreach($items->limit(null) as $item) { - $columnData = array(); + if($item->hasMethod('canView') && $item->canView()) { + $columnData = array(); - foreach($csvColumns as $columnSource => $columnHeader) { - if(!is_string($columnHeader) && is_callable($columnHeader)) { - if($item->hasMethod($columnSource)) { - $relObj = $item->{$columnSource}(); + foreach($csvColumns as $columnSource => $columnHeader) { + if(!is_string($columnHeader) && is_callable($columnHeader)) { + if($item->hasMethod($columnSource)) { + $relObj = $item->{$columnSource}(); + } else { + $relObj = $item->relObject($columnSource); + } + + $value = $columnHeader($relObj); } else { - $relObj = $item->relObject($columnSource); + $value = $gridField->getDataFieldValue($item, $columnSource); } - $value = $columnHeader($relObj); - } else { - $value = $gridField->getDataFieldValue($item, $columnSource); + $value = str_replace(array("\r", "\n"), "\n", $value); + $columnData[] = '"' . str_replace('"', '\"', $value) . '"'; } - - $value = str_replace(array("\r", "\n"), "\n", $value); - $columnData[] = '"' . str_replace('"', '\"', $value) . '"'; + $fileData .= implode($separator, $columnData); + $fileData .= "\n"; } - $fileData .= implode($separator, $columnData); - $fileData .= "\n"; $item->destroy(); } diff --git a/tests/forms/gridfield/GridFieldExportButtonTest.php b/tests/forms/gridfield/GridFieldExportButtonTest.php index d46638655..0de0a41ce 100644 --- a/tests/forms/gridfield/GridFieldExportButtonTest.php +++ b/tests/forms/gridfield/GridFieldExportButtonTest.php @@ -1,4 +1,9 @@ gridField = new GridField('testfield', 'testfield', $this->list, $config); } + public function testCanView() { + $list = new DataList('GridFieldExportButtonTest_NoView'); + + $button = new GridFieldExportButton(); + $button->setExportColumns(array('Name' => 'My Name')); + + $config = GridFieldConfig::create()->addComponent(new GridFieldExportButton()); + $gridField = new GridField('testfield', 'testfield', $list, $config); + + $this->assertEquals( + "\"My Name\"\n", + $button->generateExportFileData($gridField) + ); + } + public function testGenerateFileDataBasicFields() { $button = new GridFieldExportButton(); $button->setExportColumns(array('Name' => 'My Name')); @@ -94,8 +115,12 @@ class GridFieldExportButtonTest extends SapphireTest { $button->generateExportFileData($this->gridField) ); } - } + +/** + * @package framework + * @subpackage tests + */ class GridFieldExportButtonTest_Team extends DataObject implements TestOnly { private static $db = array( @@ -109,3 +134,20 @@ class GridFieldExportButtonTest_Team extends DataObject implements TestOnly { } +/** + * @package framework + * @subpackage tests + */ +class GridFieldExportButtonTest_NoView extends DataObject implements TestOnly { + + private static $db = array( + 'Name' => 'Varchar', + 'City' => 'Varchar' + ); + + public function canView($member = null) { + return false; + } + +} + diff --git a/tests/forms/gridfield/GridFieldExportButtonTest.yml b/tests/forms/gridfield/GridFieldExportButtonTest.yml index 7b7a54d9e..a001b4b96 100644 --- a/tests/forms/gridfield/GridFieldExportButtonTest.yml +++ b/tests/forms/gridfield/GridFieldExportButtonTest.yml @@ -6,3 +6,6 @@ GridFieldExportButtonTest_Team: Name: Test2 City: City2 +GridFieldExportButtonTest_NoView: + item1: + Name: Foo \ No newline at end of file