| 1 |
<?php |
<?php |
| 2 |
// $Id: file.field.inc,v 1.7 2009/10/15 12:44:36 dries Exp $ |
// $Id: file.field.inc,v 1.8 2009/10/31 16:06:36 dries Exp $ |
| 3 |
|
|
| 4 |
/** |
/** |
| 5 |
* @file |
* @file |
| 429 |
/** |
/** |
| 430 |
* Implementation of hook_field_widget(). |
* Implementation of hook_field_widget(). |
| 431 |
*/ |
*/ |
| 432 |
function file_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { |
function file_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { |
| 433 |
$form['#attributes'] = array('enctype' => 'multipart/form-data'); |
$form['#attributes'] = array('enctype' => 'multipart/form-data'); |
| 434 |
|
|
| 435 |
$defaults = array( |
$defaults = array( |
| 461 |
|
|
| 462 |
// Essentially we use the managed_file type, extended with some enhancements. |
// Essentially we use the managed_file type, extended with some enhancements. |
| 463 |
$element_info = element_info('managed_file'); |
$element_info = element_info('managed_file'); |
| 464 |
$element = array( |
$element += array( |
| 465 |
'#type' => 'managed_file', |
'#type' => 'managed_file', |
| 466 |
'#default_value' => isset($items[$delta]) ? $items[$delta] : $defaults, |
'#default_value' => isset($items[$delta]) ? $items[$delta] : $defaults, |
|
'#required' => $instance['required'], |
|
| 467 |
'#upload_location' => file_field_widget_uri($field, $instance), |
'#upload_location' => file_field_widget_uri($field, $instance), |
| 468 |
'#upload_validators' => file_field_widget_upload_validators($field, $instance), |
'#upload_validators' => file_field_widget_upload_validators($field, $instance), |
| 469 |
'#value_callback' => 'file_field_widget_value', |
'#value_callback' => 'file_field_widget_value', |
| 470 |
'#process' => array_merge($element_info['#process'], array('file_field_widget_process')), |
'#process' => array_merge($element_info['#process'], array('file_field_widget_process')), |
| 471 |
// Allows this field to return an array instead of a single value. |
// Allows this field to return an array instead of a single value. |
| 472 |
'#extended' => TRUE, |
'#extended' => TRUE, |
|
// Add extra Field properties. |
|
|
'#field_name' => $field['field_name'], |
|
|
'#bundle' => $instance['bundle'], |
|
|
'#object_type' => $instance['object_type'], |
|
| 473 |
); |
); |
| 474 |
|
|
| 475 |
if ($field['cardinality'] == 1) { |
if ($field['cardinality'] == 1) { |
| 476 |
// If there's only one field, return it as delta 0. |
// If there's only one field, return it as delta 0. |
|
$element['#title'] = $instance['label']; |
|
| 477 |
if (empty($element['#default_value']['fid'])) { |
if (empty($element['#default_value']['fid'])) { |
| 478 |
$element['#description'] = theme('file_upload_help', array('description' => $instance['description'], 'upload_validators' => $element['#upload_validators'])); |
$element['#description'] = theme('file_upload_help', array('description' => $element['#description'], 'upload_validators' => $element['#upload_validators'])); |
| 479 |
} |
} |
| 480 |
$elements = array($element); |
$elements = array($element); |
| 481 |
} |
} |
| 493 |
$elements[$delta] = $element; |
$elements[$delta] = $element; |
| 494 |
$elements[$delta]['#default_value'] = $defaults; |
$elements[$delta]['#default_value'] = $defaults; |
| 495 |
$elements[$delta]['#weight'] = $delta; |
$elements[$delta]['#weight'] = $delta; |
| 496 |
$elements[$delta]['#required'] = ($instance['required'] && $delta == 0); |
$elements[$delta]['#required'] = ($element['#required'] && $delta == 0); |
| 497 |
} |
} |
| 498 |
// The group of elements all-together need some extra functionality |
// The group of elements all-together need some extra functionality |
| 499 |
// after building up the full list (like draggable table rows). |
// after building up the full list (like draggable table rows). |
| 502 |
$elements['#theme_wrappers'] = array('fieldset'); |
$elements['#theme_wrappers'] = array('fieldset'); |
| 503 |
$elements['#attributes']['class'] = array('file-widget'); |
$elements['#attributes']['class'] = array('file-widget'); |
| 504 |
$elements['#process'] = array('file_field_widget_process_multiple'); |
$elements['#process'] = array('file_field_widget_process_multiple'); |
| 505 |
$elements['#title'] = $instance['label']; |
$elements['#title'] = $element['#title']; |
| 506 |
$elements['#description'] = $instance['description']; |
$elements['#description'] = $element['#description']; |
| 507 |
|
$elements['#object_type'] = $element['#object_type']; |
| 508 |
|
$elements['#bundle'] = $element['#bundle']; |
| 509 |
|
$elements['#field_name'] = $element['#field_name']; |
| 510 |
|
|
| 511 |
// Add some properties that will eventually be added to the file upload |
// Add some properties that will eventually be added to the file upload |
| 512 |
// field. These are added here so that they may be referenced easily through |
// field. These are added here so that they may be referenced easily through |