_form_builder_handle_input_element
- Versions
- 6
_form_builder_handle_input_element($form_id, &$form, &$form_state,$complete_form)- 7
_form_builder_handle_input_element($form_id, &$element, &$form_state)
Populate the #value and #name properties of input elements so they can be processed and rendered.
Related topics
Code
includes/form.inc, line 1178
<?php
function _form_builder_handle_input_element($form_id, &$element, &$form_state) {
if (!isset($element['#name'])) {
$name = array_shift($element['#parents']);
$element['#name'] = $name;
if ($element['#type'] == 'file') {
// To make it easier to handle $_FILES in file.inc, we place all
// file fields in the 'files' array. Also, we do not support
// nested file names.
$element['#name'] = 'files[' . $element['#name'] . ']';
}
elseif (count($element['#parents'])) {
$element['#name'] .= '[' . implode('][', $element['#parents']) . ']';
}
array_unshift($element['#parents'], $name);
}
if (!empty($element['#disabled'])) {
$element['#attributes']['disabled'] = 'disabled';
}
// Set the element's #value property.
if (!isset($element['#value']) && !array_key_exists('#value', $element)) {
$value_callback = !empty($element['#value_callback']) ? $element['#value_callback'] : 'form_type_' . $element['#type'] . '_value';
if ($form_state['programmed'] || ($form_state['process_input'] && (!isset($element['#access']) || $element['#access']))) {
$input = $form_state['input'];
foreach ($element['#parents'] as $parent) {
$input = isset($input[$parent]) ? $input[$parent] : NULL;
}
// If we have input for the current element, assign it to the #value property.
if (!$form_state['programmed'] || isset($input)) {
// Call #type_value to set the form value;
if (function_exists($value_callback)) {
$element['#value'] = $value_callback($element, $input, $form_state);
}
if (!isset($element['#value']) && isset($input)) {
$element['#value'] = $input;
}
}
// Mark all posted values for validation.
if (isset($element['#value']) || (!empty($element['#required']))) {
$element['#needs_validation'] = TRUE;
}
}
// Load defaults.
if (!isset($element['#value'])) {
// Call #type_value without a second argument to request default_value handling.
if (function_exists($value_callback)) {
$element['#value'] = $value_callback($element, FALSE, $form_state);
}
// Final catch. If we haven't set a value yet, use the explicit default value.
// Avoid image buttons (which come with garbage value), so we only get value
// for the button actually clicked.
if (!isset($element['#value']) && empty($element['#has_garbage_value'])) {
$element['#value'] = isset($element['#default_value']) ? $element['#default_value'] : '';
}
}
}
// Determine which button (if any) was clicked to submit the form.
// We compare the incoming values with the buttons defined in the form,
// and flag the one that matches. We have to do some funky tricks to
// deal with Internet Explorer's handling of single-button forms, though.
if (!empty($form_state['input']) && isset($element['#executes_submit_callback'])) {
// First, accumulate a collection of buttons, divided into two bins:
// those that execute full submit callbacks and those that only validate.
$button_type = $element['#executes_submit_callback'] ? 'submit' : 'button';
$form_state['buttons'][$button_type][] = $element;
if (_form_button_was_clicked($element, $form_state)) {
$form_state['submitted'] = $form_state['submitted'] || $element['#executes_submit_callback'];
// In most cases, we want to use form_set_value() to manipulate
// the global variables. In this special case, we want to make sure that
// the value of this element is listed in $form_variables under 'op'.
$form_state['values'][$element['#name']] = $element['#value'];
$form_state['clicked_button'] = $element;
if (isset($element['#validate'])) {
$form_state['validate_handlers'] = $element['#validate'];
}
if (isset($element['#submit'])) {
$form_state['submit_handlers'] = $element['#submit'];
}
}
}
form_set_value($element, $element['#value'], $form_state);
}
?>Login or register to post comments 