From cb605d563390a685a0ccdb0d10e6ec203a82fe3b Mon Sep 17 00:00:00 2001 From: micmania1 Date: Tue, 19 Apr 2016 22:40:37 +0000 Subject: [PATCH] NEW Added option to allow empty values --- .../editableformfields/EditableOption.php | 35 +++++++++++++++++++ tests/EditableFormFieldTest.php | 20 +++++++++++ 2 files changed, 55 insertions(+) diff --git a/code/model/editableformfields/EditableOption.php b/code/model/editableformfields/EditableOption.php index 775733e..01c1793 100644 --- a/code/model/editableformfields/EditableOption.php +++ b/code/model/editableformfields/EditableOption.php @@ -32,6 +32,26 @@ class EditableOption extends DataObject { 'Default' ); + protected static $allow_empty_values = false; + + /** + * Returns whether to allow empty values or not. + * + * @return boolean + */ + public static function allow_empty_values() { + return (bool) self::$allow_empty_values; + } + + /** + * Set whether to allow empty values. + * + * @param boolean $allow + */ + public static function set_allow_empty_values($allow) { + self::$allow_empty_values = (bool) $allow; + } + /** * @param Member $member * @@ -115,4 +135,19 @@ class EditableOption extends DataObject { public function canUnpublish($member = null) { return $this->canDelete($member); } + + /** + * Fetches a value for $this->Value. If empty values are not allowed, + * then this will return the title in the case of an empty value. + * + * @return string + */ + public function getValue() + { + $value = $this->getField('Value'); + if(empty($value) && !self::allow_empty_values()) { + return $this->Title; + } + return $value; + } } diff --git a/tests/EditableFormFieldTest.php b/tests/EditableFormFieldTest.php index 484492d..0790ca6 100644 --- a/tests/EditableFormFieldTest.php +++ b/tests/EditableFormFieldTest.php @@ -70,6 +70,26 @@ class EditableFormFieldTest extends FunctionalTest { $this->assertEquals(0, $checkbox->EffectiveDisplayRules()->count()); } + /** + * @covers EditableOption::getValue + */ + public function testEditableOptionEmptyValue() { + $option = $this->objFromFixture('EditableOption', 'option-1'); + $option->Value = ''; + + // Disallow empty values + EditableOption::set_allow_empty_values(false); + $this->assertEquals($option->Title, $option->Value); + + $option->Value = 'test'; + $this->assertEquals('test', $option->Value); + + // Allow empty values + EditableOption::set_allow_empty_values(true); + $option->Value = ''; + $this->assertEquals('', $option->Value); + } + function testEditableDropdownField() { $dropdown = $this->objFromFixture('EditableDropdown', 'basic-dropdown');