Issue #1047070 by douggreen, marcingy, yched: Fixed list_field_update_forbid() logic is backwards.
parent
d732bf85d9
commit
1f00fb6cc7
|
@ -343,7 +343,7 @@ function list_allowed_values_string($values) {
|
||||||
function list_field_update_forbid($field, $prior_field, $has_data) {
|
function list_field_update_forbid($field, $prior_field, $has_data) {
|
||||||
if ($field['module'] == 'list' && $has_data) {
|
if ($field['module'] == 'list' && $has_data) {
|
||||||
// Forbid any update that removes allowed values with actual 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)) {
|
if (_list_values_in_use($field, $lost_keys)) {
|
||||||
throw new FieldUpdateForbiddenException(t('Cannot update a list field to not include keys with existing data.'));
|
throw new FieldUpdateForbiddenException(t('Cannot update a list field to not include keys with existing data.'));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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][2]), t('Option 2 exists'));
|
||||||
$this->assertTrue(!empty($form[$this->field_name][$langcode][3]), t('Option 3 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.
|
// Removed options do not appear.
|
||||||
$this->field['settings']['allowed_values'] = array(2 => 'Two');
|
$this->field['settings']['allowed_values'] = array(2 => 'Two');
|
||||||
field_update_field($this->field);
|
field_update_field($this->field);
|
||||||
|
|
Loading…
Reference in New Issue