You are here

function background_batch_process_batch in Background Process 6

Same name and namespace in other branches
  1. 8 background_batch/background_batch.module \background_batch_process_batch()
  2. 7.2 background_batch/background_batch.module \background_batch_process_batch()
  3. 7 background_batch/background_batch.module \background_batch_process_batch()

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

File

background_batch/background_batch.module, line 208
This module adds background processing to Drupals batch API

Code

function background_batch_process_batch($redirect = 'admin/settings/batch/overview') {
  $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;

    // 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']);
    }
    elseif (isset($_REQUEST['edit']['destination'])) {
      $batch['destination'] = $_REQUEST['edit']['destination'];
      unset($_REQUEST['edit']['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.
    db_query("INSERT INTO {batch} (token, timestamp) VALUES ('', %d)", time());
    $batch['id'] = db_last_insert_id('batch', 'bid');

    // 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_query("UPDATE {batch} SET token = '%s', batch = '%s' WHERE bid = %d", drupal_get_token($batch['id']), serialize($batch), $batch['id']);
  }
  background_process_start('_background_batch_process_callback', $batch);
}