function batch_process in Drupal 7
Same name and namespace in other branches
- 8 core/includes/form.inc \batch_process()
- 6 includes/form.inc \batch_process()
- 9 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.
File
- includes/
form.inc, line 4667 - Functions for form and batch generation and processing.
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();
}
}
}