function drupal_process_form_new

Views' replacement for drupal_process_form that accepts commands not to redirect, as well as forcing processing of 'get' method forms.

1 call to drupal_process_form_new()
_drupal_build_form in includes/form.inc
@file form.inc Views' replacements for Drupal's form functions.

File

includes/form.inc, line 149

Code

function drupal_process_form_new($form_id, &$form, &$form_state) {
    // submitting, and handling the results returned by its submission
    // handlers. Submit handlers accumulate data in the form_state by
    // altering the $form_state variable, which is passed into them by
    // reference.
    $form_state['values'] = array();
    // With $_GET, these forms are always submitted.
    if ($form_state['method'] == 'get') {
        if (!isset($form['#post']['form_build_id'])) {
            $form['#post']['form_build_id'] = $form['#build_id'];
        }
        if (!isset($form['#post']['form_id'])) {
            $form['#post']['form_id'] = $form_id;
        }
        if (!isset($form['#post']['form_token']) && isset($form['#token'])) {
            $form['#post']['form_token'] = drupal_get_token($form['#token']);
        }
    }
    $form = form_builder($form_id, $form, $form_state);
    // Only process the form if it is programmed or the form_id coming
    // from the POST data is set and matches the current form_id.
    if (!empty($form['#programmed']) || !empty($form['#post']) && (isset($form['#post']['form_id']) && $form['#post']['form_id'] == $form_id)) {
        drupal_validate_form_new($form_id, $form, $form_state);
        // form_clean_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 scenerios that result in
        // the form being built behind the scenes and again for the
        // browser don't increment all the element IDs needlessly.
        form_clean_id(NULL, TRUE);
        if (!empty($form_state['submitted']) && !form_get_errors() && empty($form_state['rebuild'])) {
            $form_state['redirect'] = NULL;
            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_execute).
            if (($batch =& batch_get()) && !isset($batch['current_set'])) {
                // The batch uses its own copies of $form and $form_state for
                // late execution of submit handers and post-batch redirection.
                $batch['form'] = $form;
                $batch['form_state'] = $form_state;
                $batch['progressive'] = !$form['#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.
            }
            // If no submit handlers have populated the $form_state['storage']
            // bundle, and the $form_state['rebuild'] flag has not been set,
            // we're finished and should redirect to a new destination page
            // if one has been set (and a fresh, unpopulated copy of the form
            // if one hasn't). If the form was called by drupal_execute(),
            // however, we'll skip this and let the calling function examine
            // the resulting $form_state bundle itself.
            if (!$form['#programmed'] && empty($form_state['rebuild']) && empty($form_state['storage'])) {
                if (!empty($form_state['no_redirect'])) {
                    $form_state['executed'] = TRUE;
                }
                else {
                    drupal_redirect_form($form, $form_state['redirect']);
                }
            }
        }
    }
}