diff options
Diffstat (limited to 'modules/field')
-rw-r--r-- | modules/field/field.api.php | 8 | ||||
-rw-r--r-- | modules/field/field.form.inc | 69 | ||||
-rw-r--r-- | modules/field/modules/number/number.module | 32 | ||||
-rw-r--r-- | modules/field/modules/options/options.module | 4 | ||||
-rw-r--r-- | modules/field/modules/text/text.module | 37 |
5 files changed, 42 insertions, 108 deletions
diff --git a/modules/field/field.api.php b/modules/field/field.api.php index fcf78b36d..6248842b7 100644 --- a/modules/field/field.api.php +++ b/modules/field/field.api.php @@ -632,11 +632,15 @@ function hook_field_widget_info_alter(&$info) { * Array of default values for this field. * @param $delta * The order of this item in the array of subelements (0, 1, 2, etc). + * @param $element + * A form element array containing basic properties for the widget: #title, + * #description, #required, #field, #field_instance, #field_name, #delta, + * #columns. * @return * The form item for a single element for this field. */ -function hook_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { - $element = array( +function hook_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => isset($items[$delta]) ? $items[$delta] : '', ); diff --git a/modules/field/field.form.inc b/modules/field/field.form.inc index cce52e47a..ea8bd3105 100644 --- a/modules/field/field.form.inc +++ b/modules/field/field.form.inc @@ -57,18 +57,18 @@ function field_default_form($obj_type, $object, $field, $instance, $langcode, $i $delta = isset($get_delta) ? $get_delta : 0; $function = $instance['widget']['module'] . '_field_widget'; if (function_exists($function)) { - if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta)) { - $defaults = array( - '#required' => $get_delta > 0 ? FALSE : $instance['required'], - '#columns' => array_keys($field['columns']), - '#title' => check_plain(t($instance['label'])), - '#description' => field_filter_xss($instance['description']), - '#delta' => $delta, - '#field_name' => $field['field_name'], - '#bundle' => $instance['bundle'], - '#object_type' => $instance['object_type'], - ); - $element = array_merge($element, $defaults); + $element = array( + '#object_type' => $instance['object_type'], + '#bundle' => $instance['bundle'], + '#field_name' => $field['field_name'], + '#columns' => array_keys($field['columns']), + '#title' => check_plain(t($instance['label'])), + '#description' => field_filter_xss($instance['description']), + // Only the first widget should be required. + '#required' => $delta == 0 && $instance['required'], + '#delta' => $delta, + ); + if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) { // If we're processing a specific delta value for a field where the // field module handles multiples, set the delta in the result. // For fields that handle their own processing, we can't make assumptions @@ -84,14 +84,6 @@ function field_default_form($obj_type, $object, $field, $instance, $langcode, $i } if ($form_element) { - $defaults = array( - '#field_name' => $field['field_name'], - '#tree' => TRUE, - '#weight' => $instance['widget']['weight'], - ); - - $form_element = array_merge($form_element, $defaults); - // Add the field form element as a child keyed by language code to match the // field data structure: $object->{$field_name}[$langcode][$delta][$column]. // The '#language' key can be used to access the field's form element when @@ -99,7 +91,7 @@ function field_default_form($obj_type, $object, $field, $instance, $langcode, $i // form element. $addition[$field['field_name']] = array( '#tree' => TRUE, - '#weight' => $form_element['#weight'], + '#weight' => $instance['widget']['weight'], '#language' => $langcode, $langcode => $form_element, ); @@ -145,6 +137,7 @@ function field_multiple_value_form($field, $instance, $langcode, $items, &$form, $form_element = array( '#theme' => 'field_multiple_value_form', + '#field_name' => $field['field_name'], '#cardinality' => $field['cardinality'], '#title' => $title, '#required' => $instance['required'], @@ -157,21 +150,21 @@ function field_multiple_value_form($field, $instance, $langcode, $items, &$form, $function = $instance['widget']['module'] . '_field_widget'; if (function_exists($function)) { for ($delta = 0; $delta <= $max; $delta++) { - if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta)) { - $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED; - $defaults = array( - // For multiple fields, title and description are handled by the wrapping table. - '#title' => $multiple ? '' : $title, - '#description' => $multiple ? '' : $description, - '#required' => $delta == 0 && $instance['required'], - '#weight' => $delta, - '#delta' => $delta, - '#columns' => array_keys($field['columns']), - '#field_name' => $field_name, - '#object_type' => $instance['object_type'], - '#bundle' => $instance['bundle'], - ); - + $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED; + $element = array( + '#object_type' => $instance['object_type'], + '#bundle' => $instance['bundle'], + '#field_name' => $field_name, + '#columns' => array_keys($field['columns']), + // For multiple fields, title and description are handled by the wrapping table. + '#title' => $multiple ? '' : $title, + '#description' => $multiple ? '' : $description, + // Only the first widget should be required. + '#required' => $delta == 0 && $instance['required'], + '#delta' => $delta, + '#weight' => $delta, + ); + if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) { // Input field for the delta (drag-n-drop reordering). if ($multiple) { // We name the element '_weight' to avoid clashing with elements @@ -184,14 +177,12 @@ function field_multiple_value_form($field, $instance, $langcode, $items, &$form, '#weight' => 100, ); } - - $form_element[$delta] = array_merge($element, $defaults); + $form_element[$delta] = $element; } } // Add 'add more' button, if not working with a programmed form. if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED && empty($form_state['programmed'])) { - $form_element[$field_name . '_add_more'] = array( '#type' => 'submit', '#name' => $field_name . '_add_more', diff --git a/modules/field/modules/number/number.module b/modules/field/modules/number/number.module index 1dcd08e22..7da8f2b67 100644 --- a/modules/field/modules/number/number.module +++ b/modules/field/modules/number/number.module @@ -313,37 +313,9 @@ function number_element_info() { /** * Implement hook_field_widget(). - * - * Attach a single form element to the form. It will be built out and - * validated in the callback(s) listed in hook_element_info(). We build it - * out in the callbacks rather than here in hook_widget so it can be - * plugged into any module that can provide it with valid - * $field information. - * - * Field module will set the weight, field name and delta values - * for each form element. - * - * If there are multiple values for this field, the Field module will - * call this function as many times as needed. - * - * @param $form - * the entire form array, $form['#node'] holds node information - * @param $form_state - * the form_state, $form_state['values'] holds the form values. - * @param $field - * The field structure. - * @param $instance - * the field instance array - * @param $langcode - * The language associated to $items. - * @param $delta - * the order of this item in the array of subelements (0, 1, 2, etc) - * - * @return - * the form item for a single element for this field */ -function number_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { - $element = array( +function number_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => isset($items[$delta]) ? $items[$delta] : NULL, ); diff --git a/modules/field/modules/options/options.module b/modules/field/modules/options/options.module index 261b00c43..709e0bd8d 100644 --- a/modules/field/modules/options/options.module +++ b/modules/field/modules/options/options.module @@ -94,8 +94,8 @@ function options_element_info() { /** * Implement hook_field_widget(). */ -function options_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = NULL) { - $element = array( +function options_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => !empty($items) ? $items : array(), ); diff --git a/modules/field/modules/text/text.module b/modules/field/modules/text/text.module index 1ee103f8b..56c4ab80a 100644 --- a/modules/field/modules/text/text.module +++ b/modules/field/modules/text/text.module @@ -563,40 +563,9 @@ function text_element_info() { /** * Implement hook_field_widget(). - * - * Attach a single form element to the form. It will be built out and - * validated in the callback(s) listed in hook_element_info(). We build it - * out in the callbacks rather than here in hook_field_widget so it can be - * plugged into any module that can provide it with valid - * $field information. - * - * Field module will set the weight, field name and delta values - * for each form element. - * - * If there are multiple values for this field, the field module will - * call this function as many times as needed. - * - * @param $form - * the entire form array, $form['#node'] holds node information - * @param $form_state - * the form_state, $form_state['values'][$field['field_name']] - * holds the field's form values. - * @param $field - * The field structure. - * @param $instance - * the field instance array - * @param $langcode - * The language associated to $items. - * @param $items - * array of default values for this field - * @param $delta - * the order of this item in the array of subelements (0, 1, 2, etc) - * - * @return - * the form item for a single element for this field */ -function text_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta = 0) { - $element = array( +function text_field_widget(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( '#type' => $instance['widget']['type'], '#default_value' => isset($items[$delta]) ? $items[$delta] : '', ); @@ -721,7 +690,6 @@ function text_textarea_with_summary_process($element, $form_state, $form) { '#weight' => 0, '#title' => t('Summary'), '#description' => t('Leave blank to use trimmed value of full text as the summary.'), - '#required' => $element['#required'], '#display' => $display, '#attached' => array('js' => array(drupal_get_path('module', 'text') . '/text.js')), '#attributes' => array('class' => array('text-textarea-summary')), @@ -738,7 +706,6 @@ function text_textarea_with_summary_process($element, $form_state, $form) { '#title' => $display ? t('Full text') : $element['#title'], '#description' => $element['#description'], '#required' => $element['#required'], - '#required' => $instance['required'], '#attributes' => array('class' => array('text-full-textarea')), '#prefix' => '<div class="text-full-wrapper">', '#suffix' => '</div>', |