| 1 |
<?php |
<?php |
| 2 |
// $Id: field.form.inc,v 1.30 2009/10/31 14:58:41 webchick Exp $ |
// $Id: field.form.inc,v 1.31 2009/10/31 16:06:35 dries Exp $ |
| 3 |
|
|
| 4 |
/** |
/** |
| 5 |
* @file |
* @file |
| 57 |
$delta = isset($get_delta) ? $get_delta : 0; |
$delta = isset($get_delta) ? $get_delta : 0; |
| 58 |
$function = $instance['widget']['module'] . '_field_widget'; |
$function = $instance['widget']['module'] . '_field_widget'; |
| 59 |
if (function_exists($function)) { |
if (function_exists($function)) { |
| 60 |
if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta)) { |
$element = array( |
| 61 |
$defaults = array( |
'#object_type' => $instance['object_type'], |
| 62 |
'#required' => $get_delta > 0 ? FALSE : $instance['required'], |
'#bundle' => $instance['bundle'], |
| 63 |
'#columns' => array_keys($field['columns']), |
'#field_name' => $field['field_name'], |
| 64 |
'#title' => check_plain(t($instance['label'])), |
'#columns' => array_keys($field['columns']), |
| 65 |
'#description' => field_filter_xss($instance['description']), |
'#title' => check_plain(t($instance['label'])), |
| 66 |
'#delta' => $delta, |
'#description' => field_filter_xss($instance['description']), |
| 67 |
'#field_name' => $field['field_name'], |
// Only the first widget should be required. |
| 68 |
'#bundle' => $instance['bundle'], |
'#required' => $delta == 0 && $instance['required'], |
| 69 |
'#object_type' => $instance['object_type'], |
'#delta' => $delta, |
| 70 |
); |
); |
| 71 |
$element = array_merge($element, $defaults); |
if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) { |
| 72 |
// If we're processing a specific delta value for a field where the |
// If we're processing a specific delta value for a field where the |
| 73 |
// field module handles multiples, set the delta in the result. |
// field module handles multiples, set the delta in the result. |
| 74 |
// For fields that handle their own processing, we can't make assumptions |
// For fields that handle their own processing, we can't make assumptions |
| 84 |
} |
} |
| 85 |
|
|
| 86 |
if ($form_element) { |
if ($form_element) { |
|
$defaults = array( |
|
|
'#field_name' => $field['field_name'], |
|
|
'#tree' => TRUE, |
|
|
'#weight' => $instance['widget']['weight'], |
|
|
); |
|
|
|
|
|
$form_element = array_merge($form_element, $defaults); |
|
|
|
|
| 87 |
// Add the field form element as a child keyed by language code to match the |
// Add the field form element as a child keyed by language code to match the |
| 88 |
// field data structure: $object->{$field_name}[$langcode][$delta][$column]. |
// field data structure: $object->{$field_name}[$langcode][$delta][$column]. |
| 89 |
// The '#language' key can be used to access the field's form element when |
// The '#language' key can be used to access the field's form element when |
| 91 |
// form element. |
// form element. |
| 92 |
$addition[$field['field_name']] = array( |
$addition[$field['field_name']] = array( |
| 93 |
'#tree' => TRUE, |
'#tree' => TRUE, |
| 94 |
'#weight' => $form_element['#weight'], |
'#weight' => $instance['widget']['weight'], |
| 95 |
'#language' => $langcode, |
'#language' => $langcode, |
| 96 |
$langcode => $form_element, |
$langcode => $form_element, |
| 97 |
); |
); |
| 137 |
|
|
| 138 |
$form_element = array( |
$form_element = array( |
| 139 |
'#theme' => 'field_multiple_value_form', |
'#theme' => 'field_multiple_value_form', |
| 140 |
|
'#field_name' => $field['field_name'], |
| 141 |
'#cardinality' => $field['cardinality'], |
'#cardinality' => $field['cardinality'], |
| 142 |
'#title' => $title, |
'#title' => $title, |
| 143 |
'#required' => $instance['required'], |
'#required' => $instance['required'], |
| 150 |
$function = $instance['widget']['module'] . '_field_widget'; |
$function = $instance['widget']['module'] . '_field_widget'; |
| 151 |
if (function_exists($function)) { |
if (function_exists($function)) { |
| 152 |
for ($delta = 0; $delta <= $max; $delta++) { |
for ($delta = 0; $delta <= $max; $delta++) { |
| 153 |
if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta)) { |
$multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED; |
| 154 |
$multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED; |
$element = array( |
| 155 |
$defaults = array( |
'#object_type' => $instance['object_type'], |
| 156 |
// For multiple fields, title and description are handled by the wrapping table. |
'#bundle' => $instance['bundle'], |
| 157 |
'#title' => $multiple ? '' : $title, |
'#field_name' => $field_name, |
| 158 |
'#description' => $multiple ? '' : $description, |
'#columns' => array_keys($field['columns']), |
| 159 |
'#required' => $delta == 0 && $instance['required'], |
// For multiple fields, title and description are handled by the wrapping table. |
| 160 |
'#weight' => $delta, |
'#title' => $multiple ? '' : $title, |
| 161 |
'#delta' => $delta, |
'#description' => $multiple ? '' : $description, |
| 162 |
'#columns' => array_keys($field['columns']), |
// Only the first widget should be required. |
| 163 |
'#field_name' => $field_name, |
'#required' => $delta == 0 && $instance['required'], |
| 164 |
'#object_type' => $instance['object_type'], |
'#delta' => $delta, |
| 165 |
'#bundle' => $instance['bundle'], |
'#weight' => $delta, |
| 166 |
); |
); |
| 167 |
|
if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) { |
| 168 |
// Input field for the delta (drag-n-drop reordering). |
// Input field for the delta (drag-n-drop reordering). |
| 169 |
if ($multiple) { |
if ($multiple) { |
| 170 |
// We name the element '_weight' to avoid clashing with elements |
// We name the element '_weight' to avoid clashing with elements |
| 177 |
'#weight' => 100, |
'#weight' => 100, |
| 178 |
); |
); |
| 179 |
} |
} |
| 180 |
|
$form_element[$delta] = $element; |
|
$form_element[$delta] = array_merge($element, $defaults); |
|
| 181 |
} |
} |
| 182 |
} |
} |
| 183 |
|
|
| 184 |
// Add 'add more' button, if not working with a programmed form. |
// Add 'add more' button, if not working with a programmed form. |
| 185 |
if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED && empty($form_state['programmed'])) { |
if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED && empty($form_state['programmed'])) { |
|
|
|
| 186 |
$form_element[$field_name . '_add_more'] = array( |
$form_element[$field_name . '_add_more'] = array( |
| 187 |
'#type' => 'submit', |
'#type' => 'submit', |
| 188 |
'#name' => $field_name . '_add_more', |
'#name' => $field_name . '_add_more', |