function batch_process

Same name in other branches
  1. 9 core/includes/form.inc \batch_process()
  2. 8.9.x core/includes/form.inc \batch_process()
  3. 10 core/includes/form.inc \batch_process()
  4. 11.x core/includes/form.inc \batch_process()

Processes the batch.

Unless the batch has been marked with 'progressive' = FALSE, the function issues a drupal_goto and thus ends page execution.

This function is generally not needed in form submit handlers; Form API takes care of batches that were set during form submission.

Parameters

$redirect: (optional) Path to redirect to when the batch has finished processing.

$url: (optional - should only be used for separate scripts like update.php) URL of the batch processing page.

$redirect_callback: (optional) Specify a function to be called to redirect to the progressive processing page. By default drupal_goto() will be used to redirect to a page which will do the progressive page. Specifying another function will allow the progressive processing to be processed differently.

Related topics

10 calls to batch_process()
batch_test_large_percentage in modules/simpletest/tests/batch_test.module
Menu callback: fire a batch process without a form submission.
batch_test_nested_drupal_form_submit in modules/simpletest/tests/batch_test.module
Menu callback: programmatically submits a form within a batch.
batch_test_no_form in modules/simpletest/tests/batch_test.module
Menu callback: fire a batch process without a form submission.
batch_test_theme_batch in modules/simpletest/tests/batch_test.module
Menu callback: run a batch for testing theme used on the progress page.
drupal_process_form in includes/form.inc
Processes a form submission.

... See full list

File

includes/form.inc, line 4708

Code

function batch_process($redirect = NULL, $url = 'batch', $redirect_callback = 'drupal_goto') {
    $batch =& batch_get();
    drupal_theme_initialize();
    if (isset($batch)) {
        // Add process information
        $process_info = array(
            'current_set' => 0,
            'progressive' => TRUE,
            'url' => $url,
            'url_options' => array(),
            'source_url' => $_GET['q'],
            'redirect' => $redirect,
            'theme' => $GLOBALS['theme_key'],
            'redirect_callback' => $redirect_callback,
        );
        $batch += $process_info;
        // The batch is now completely built. Allow other modules to make changes
        // to the batch so that it is easier to reuse batch processes in other
        // environments.
        drupal_alter('batch', $batch);
        // Assign an arbitrary id: don't rely on a serial column in the 'batch'
        // table, since non-progressive batches skip database storage completely.
        $batch['id'] = db_next_id();
        // Move operations to a job queue. Non-progressive batches will use a
        // memory-based queue.
        foreach ($batch['sets'] as $key => $batch_set) {
            _batch_populate_queue($batch, $key);
        }
        // Initiate processing.
        if ($batch['progressive']) {
            // Now that we have a batch id, we can generate the redirection link in
            // the generic error message.
            $t = get_t();
            $batch['error_message'] = $t('Please continue to <a href="@error_url">the error page</a>', array(
                '@error_url' => url($url, array(
                    'query' => array(
                        'id' => $batch['id'],
                        'op' => 'finished',
                    ),
                )),
            ));
            // Clear the way for the drupal_goto() redirection to the batch processing
            // page, by saving and unsetting the 'destination', if there is any.
            if (isset($_GET['destination'])) {
                $batch['destination'] = $_GET['destination'];
                unset($_GET['destination']);
            }
            // Store the batch.
            db_insert('batch')->fields(array(
                'bid' => $batch['id'],
                'timestamp' => REQUEST_TIME,
                'token' => drupal_get_token($batch['id']),
                'batch' => serialize($batch),
            ))
                ->execute();
            // Set the batch number in the session to guarantee that it will stay alive.
            $_SESSION['batches'][$batch['id']] = TRUE;
            // Redirect for processing.
            $function = $batch['redirect_callback'];
            if (function_exists($function)) {
                $function($batch['url'], array(
                    'query' => array(
                        'op' => 'start',
                        'id' => $batch['id'],
                    ),
                ));
            }
        }
        else {
            // Non-progressive execution: bypass the whole progressbar workflow
            // and execute the batch in one pass.
            require_once DRUPAL_ROOT . '/includes/batch.inc';
            _batch_process();
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.