batch_process

Definition

batch_process($redirect = NULL, $url = NULL)
includes/form.inc, line 2587

Description

Process 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.

Related topics

Namesort iconDescription
Batch operationsFunctions allowing forms processing to be spread out over several page requests, thus ensuring that the processing does not get interrupted because of a PHP timeout, while allowing the user to receive feedback on the progress of the ongoing operations.

Code

<?php
function batch_process($redirect = NULL, $url = NULL) {
  $batch =& batch_get();

  if (isset($batch)) {
    // Add process information
    $url = isset($url) ? $url : 'batch';
    $process_info = array(
      'current_set' => 0,
      'progressive' => TRUE,
      'url' => isset($url) ? $url : 'batch',
      'source_page' => $_GET['q'],
      'redirect' => $redirect,
    );
    $batch += $process_info;

    if ($batch['progressive']) {
      // Clear the way for the drupal_goto redirection to the batch processing
      // page, by saving and unsetting the 'destination' if any, on both places
      // drupal_goto looks for it.
      if (isset($_REQUEST['destination'])) {
        $batch['destination'] = $_REQUEST['destination'];
        unset($_REQUEST['destination']);
      }

      // Initiate db storage in order to get a batch id. We have to provide
      // at least an empty string for the (not null) 'token' column.
      $batch['id'] = db_insert('batch')
        ->fields(array(
          'token' => '',
          'timestamp' => REQUEST_TIME,
        ))
        ->execute();

      // 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')))));

      // Actually store the batch data and the token generated form the batch id.
      db_update('batch')
        ->condition('bid', $batch['id'])
        ->fields(array(
          'token' => drupal_get_token($batch['id']),
          'batch' => serialize($batch),
        ))
        ->execute();

      drupal_goto($batch['url'], '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();
    }
  }
}
?>
 
 

All source code and documentation on this site is released under the terms of the GNU General Public License, version 2 and later. Drupal is a registered trademark of Dries Buytaert.