summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwebchick2011-07-06 21:02:50 (GMT)
committer webchick2011-07-06 21:02:50 (GMT)
commitf6497d73572488a40de1daebcb45b0037356e6e7 (patch)
treef3681dcb0338a8823927bcd33638d89b857d13dd
parente4c2067520dc45932fec0f406cdbc3bc20322975 (diff)
Issue #1047070 by douggreen, marcingy, yched: Fixed list_field_update_forbid() logic is backwards.
-rw-r--r--modules/field/modules/list/list.module2
-rw-r--r--modules/field/modules/list/tests/list.test17
2 files changed, 18 insertions, 1 deletions
diff --git a/modules/field/modules/list/list.module b/modules/field/modules/list/list.module
index 608679b..2518ebc 100644
--- a/modules/field/modules/list/list.module
+++ b/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 a/modules/field/modules/list/tests/list.test b/modules/field/modules/list/tests/list.test
index 941d2b4..dec0956 100644
--- a/modules/field/modules/list/tests/list.test
+++ b/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);