summaryrefslogtreecommitdiff
path: root/modules/field_ui
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-11-20 19:57:01 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-11-20 19:57:01 +0000
commit682481a259af5208fd59d747002eb19cf245875f (patch)
tree6bde6f899d38c264f18990f100408028a6fd30f3 /modules/field_ui
parent3b8e8ff6eb28261f3d3b0cb5a9edd00bd8fbdb1e (diff)
downloadbrdo-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.inc61
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']);