diff --git a/admin/code/SecurityAdmin.php b/admin/code/SecurityAdmin.php
index 0caf310a1..4e0690d90 100755
--- a/admin/code/SecurityAdmin.php
+++ b/admin/code/SecurityAdmin.php
@@ -52,14 +52,16 @@ class SecurityAdmin extends LeftAndMain implements PermissionProvider {
)->addExtraClass("members_grid");
$memberListConfig->getComponentByType('GridFieldDetailForm')->setValidator(new Member_Validator());
- $groupList = GridField::create( 'Groups',
+ $groupList = GridField::create(
+ 'Groups',
false,
DataList::create('Group'),
GridFieldConfig_RecordEditor::create()
- )->setDisplayFields(array(
+ );
+ $columns = $groupList->getConfig()->getComponentByType('GridFieldDataColumns');
+ $columns->setDisplayFields(array(
'Breadcrumbs' => singleton('Group')->fieldLabel('Title')
));
-
$fields = new FieldList(
$root = new TabSet(
diff --git a/forms/HtmlEditorField.php b/forms/HtmlEditorField.php
index 195a47752..ead1d5ff0 100644
--- a/forms/HtmlEditorField.php
+++ b/forms/HtmlEditorField.php
@@ -371,7 +371,8 @@ class HtmlEditorField_Toolbar extends RequestHandler {
$fileField->setList($this->getFiles($parentID));
$fileField->setAttribute('data-selectable', true);
$fileField->setAttribute('data-multiselect', true);
- $fileField->setDisplayFields(array(
+ $columns = $fileField->getConfig()->getComponentByType('GridFieldDataColumns');
+ $columns->setDisplayFields(array(
'CMSThumbnail' => false,
'Name' => _t('File.Name'),
));
diff --git a/forms/gridfield/GridField.php b/forms/gridfield/GridField.php
index 2c258fd92..74f6d8fa1 100755
--- a/forms/gridfield/GridField.php
+++ b/forms/gridfield/GridField.php
@@ -34,12 +34,6 @@ class GridField extends FormField {
/** @var string - the classname of the DataObject that the GridField will display. Defaults to the value of $this->list->dataClass */
protected $modelClassName = '';
-
- /** @var array */
- public $fieldCasting = array();
-
- /** @var array */
- public $fieldFormatting = array();
/** @var GridState - the current state of the GridField */
protected $state = null;
@@ -55,13 +49,6 @@ class GridField extends FormField {
*/
protected $components = array();
- /**
- * This is the columns that will be visible
- *
- * @var array
- */
- protected $displayFields = array();
-
/**
* Internal dispatcher for column handlers.
* Keys are column names and values are GridField_ColumnProvider objects
@@ -109,7 +96,7 @@ class GridField extends FormField {
* this modelclass $summary_fields
*
* @param string $modelClassName
- * @see GridField::getDisplayFields()
+ * @see GridFieldDataColumns::getDisplayFields()
*/
public function setModelClass($modelClassName) {
$this->modelClassName = $modelClassName;
@@ -143,19 +130,6 @@ class GridField extends FormField {
return $this;
}
- /**
- * Get the DisplayFields
- *
- * @return array
- * @see GridField::setDisplayFields
- */
- public function getDisplayFields() {
- if(!$this->displayFields) {
- return singleton($this->getModelClass())->summaryFields();
- }
- return $this->displayFields;
- }
-
/**
* Get the GridFieldConfig
*
@@ -165,63 +139,6 @@ class GridField extends FormField {
return $this->config;
}
- /**
- * Override the default behaviour of showing the models summaryFields with
- * these fields instead
- * Example: array( 'Name' => 'Members name', 'Email' => 'Email address')
- *
- * @param array $fields
- */
- public function setDisplayFields($fields) {
- if(!is_array($fields)) {
- throw new InvalidArgumentException('Arguments passed to GridField::setDisplayFields() must be an array');
- }
- $this->displayFields = $fields;
- return $this;
- }
-
- /**
- * Specify castings with fieldname as the key, and the desired casting as value.
- * Example: array("MyCustomDate"=>"Date","MyShortText"=>"Text->FirstSentence")
- *
- * @param array $casting
- * @todo refactor this into GridFieldComponent
- */
- public function setFieldCasting($casting) {
- $this->fieldCasting = $casting;
- return $this;
- }
-
- /**
- * Specify custom formatting for fields, e.g. to render a link instead of pure text.
- * Caution: Make sure to escape special php-characters like in a normal php-statement.
- * Example: "myFieldName" => '$ID'.
- * Alternatively, pass a anonymous function, which takes one parameter: The list item.
- *
- * @param array $casting
- * @todo refactor this into GridFieldComponent
- */
- public function getFieldCasting() {
- return $this->fieldCasting;
- }
-
- /**
- * @param array $casting
- * @todo refactor this into GridFieldComponent
- */
- public function setFieldFormatting($formatting) {
- $this->fieldFormatting = $formatting;
- return $this;
- }
-
- /**
- * @param array $casting
- * @todo refactor this into GridFieldComponent
- */
- public function getFieldFormatting() {
- return $this->fieldFormatting;
- }
-
/**
* Cast a arbitrary value with the help of a castingDefintion
*
diff --git a/forms/gridfield/GridFieldComponent.php b/forms/gridfield/GridFieldComponent.php
index dc35c1730..323520d83 100644
--- a/forms/gridfield/GridFieldComponent.php
+++ b/forms/gridfield/GridFieldComponent.php
@@ -36,7 +36,7 @@ interface GridField_ColumnProvider extends GridFieldComponent {
/**
* Modify the list of columns displayed in the table.
- * See {@link GridField->getDisplayFields()} and {@link GridFieldDataColumns}.
+ * See {@link GridFieldDataColumns->getDisplayFields()} and {@link GridFieldDataColumns}.
*
* @param GridField
* @param Array List reference of all column names.
diff --git a/forms/gridfield/GridFieldDataColumns.php b/forms/gridfield/GridFieldDataColumns.php
index 9ead7c663..24757facc 100644
--- a/forms/gridfield/GridFieldDataColumns.php
+++ b/forms/gridfield/GridFieldDataColumns.php
@@ -8,13 +8,92 @@
*/
class GridFieldDataColumns implements GridField_ColumnProvider {
+ /** @var array */
+ public $fieldCasting = array();
+
+ /** @var array */
+ public $fieldFormatting = array();
+
+ /**
+ * This is the columns that will be visible
+ *
+ * @var array
+ */
+ protected $displayFields = array();
+
public function augmentColumns($gridField, &$columns) {
- $baseColumns = array_keys($gridField->getDisplayFields());
+ $baseColumns = array_keys($this->getDisplayFields($gridField));
foreach($baseColumns as $col) $columns[] = $col;
}
public function getColumnsHandled($gridField) {
- return array_keys($gridField->getDisplayFields());
+ return array_keys($this->getDisplayFields($gridField));
+ }
+
+ /**
+ * Override the default behaviour of showing the models summaryFields with
+ * these fields instead
+ * Example: array( 'Name' => 'Members name', 'Email' => 'Email address')
+ *
+ * @param array $fields
+ */
+ public function setDisplayFields($fields) {
+ if(!is_array($fields)) {
+ throw new InvalidArgumentException('Arguments passed to GridFieldDataColumns::setDisplayFields() must be an array');
+ }
+ $this->displayFields = $fields;
+ return $this;
+ }
+
+ /**
+ * Get the DisplayFields
+ *
+ * @return array
+ * @see GridFieldDataColumns::setDisplayFields
+ */
+ public function getDisplayFields($gridField) {
+ if(!$this->displayFields) {
+ return singleton($gridField->getModelClass())->summaryFields();
+ }
+ return $this->displayFields;
+ }
+
+ /**
+ * Specify castings with fieldname as the key, and the desired casting as value.
+ * Example: array("MyCustomDate"=>"Date","MyShortText"=>"Text->FirstSentence")
+ *
+ * @param array $casting
+ */
+ public function setFieldCasting($casting) {
+ $this->fieldCasting = $casting;
+ return $this;
+ }
+
+ /**
+ * Specify custom formatting for fields, e.g. to render a link instead of pure text.
+ * Caution: Make sure to escape special php-characters like in a normal php-statement.
+ * Example: "myFieldName" => '$ID'.
+ * Alternatively, pass a anonymous function, which takes one parameter: The list item.
+ *
+ * @return array
+ */
+ public function getFieldCasting() {
+ return $this->fieldCasting;
+ }
+
+ /**
+ * @param array $formatting
+ */
+ public function setFieldFormatting($formatting) {
+ $this->fieldFormatting = $formatting;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getFieldFormatting() {
+ return $this->fieldFormatting;
}
/**
@@ -48,7 +127,7 @@ class GridFieldDataColumns implements GridField_ColumnProvider {
$tmpItem = $tmpItem->$relationMethod();
}
}
- }
+ }
}
$value = $this->castValue($gridField, $column, $value);
@@ -63,7 +142,7 @@ class GridFieldDataColumns implements GridField_ColumnProvider {
}
public function getColumnMetadata($gridField, $column) {
- $columns = $gridField->getDisplayFields();
+ $columns = $this->getDisplayFields($gridField);
return array(
'title' => $columns[$column],
);
@@ -76,8 +155,8 @@ class GridFieldDataColumns implements GridField_ColumnProvider {
* @return type
*/
protected function castValue($gridField, $fieldName, $value) {
- if(array_key_exists($fieldName, $gridField->FieldCasting)) {
- return $gridField->getCastedValue($value, $gridField->FieldCasting[$fieldName]);
+ if(array_key_exists($fieldName, $this->fieldCasting)) {
+ return $gridField->getCastedValue($value, $this->fieldCasting[$fieldName]);
} elseif(is_object($value) && method_exists($value, 'Nice')) {
return $value->Nice();
}
@@ -91,11 +170,11 @@ class GridFieldDataColumns implements GridField_ColumnProvider {
* @return type
*/
protected function formatValue($gridField, $item, $fieldName, $value) {
- if(!array_key_exists($fieldName, $gridField->FieldFormatting)) {
+ if(!array_key_exists($fieldName, $this->fieldFormatting)) {
return $value;
}
- $spec = $gridField->FieldFormatting[$fieldName];
+ $spec = $this->fieldFormatting[$fieldName];
if(is_callable($spec)) {
return $spec($item);
} else {
diff --git a/forms/gridfield/GridFieldExportButton.php b/forms/gridfield/GridFieldExportButton.php
index 72074d8dd..9cf968419 100644
--- a/forms/gridfield/GridFieldExportButton.php
+++ b/forms/gridfield/GridFieldExportButton.php
@@ -99,7 +99,7 @@ class GridFieldExportButton implements GridField_HTMLProvider, GridField_ActionP
*/
function generateExportFileData($gridField) {
$separator = $this->csvSeparator;
- $csvColumns = ($this->exportColumns) ? $this->exportColumns : $gridField->getDisplayFields();
+ $csvColumns = ($this->exportColumns) ? $this->exportColumns : singleton($gridField->getModelClass())->summaryFields();
$fileData = '';
$columnData = array();
$fieldItems = new ArrayList();
diff --git a/forms/gridfield/GridFieldPrintButton.php b/forms/gridfield/GridFieldPrintButton.php
index d40d507f7..da086cf88 100644
--- a/forms/gridfield/GridFieldPrintButton.php
+++ b/forms/gridfield/GridFieldPrintButton.php
@@ -94,7 +94,7 @@ class GridFieldPrintButton implements GridField_HTMLProvider, GridField_ActionPr
* Export core.
*/
function generatePrintData($gridField) {
- $printColumns = ($this->printColumns) ? $this->printColumns : $gridField->getDisplayFields();
+ $printColumns = ($this->printColumns) ? $this->printColumns : singleton($gridField->getModelClass())->summaryFields();
$header = null;
if($this->printHasHeader){
$header = new ArrayList();
diff --git a/tests/forms/GridFieldTest.php b/tests/forms/GridFieldTest.php
index 957801bff..4269a3f88 100644
--- a/tests/forms/GridFieldTest.php
+++ b/tests/forms/GridFieldTest.php
@@ -84,40 +84,6 @@ class GridFieldTest extends SapphireTest {
$obj->getModelClass();
}
- /**
- * @covers GridField::getDisplayFields
- */
- public function testGridFieldGetDefaultDisplayFields() {
- $obj = new GridField('testfield', 'testfield', DataList::create('Member'));
- $expected = array(
- 'FirstName' => 'First Name',
- 'Surname' => 'Last Name',
- 'Email' => 'Email',
- );
- $this->assertEquals($expected, $obj->getDisplayFields());
- }
-
- /**
- * @covers GridField::setDisplayFields
- * @covers GridField::getDisplayFields
- */
- public function testGridFieldCustomDisplayFields() {
- $obj = new GridField('testfield', 'testfield', DataList::create('Member'));
- $expected = array('Email' => 'Email');
- $obj->setDisplayFields($expected);
- $this->assertEquals($expected, $obj->getDisplayFields());
- }
-
- /**
- * @covers GridField::setDisplayFields
- * @covers GridField::getDisplayFields
- */
- public function testGridFieldDisplayFieldsWithBadArguments() {
- $this->setExpectedException('InvalidArgumentException');
- $obj = new GridField('testfield', 'testfield', DataList::create('Member'));
- $obj->setDisplayFields(new stdClass());
- }
-
/**
* @covers GridField::setList
* @covers GridField::getList
@@ -284,28 +250,6 @@ class GridFieldTest extends SapphireTest {
$this->assertEquals('handledAction is executed', $obj->handleAction('jump', array(), array()));
}
- /**
- * @covers GridField::getFieldCasting
- * @covers GridField::setFieldCasting
- */
- public function testFieldCasting() {
- $obj = new GridField('testfield', 'testfield');
- $this->assertEquals(array(), $obj->getFieldCasting());
- $obj->setFieldCasting(array("MyShortText"=>"Text->FirstSentence"));
- $this->assertEquals(array("MyShortText"=>"Text->FirstSentence"), $obj->getFieldCasting());
- }
-
- /**
- * @covers GridField::getFieldFormatting
- * @covers GridField::setFieldFormatting
- */
- public function testFieldFormatting() {
- $obj = new GridField('testfield', 'testfield');
- $this->assertEquals(array(), $obj->getFieldFormatting());
- $obj->setFieldFormatting(array("myFieldName" => '$ID'));
- $this->assertEquals(array("myFieldName" => '$ID'), $obj->getFieldFormatting());
- }
-
/**
* @covers GridField::getCastedValue
*/
diff --git a/tests/forms/gridfield/GridFieldDataColumnsTest.php b/tests/forms/gridfield/GridFieldDataColumnsTest.php
new file mode 100644
index 000000000..e7b60a625
--- /dev/null
+++ b/tests/forms/gridfield/GridFieldDataColumnsTest.php
@@ -0,0 +1,64 @@
+ 'First Name',
+ 'Surname' => 'Last Name',
+ 'Email' => 'Email',
+ );
+ $columns = $obj->getConfig()->getComponentByType('GridFieldDataColumns');
+ $this->assertEquals($expected, $columns->getDisplayFields($obj));
+ }
+
+ /**
+ * @covers GridFieldDataColumns::setDisplayFields
+ * @covers GridFieldDataColumns::getDisplayFields
+ */
+ public function testGridFieldCustomDisplayFields() {
+ $obj = new GridField('testfield', 'testfield', DataList::create('Member'));
+ $expected = array('Email' => 'Email');
+ $columns = $obj->getConfig()->getComponentByType('GridFieldDataColumns');
+ $columns->setDisplayFields($expected);
+ $this->assertEquals($expected, $columns->getDisplayFields($obj));
+ }
+
+ /**
+ * @covers GridFieldDataColumns::setDisplayFields
+ * @covers GridFieldDataColumns::getDisplayFields
+ */
+ public function testGridFieldDisplayFieldsWithBadArguments() {
+ $this->setExpectedException('InvalidArgumentException');
+ $obj = new GridField('testfield', 'testfield', DataList::create('Member'));
+ $columns = $obj->getConfig()->getComponentByType('GridFieldDataColumns');
+ $columns->setDisplayFields(new stdClass());
+ }
+
+ /**
+ * @covers GridFieldDataColumns::getFieldCasting
+ * @covers GridFieldDataColumns::setFieldCasting
+ */
+ public function testFieldCasting() {
+ $obj = new GridField('testfield', 'testfield');
+ $columns = $obj->getConfig()->getComponentByType('GridFieldDataColumns');
+ $this->assertEquals(array(), $columns->getFieldCasting());
+ $columns->setFieldCasting(array("MyShortText"=>"Text->FirstSentence"));
+ $this->assertEquals(array("MyShortText"=>"Text->FirstSentence"), $columns->getFieldCasting());
+ }
+
+ /**
+ * @covers GridFieldDataColumns::getFieldFormatting
+ * @covers GridFieldDataColumns::setFieldFormatting
+ */
+ public function testFieldFormatting() {
+ $obj = new GridField('testfield', 'testfield');
+ $columns = $obj->getConfig()->getComponentByType('GridFieldDataColumns');
+ $this->assertEquals(array(), $columns->getFieldFormatting());
+ $columns->setFieldFormatting(array("myFieldName" => '$ID'));
+ $this->assertEquals(array("myFieldName" => '$ID'), $columns->getFieldFormatting());
+ }
+}