drupal_process_form
- Versions
- 5
drupal_process_form($form_id, &$form)- 6 – 7
drupal_process_form($form_id, &$form, &$form_state)
Processes a form submission.
This function is the heart of form API. The form gets built, validated and in appropriate cases, submitted.
Parameters
$form_id The unique string identifying the current form.
$form An associative array containing the structure of the form.
$form_state A keyed array containing the current state of the form. This includes the current persistent storage data for the form, and any data passed along by earlier steps when displaying a multi-step form. Additional information, like the sanitized $_POST data, is also accumulated here.
Related topics
Code
includes/form.inc, line 555
<?php
function drupal_process_form($form_id, &$form, &$form_state) {
$form_state['values'] = array();
// With $_GET, these forms are always submitted if requested.
if ($form_state['method'] == 'get' && !empty($form_state['always_process'])) {
if (!isset($form_state['input']['form_build_id'])) {
$form_state['input']['form_build_id'] = $form['#build_id'];
}
if (!isset($form_state['input']['form_id'])) {
$form_state['input']['form_id'] = $form_id;
}
if (!isset($form_state['input']['form_token']) && isset($form['#token'])) {
$form_state['input']['form_token'] = drupal_get_token($form['#token']);
}
}
// Build the form.
$form = form_builder($form_id, $form, $form_state);
// Only process the input if we have a correct form submission.
if ($form_state['process_input']) {
drupal_validate_form($form_id, $form, $form_state);
// drupal_html_id() maintains a cache of element IDs it has seen,
// so it can prevent duplicates. We want to be sure we reset that
// cache when a form is processed, so scenarios that result in
// the form being built behind the scenes and again for the
// browser don't increment all the element IDs needlessly.
drupal_static_reset('drupal_html_id');
if ($form_state['submitted'] && !form_get_errors() && !$form_state['rebuild']) {
// Execute form submit handlers.
form_execute_handlers('submit', $form, $form_state);
// We'll clear out the cached copies of the form and its stored data
// here, as we've finished with them. The in-memory copies are still
// here, though.
if (variable_get('cache', CACHE_DISABLED) == CACHE_DISABLED && !empty($form_state['values']['form_build_id'])) {
cache_clear_all('form_' . $form_state['values']['form_build_id'], 'cache_form');
cache_clear_all('storage_' . $form_state['values']['form_build_id'], 'cache_form');
}
// If batches were set in the submit handlers, we process them now,
// possibly ending execution. We make sure we do not react to the batch
// that is already being processed (if a batch operation performs a
// drupal_form_submit).
if ($batch =& batch_get() && !isset($batch['current_set'])) {
// The batch uses its own copies of $form and $form_state for
// late execution of submit handlers and post-batch redirection.
$batch['form'] = $form;
$batch['form_state'] = $form_state;
$batch['progressive'] = !$form_state['programmed'];
batch_process();
// Execution continues only for programmatic forms.
// For 'regular' forms, we get redirected to the batch processing
// page. Form redirection will be handled in _batch_finished(),
// after the batch is processed.
}
// Set a flag to indicate the the form has been processed and executed.
$form_state['executed'] = TRUE;
// Redirect the form based on values in $form_state.
drupal_redirect_form($form_state);
}
}
}
?>Login or register to post comments 