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() + ); + } }