Error message

You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).

function batch_process

Same name and namespace in other branches
  1. 11.x core/includes/form.inc \batch_process()
  2. 10 core/includes/form.inc \batch_process()
  3. 9 core/includes/form.inc \batch_process()
  4. 8.9.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

Batch operations
Creates and processes batch operations.
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.