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