$id,
    ':token' => drupal_get_token($id),
  ))->fetchField();
  if ($batch) {
    return unserialize($batch);
  }
  return FALSE;
}
/**
 * State-based dispatcher for the batch processing page.
 *
 * @see _batch_shutdown()
 */
function _batch_page() {
  $batch = &batch_get();
  if (!isset($_REQUEST['id'])) {
    return FALSE;
  }
  // Retrieve the current state of the batch.
  if (!$batch) {
    $batch = batch_load($_REQUEST['id']);
    if (!$batch) {
      drupal_set_message(t('No active batch.'), 'error');
      drupal_goto();
    }
  }
  // Register database update for the end of processing.
  register_shutdown_function('_batch_shutdown');
  // Add batch-specific CSS.
  foreach ($batch['sets'] as $batch_set) {
    foreach ($batch_set['css'] as $css) {
      drupal_add_css($css);
    }
  }
  $op = isset($_REQUEST['op']) ? $_REQUEST['op'] : '';
  $output = NULL;
  switch ($op) {
    case 'start':
      $output = _batch_start();
      break;
    case 'do':
      // JavaScript-based progress page callback.
      _batch_do();
      break;
    case 'do_nojs':
      // Non-JavaScript-based progress page.
      $output = _batch_progress_page_nojs();
      break;
    case 'finished':
      $output = _batch_finished();
      break;
  }
  return $output;
}
/**
 * Initialize the batch processing.
 *
 * JavaScript-enabled clients are identified by the 'has_js' cookie set in
 * drupal.js. If no JavaScript-enabled page has been visited during the current
 * user's browser session, the non-JavaScript version is returned.
 */
function _batch_start() {
  if (isset($_COOKIE['has_js']) && $_COOKIE['has_js']) {
    return _batch_progress_page_js();
  }
  else {
    return _batch_progress_page_nojs();
  }
}
/**
 * Output a batch processing page with JavaScript support.
 *
 * This initializes the batch and error messages. Note that in JavaScript-based
 * processing, the batch processing page is displayed only once and updated via
 * AHAH requests, so only the first batch set gets to define the page title.
 * Titles specified by subsequent batch sets are not displayed.
 *
 * @see batch_set()
 * @see _batch_do()
 */
function _batch_progress_page_js() {
  $batch = batch_get();
  $current_set = _batch_current_set();
  drupal_set_title($current_set['title'], PASS_THROUGH);
  // Merge required query parameters for batch processing into those provided by
  // batch_set() or hook_batch_alter().
  $batch['url_options']['query']['id'] = $batch['id'];
  $js_setting = array(
    'batch' => array(
      'errorMessage' => $current_set['error_message'] . '
' . $batch['error_message'],
      'initMessage' => $current_set['init_message'],
      'uri' => url($batch['url'], $batch['url_options']),
    ),
  );
  drupal_add_js($js_setting, 'setting');
  drupal_add_js('misc/progress.js', array('cache' => FALSE));
  drupal_add_js('misc/batch.js', array('cache' => FALSE));
  return '