From 2eb652f264e266a68a814fc15d0802404811a08d Mon Sep 17 00:00:00 2001 From: micmania1 Date: Tue, 19 Apr 2016 22:40:37 +0000 Subject: [PATCH 1/3] NEW added value top options --- .../editableformfields/EditableMultipleOptionField.php | 10 ++++++++-- code/model/editableformfields/EditableOption.php | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/code/model/editableformfields/EditableMultipleOptionField.php b/code/model/editableformfields/EditableMultipleOptionField.php index 7b3ef28..08ee2a4 100644 --- a/code/model/editableformfields/EditableMultipleOptionField.php +++ b/code/model/editableformfields/EditableMultipleOptionField.php @@ -40,7 +40,13 @@ class EditableMultipleOptionField extends EditableFormField { 'callback' => function($record, $column, $grid) { return TextField::create($column); } - ), + ), + 'Value' => array( + 'title' => _t('EditableMultipleOptionField.VALUE', 'Value'), + 'callback' => function($record, $column, $grid) { + return TextField::create($column); + } + ), 'Default' => array( 'title' => _t('EditableMultipleOptionField.DEFAULT', 'Selected by default?'), 'callback' => function($record, $column, $grid) { @@ -171,7 +177,7 @@ class EditableMultipleOptionField extends EditableFormField { */ protected function getOptionsMap() { $optionSet = $this->Options(); - $optionMap = $optionSet->map('EscapedTitle', 'Title'); + $optionMap = $optionSet->map('Value', 'Title'); if($optionMap instanceof SS_Map) { return $optionMap->toArray(); } diff --git a/code/model/editableformfields/EditableOption.php b/code/model/editableformfields/EditableOption.php index 16812f5..775733e 100644 --- a/code/model/editableformfields/EditableOption.php +++ b/code/model/editableformfields/EditableOption.php @@ -15,7 +15,8 @@ class EditableOption extends DataObject { "Name" => "Varchar(255)", "Title" => "Varchar(255)", "Default" => "Boolean", - "Sort" => "Int" + "Sort" => "Int", + "Value" => "Varchar(255)", ); private static $has_one = array( From d614f9b382c959eb418c30348f0b9a5df94e62c8 Mon Sep 17 00:00:00 2001 From: micmania1 Date: Fri, 22 Apr 2016 03:44:12 +0000 Subject: [PATCH 2/3] Updated unit tests to match new value column --- tests/EditableFormFieldTest.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/EditableFormFieldTest.yml b/tests/EditableFormFieldTest.yml index 1f6df12..e4f308f 100644 --- a/tests/EditableFormFieldTest.yml +++ b/tests/EditableFormFieldTest.yml @@ -8,34 +8,42 @@ EditableOption: option-1: Name: Option1 Title: Option 1 + Value: Option 1 option-2: Name: Option2 Title: Option 2 + Value: Option 2 department-1: Name: dept1 Title: sales@example.com + Value: sales@example.com department-2: Name: dept2 Title: accounts@example.com + Value: accounts@example.com option-3: Name: Option3 Title: Option 3 + Value: Option 3 option-4: Name: Option4 Title: Option 4 + Value: Option 4 option-5: Name: Option5 Title: Option 5 + Value: Option 5 option-6: Name: Option6 Title: Option 6 + Value: Option 6 UserDefinedForm_EmailRecipient: recipient-1: @@ -52,7 +60,7 @@ UserDefinedForm_EmailRecipient: no-data: EmailAddress: nodata@example.com EmailSubject: Email Subject - EmailFrom: no-reply@example.com + EmailFrom: no-reply@example.com HideFormData: true EditableTextField: From cb605d563390a685a0ccdb0d10e6ec203a82fe3b Mon Sep 17 00:00:00 2001 From: micmania1 Date: Tue, 19 Apr 2016 22:40:37 +0000 Subject: [PATCH 3/3] 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');