diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-11-20 19:57:01 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2010-11-20 19:57:01 +0000 |
commit | 682481a259af5208fd59d747002eb19cf245875f (patch) | |
tree | 6bde6f899d38c264f18990f100408028a6fd30f3 /modules/field_ui | |
parent | 3b8e8ff6eb28261f3d3b0cb5a9edd00bd8fbdb1e (diff) | |
download | brdo-682481a259af5208fd59d747002eb19cf245875f.tar.gz brdo-682481a259af5208fd59d747002eb19cf245875f.tar.bz2 |
#942310 by an.droid, yched, fago, sun: Fixed Field form cannot be attached more than once
Diffstat (limited to 'modules/field_ui')
-rw-r--r-- | modules/field_ui/field_ui.admin.inc | 61 |
1 files changed, 40 insertions, 21 deletions
diff --git a/modules/field_ui/field_ui.admin.inc b/modules/field_ui/field_ui.admin.inc index 8c2bfb0ba..72fb6aab4 100644 --- a/modules/field_ui/field_ui.admin.inc +++ b/modules/field_ui/field_ui.admin.inc @@ -1912,7 +1912,9 @@ function field_ui_default_value_widget($field, $instance, &$form, &$form_state) '#collapsible' => FALSE, '#tree' => TRUE, '#description' => t('The default value for this field, used when creating new content.'), - // Make sure the values appear at the top-level of $form_state['values']. + // Stick to an empty 'parents' on this form in order not to breaks widgets + // that do not use field_widget_[field|instance]() and still access + // $form_state['field'] directly. '#parents' => array(), ); @@ -1920,8 +1922,9 @@ function field_ui_default_value_widget($field, $instance, &$form, &$form_state) $items = $instance['default_value']; $instance['required'] = FALSE; $instance['description'] = ''; + // @todo Allow multiple values (requires more work on 'add more' JS handler). - $element += field_default_form(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $form, $form_state, 0); + $element += field_default_form(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $element, $form_state, 0); return $element; } @@ -1930,22 +1933,34 @@ function field_ui_default_value_widget($field, $instance, &$form, &$form_state) * Form validation handler for field instance settings form. */ function field_ui_field_edit_form_validate($form, &$form_state) { + // Take the incoming values as the $instance definition, so that the 'default + // value' gets validated using the instance settings being submitted. $instance = $form_state['values']['instance']; $field_name = $instance['field_name']; - $field = field_info_field($field_name); - // Extract the 'default value'. - $items = array(); - field_default_extract_form_values(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $form, $form_state); - // Validate the value and report errors. - $errors = array(); - $function = $field['module'] . '_field_validate'; - if (function_exists($function)) { - $function(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $errors); - } - if (isset($errors[$field_name][LANGUAGE_NONE])) { - $form_state['field'][$field_name][LANGUAGE_NONE]['errors'] = $errors[$field_name][LANGUAGE_NONE]; - field_default_form_errors(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $form, $form_state); + if (isset($form['instance']['default_value_widget'])) { + $element = $form['instance']['default_value_widget']; + + $field_state = field_form_get_state($element['#parents'], $field_name, LANGUAGE_NONE, $form_state); + $field = $field_state['field']; + + // Extract the 'default value'. + $items = array(); + field_default_extract_form_values(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $element, $form_state); + + // Validate the value and report errors. + $errors = array(); + $function = $field['module'] . '_field_validate'; + if (function_exists($function)) { + $function(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $errors); + } + if (isset($errors[$field_name][LANGUAGE_NONE])) { + // Store reported errors in $form_state. + $field_state['errors'] = $errors[$field_name][LANGUAGE_NONE]; + field_form_set_state($element['#parents'], $field_name, LANGUAGE_NONE, $form_state, $field_state); + // Assign reported errors to the correct form element. + field_default_form_errors(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $element, $form_state); + } } } @@ -1962,12 +1977,16 @@ function field_ui_field_edit_form_submit($form, &$form_state) { field_update_field($field); // Handle the default value. - // Extract field values. - $items = array(); - field_default_extract_form_values(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $form, $form_state); - // Prepare field values. - field_default_submit(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $form, $form_state); - $instance['default_value'] = $items ? $items : NULL; + if (isset($form['instance']['default_value_widget'])) { + $element = $form['instance']['default_value_widget']; + + // Extract field values. + $items = array(); + field_default_extract_form_values(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $element, $form_state); + field_default_submit(NULL, NULL, $field, $instance, LANGUAGE_NONE, $items, $element, $form_state); + + $instance['default_value'] = $items ? $items : NULL; + } // Retrieve the stored instance settings to merge with the incoming values. $instance_source = field_read_instance($instance['entity_type'], $instance['field_name'], $instance['bundle']); |