View source
<?php
function field_group_multiple_file_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$defaults = array(
'fid' => 0,
'display' => !empty($field['settings']['display_default']),
'description' => '',
);
$field_state = field_form_get_state($element['#field_parents'], $field['field_name'], $langcode, $form_state);
if (isset($field_state['items'])) {
$items = $field_state['items'];
}
if (isset($items[$delta])) {
$tmp = $items[$delta];
$items[0] = $tmp;
}
$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(
'field_group_multiple_file_field_widget_process',
)),
'#progress_indicator' => $instance['widget']['settings']['progress_indicator'],
'#extended' => TRUE,
);
if (true || $field['cardinality'] == 1) {
$element['#default_value'] = !empty($items) ? $items[0] : $defaults;
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 {
foreach ($items as $item) {
$elements[$delta] = $element;
$elements[$delta]['#default_value'] = $item;
$elements[$delta]['#weight'] = $delta;
$delta++;
}
$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'];
$elements['#file_upload_title'] = t('Add a new file');
$elements['#file_upload_description'] = theme('file_upload_help', array(
'description' => '',
'upload_validators' => $elements[$delta]['#upload_validators'],
));
}
return $elements;
}
function field_group_multiple_file_field_widget_process($element, &$form_state, $form) {
$prefix = $element['#prefix'];
$suffix = $element['#suffix'];
$backup_ajax = array();
foreach (element_children($element) as $key) {
if (isset($element[$key]['#ajax'])) {
$backup_ajax[$key]['#ajax']['path'] = $element[$key]['#ajax']['path'];
$backup_ajax[$key]['#ajax']['wrapper'] = $element[$key]['#ajax']['wrapper'];
}
}
$element = file_field_widget_process($element, $form_state, $form);
foreach (element_children($element) as $key) {
if (isset($backup_ajax[$key]['#ajax'])) {
$element[$key]['#ajax']['path'] = $backup_ajax[$key]['#ajax']['path'];
$element[$key]['#ajax']['wrapper'] = $backup_ajax[$key]['#ajax']['wrapper'];
}
}
$element['#prefix'] = $prefix;
$element['#suffix'] = $suffix;
return $element;
}
function field_group_multiple_process_field_file_submit(&$values, $field_name, $langcode, $field_info, $form_values) {
$function = $field_info['module'] . '_field_is_empty';
foreach ($form_values as $delta => $value) {
if (isset($value[$field_name])) {
if (isset($value[$field_name]['0'])) {
$values[$field_name]['empty'][$delta] = $function($value[$field_name]['0'], $field_info);
$values[$field_name]['values'][$langcode][$delta] = $value[$field_name]['0'];
if ($values[$field_name]['empty'][$delta]) {
$values[$field_name]['values'][$langcode][$delta] = null;
}
}
}
}
}