From 404f450ac395143eee6bedd131b1c80f5742f8bd Mon Sep 17 00:00:00 2001 From: Martin Heise Date: Thu, 16 Jul 2020 14:40:10 +0200 Subject: [PATCH] BUG Readonly version of GroupedDropdownField GroupedDropdownField was showing empty values in Readonly mode due to not correctly handling the hierarchical source array. Uses flattened source now in GroupedDropdownField->performReadonlyTransformation() --- src/Forms/GroupedDropdownField.php | 11 ++++++ tests/php/Forms/GroupedDropdownFieldTest.php | 35 ++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/Forms/GroupedDropdownField.php b/src/Forms/GroupedDropdownField.php index 2dfd1e974..feb758361 100644 --- a/src/Forms/GroupedDropdownField.php +++ b/src/Forms/GroupedDropdownField.php @@ -2,6 +2,7 @@ namespace SilverStripe\Forms; +use SilverStripe\ORM\ArrayLib; use SilverStripe\ORM\ArrayList; use SilverStripe\View\ArrayData; @@ -104,4 +105,14 @@ class GroupedDropdownField extends DropdownField ); return $values; } + + /** + * @return SingleLookupField + */ + public function performReadonlyTransformation() + { + $field = parent::performReadonlyTransformation(); + $field->setSource(ArrayLib::flatten($this->getSource())); + return $field; + } } diff --git a/tests/php/Forms/GroupedDropdownFieldTest.php b/tests/php/Forms/GroupedDropdownFieldTest.php index 47fb93fcc..fabb419b0 100644 --- a/tests/php/Forms/GroupedDropdownFieldTest.php +++ b/tests/php/Forms/GroupedDropdownFieldTest.php @@ -129,4 +129,39 @@ class GroupedDropdownFieldTest extends SapphireTest preg_replace('/\s+/', ' ', (string)$field->Field()) ); } + + /** + * Test that readonly version of GroupedDropdownField displays all values + */ + public function testReadonlyValue() + { + $field = GroupedDropdownField::create( + 'Test', + 'Testing', + [ + "1" => "One", + "Group One" => [ + "2" => "Two", + "3" => "Three" + ], + "Group Two" => [ + "4" => "Four" + ], + ] + ); + + // value on first level + $field->setValue("1"); + $this->assertRegExp( + '/One<\/span>/', + (string)$field->performReadonlyTransformation()->Field() + ); + + // value on first level + $field->setValue("2"); + $this->assertRegExp( + '/Two<\/span>/', + (string)$field->performReadonlyTransformation()->Field() + ); + } }