diff --git a/modules/file/file.field.inc b/modules/file/file.field.inc index 6284cfa..9206342 100644 --- a/modules/file/file.field.inc +++ b/modules/file/file.field.inc @@ -447,9 +447,11 @@ function file_field_widget_form(&$form, &$form_state, $field, $instance, $langco 'description' => '', ); + // Load the items for form rebuilds from the field state as they might not be + // in $form_state['values'] because of validation limitations. Also, they are + // only passed in as $items when editing existing entities. $field_state = field_form_get_state($element['#field_parents'], $field['field_name'], $langcode, $form_state); if (isset($field_state['items'])) { - // Use items array from the field state if there is any. $items = $field_state['items']; } @@ -457,7 +459,6 @@ function file_field_widget_form(&$form, &$form_state, $field, $instance, $langco $element_info = element_info('managed_file'); $element += array( '#type' => 'managed_file', - '#default_value' => !empty($items) ? $items[0] : $defaults, '#upload_location' => file_field_widget_uri($field, $instance), '#upload_validators' => file_field_widget_upload_validators($field, $instance), '#value_callback' => 'file_field_widget_value', @@ -467,6 +468,8 @@ function file_field_widget_form(&$form, &$form_state, $field, $instance, $langco ); if ($field['cardinality'] == 1) { + // Set the default value. + $element['#default_value'] = !empty($items) ? $items[0] : $defaults; // If there's only one field, return it as delta 0. if (empty($element['#default_value']['fid'])) { $element['#description'] = theme('file_upload_help', array('description' => $element['#description'], 'upload_validators' => $element['#upload_validators'])); @@ -474,7 +477,6 @@ function file_field_widget_form(&$form, &$form_state, $field, $instance, $langco $elements = array($element); } else { - // If there are multiple values, add an element for each existing one. foreach ($items as $item) { $elements[$delta] = $element; @@ -482,7 +484,8 @@ function file_field_widget_form(&$form, &$form_state, $field, $instance, $langco $elements[$delta]['#weight'] = $delta; $delta++; } - // And then add one more empty row for new uploads. + // And then add one more empty row for new uploads except when this is a + // programmed form as it is not necessary. if (($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED || $delta < $field['cardinality']) && empty($form_state['programmed'])) { $elements[$delta] = $element; $elements[$delta]['#default_value'] = $defaults; @@ -752,7 +755,6 @@ function file_field_widget_submit($form, &$form_state) { unset($submitted_values[$delta]); } } - $count = count($submitted_values); // Re-index deltas after removing empty items. $submitted_values = array_values($submitted_values); @@ -760,7 +762,7 @@ function file_field_widget_submit($form, &$form_state) { // Update form_state values. drupal_array_set_nested_value($form_state['values'], array_slice($button['#array_parents'], 0, -2), $submitted_values); - // Update items count. + // Update items. $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state); $field_state['items'] = $submitted_values; field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);