function file_field_widget_process

An element #process callback for the file_generic field type.

Expands the file_generic type to include the description and display fields.

1 string reference to 'file_field_widget_process'
file_field_widget_form in modules/file/file.field.inc
Implements hook_field_widget_form().

File

modules/file/file.field.inc, line 624

Code

function file_field_widget_process($element, &$form_state, $form) {
    $item = $element['#value'];
    $item['fid'] = $element['fid']['#value'];
    $field = field_widget_field($element, $form_state);
    $instance = field_widget_instance($element, $form_state);
    $settings = $instance['widget']['settings'];
    $element['#theme'] = 'file_widget';
    // Add the display field if enabled.
    if (!empty($field['settings']['display_field'])) {
        $element['display'] = array(
            '#type' => empty($item['fid']) ? 'hidden' : 'checkbox',
            '#title' => t('Include file in display'),
            '#value' => isset($item['display']) ? $item['display'] : $field['settings']['display_default'],
            '#attributes' => array(
                'class' => array(
                    'file-display',
                ),
            ),
        );
    }
    else {
        $element['display'] = array(
            '#type' => 'hidden',
            '#value' => '1',
        );
    }
    // Add the description field if enabled.
    if (!empty($instance['settings']['description_field']) && $item['fid']) {
        $element['description'] = array(
            '#type' => variable_get('file_description_type', 'textfield'),
            '#title' => t('Description'),
            '#value' => isset($item['description']) ? $item['description'] : '',
            '#maxlength' => variable_get('file_description_length', 128),
            '#description' => t('The description may be used as the label of the link to the file.'),
        );
    }
    // Adjust the Ajax settings so that on upload and remove of any individual
    // file, the entire group of file fields is updated together.
    if ($field['cardinality'] != 1) {
        $parents = array_slice($element['#array_parents'], 0, -1);
        $new_path = 'file/ajax/' . implode('/', $parents) . '/' . $form['form_build_id']['#value'];
        $field_element = drupal_array_get_nested_value($form, $parents);
        $new_wrapper = $field_element['#id'] . '-ajax-wrapper';
        foreach (element_children($element) as $key) {
            if (isset($element[$key]['#ajax'])) {
                $element[$key]['#ajax']['path'] = $new_path;
                $element[$key]['#ajax']['wrapper'] = $new_wrapper;
            }
        }
        unset($element['#prefix'], $element['#suffix']);
    }
    // Add another submit handler to the upload and remove buttons, to implement
    // functionality needed by the field widget. This submit handler, along with
    // the rebuild logic in file_field_widget_form() requires the entire field,
    // not just the individual item, to be valid.
    foreach (array(
        'upload_button',
        'remove_button',
    ) as $key) {
        $element[$key]['#submit'][] = 'file_field_widget_submit';
        $element[$key]['#limit_validation_errors'] = array(
            array_slice($element['#parents'], 0, -1),
        );
    }
    return $element;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.