Skip to content

Commit

Permalink
FIX GridFieldExportButton should honour can method.
Browse files Browse the repository at this point in the history
  • Loading branch information
wilr committed Feb 3, 2015
1 parent 5219cb0 commit abd1e6b
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 17 deletions.
32 changes: 17 additions & 15 deletions forms/gridfield/GridFieldExportButton.php
Original file line number Diff line number Diff line change
Expand Up @@ -132,26 +132,28 @@ public function generateExportFileData($gridField) {
}

foreach($items->limit(null) as $item) {
$columnData = array();

foreach($csvColumns as $columnSource => $columnHeader) {
if(!is_string($columnHeader) && is_callable($columnHeader)) {
if($item->hasMethod($columnSource)) {
$relObj = $item->{$columnSource}();
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}();
} 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();
}
Expand Down
46 changes: 44 additions & 2 deletions tests/forms/gridfield/GridFieldExportButtonTest.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
<?php

/**
* @package framework
* @subpackage tests
*/
class GridFieldExportButtonTest extends SapphireTest {

protected $list;
Expand All @@ -10,7 +15,8 @@ class GridFieldExportButtonTest extends SapphireTest {
protected static $fixture_file = 'GridFieldExportButtonTest.yml';

protected $extraDataObjects = array(
'GridFieldExportButtonTest_Team'
'GridFieldExportButtonTest_Team',
'GridFieldExportButtonTest_NoView'
);

public function setUp() {
Expand All @@ -22,6 +28,21 @@ public function setUp() {
$this->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'));
Expand Down Expand Up @@ -94,8 +115,12 @@ public function testArrayListInput() {
$button->generateExportFileData($this->gridField)
);
}

}

/**
* @package framework
* @subpackage tests
*/
class GridFieldExportButtonTest_Team extends DataObject implements TestOnly {

private static $db = array(
Expand All @@ -109,3 +134,20 @@ public function canView($member = null) {

}

/**
* @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;
}

}

3 changes: 3 additions & 0 deletions tests/forms/gridfield/GridFieldExportButtonTest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ GridFieldExportButtonTest_Team:
Name: Test2
City: City2

GridFieldExportButtonTest_NoView:
item1:
Name: Foo

0 comments on commit abd1e6b

Please sign in to comment.