summaryrefslogtreecommitdiff
path: root/modules/field
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field')
-rw-r--r--modules/field/field.api.php8
-rw-r--r--modules/field/field.form.inc69
-rw-r--r--modules/field/modules/number/number.module32
-rw-r--r--modules/field/modules/options/options.module4
-rw-r--r--modules/field/modules/text/text.module37
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>',