function file_field_widget_form
file_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element)
Implements hook_field_widget_form().
File
- modules/file/file.field.inc, line 463
- Field module functionality for the File module.
Code
function file_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { $defaults = array( 'fid' => 0, 'display' => !empty($field['settings']['display_default']), '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'])) { $items = $field_state['items']; } // Essentially we use the managed_file type, extended with some enhancements. $element_info = element_info('managed_file'); $element += array( '#type' => 'managed_file', '#upload_location' => file_field_widget_uri($field, $instance), '#upload_validators' => file_field_widget_upload_validators($field, $instance), '#value_callback' => 'file_field_widget_value', '#process' => array_merge($element_info['#process'], array('file_field_widget_process')), '#progress_indicator' => $instance['widget']['settings']['progress_indicator'], // Allows this field to return an array instead of a single value. '#extended' => TRUE, ); 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'])); } $elements = array($element); } else { // If there are multiple values, add an element for each existing one. foreach ($items as $item) { $elements[$delta] = $element; $elements[$delta]['#default_value'] = $item; $elements[$delta]['#weight'] = $delta; $delta++; } // 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; $elements[$delta]['#weight'] = $delta; $elements[$delta]['#required'] = ($element['#required'] && $delta == 0); } // The group of elements all-together need some extra functionality // after building up the full list (like draggable table rows). $elements['#file_upload_delta'] = $delta; $elements['#theme'] = 'file_widget_multiple'; $elements['#theme_wrappers'] = array('fieldset'); $elements['#process'] = array('file_field_widget_process_multiple'); $elements['#title'] = $element['#title']; $elements['#description'] = $element['#description']; $elements['#field_name'] = $element['#field_name']; $elements['#language'] = $element['#language']; $elements['#display_field'] = $field['settings']['display_field']; // Add some properties that will eventually be added to the file upload // field. These are added here so that they may be referenced easily through // a hook_form_alter(). $elements['#file_upload_title'] = t('Add a new file'); $elements['#file_upload_description'] = theme('file_upload_help', array('description' => '', 'upload_validators' => $elements[0]['#upload_validators'])); } return $elements; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/modules!file!file.field.inc/function/file_field_widget_form/7.x