Created
July 14, 2011 09:55
-
-
Save boombatower/1082207 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git modules/field/modules/list/list.module modules/field/modules/list/list.module | |
| index 608679b..2518ebc 100644 | |
| --- modules/field/modules/list/list.module | |
| +++ modules/field/modules/list/list.module | |
| @@ -343,7 +343,7 @@ function list_allowed_values_string($values) { | |
| function list_field_update_forbid($field, $prior_field, $has_data) { | |
| if ($field['module'] == 'list' && $has_data) { | |
| // Forbid any update that removes allowed values with actual data. | |
| - $lost_keys = array_diff(array_keys($field['settings']['allowed_values']), array_keys($prior_field['settings']['allowed_values'])); | |
| + $lost_keys = array_diff(array_keys($prior_field['settings']['allowed_values']), array_keys($field['settings']['allowed_values'])); | |
| if (_list_values_in_use($field, $lost_keys)) { | |
| throw new FieldUpdateForbiddenException(t('Cannot update a list field to not include keys with existing data.')); | |
| } | |
| diff --git modules/field/modules/list/tests/list.test modules/field/modules/list/tests/list.test | |
| index 941d2b4..dec0956 100644 | |
| --- modules/field/modules/list/tests/list.test | |
| +++ modules/field/modules/list/tests/list.test | |
| @@ -55,6 +55,23 @@ class ListFieldTestCase extends FieldTestCase { | |
| $this->assertTrue(!empty($form[$this->field_name][$langcode][2]), t('Option 2 exists')); | |
| $this->assertTrue(!empty($form[$this->field_name][$langcode][3]), t('Option 3 exists')); | |
| + // Use one of the values in an actual entity, and check that this value | |
| + // cannot be removed from the list. | |
| + $entity = field_test_create_stub_entity(); | |
| + $entity->{$this->field_name}[$langcode][0] = array('value' => 1); | |
| + field_test_entity_save($entity); | |
| + $this->field['settings']['allowed_values'] = array(2 => 'Two'); | |
| + try { | |
| + field_update_field($this->field); | |
| + $this->fail(t('Cannot update a list field to not include keys with existing data.')); | |
| + } | |
| + catch (FieldException $e) { | |
| + $this->pass(t('Cannot update a list field to not include keys with existing data.')); | |
| + } | |
| + // Empty the value, so that we can actually remove the option. | |
| + $entity->{$this->field_name}[$langcode] = array(); | |
| + field_test_entity_save($entity); | |
| + | |
| // Removed options do not appear. | |
| $this->field['settings']['allowed_values'] = array(2 => 'Two'); | |
| field_update_field($this->field); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment