batch_process($redirect = NULL, Url $url = NULL, $redirect_callback = NULL)
Processes the batch.
This function is generally not needed in form submit handlers; Form API takes care of batches that were set during form submission.
Parameters
\Drupal\Core\Url|string $redirect: (optional) Either path or Url object to redirect to when the batch has finished processing. Note that to simply force a batch to (conditionally) redirect to a custom location after it is finished processing but to otherwise allow the standard form API batch handling to occur, it is not necessary to call batch_process() and use this parameter. Instead, make the batch 'finished' callback return an instance of \Symfony\Component\HttpFoundation\RedirectResponse, which will be used automatically by the standard batch processing pipeline (and which takes precedence over this parameter).
\Drupal\Core\Url $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.
Return value
\Symfony\Component\HttpFoundation\RedirectResponse|null A redirect response if the batch is progressive. No return value otherwise.
Related topics
- Batch operations
- Creates and processes batch operations.
File
- core/includes/form.inc, line 794
- Functions for form and batch generation and processing.
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | function batch_process( $redirect = NULL, Url $url = NULL, $redirect_callback = NULL) { $batch = &batch_get(); if (isset( $batch )) { // Add process information $process_info = array ( 'current_set' => 0, 'progressive' => TRUE, 'url' => isset( $url ) ? $url : Url::fromRoute( 'system.batch_page.html' ), 'source_url' => Url::fromRouteMatch(\Drupal::routeMatch()), 'batch_redirect' => $redirect , 'theme' => \Drupal::theme()->getActiveTheme()->getName(), '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::moduleHandler()->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. /** @var \Drupal\Core\Url $batch_url */ $batch_url = $batch [ 'url' ]; /** @var \Drupal\Core\Url $error_url */ $error_url = clone $batch_url ; $query_options = $error_url ->getOption( 'query' ); $query_options [ 'id' ] = $batch [ 'id' ]; $query_options [ 'op' ] = 'finished' ; $error_url ->setOption( 'query' , $query_options ); $batch [ 'error_message' ] = t( 'Please continue to <a href=":error_url">the error page</a>' , array ( ':error_url' => $error_url ->toString(TRUE)->getGeneratedUrl())); // Clear the way for the redirection to the batch processing page, by // saving and unsetting the 'destination', if there is any. $request = \Drupal::request(); if ( $request ->query->has( 'destination' )) { $batch [ 'destination' ] = $request ->query->get( 'destination' ); $request ->query->remove( 'destination' ); } // Store the batch. \Drupal::service( 'batch.storage' )->create( $batch ); // Set the batch number in the session to guarantee that it will stay alive. $_SESSION [ 'batches' ][ $batch [ 'id' ]] = TRUE; // Redirect for processing. $query_options = $error_url ->getOption( 'query' ); $query_options [ 'op' ] = 'start' ; $query_options [ 'id' ] = $batch [ 'id' ]; $batch_url ->setOption( 'query' , $query_options ); if (( $function = $batch [ 'redirect_callback' ]) && function_exists( $function )) { $function ( $batch_url ->toString(), [ 'query' => $query_options ]); } else { return new RedirectResponse( $batch_url ->setAbsolute()->toString(TRUE)->getGeneratedUrl()); } } else { // Non-progressive execution: bypass the whole progressbar workflow // and execute the batch in one pass. require_once __DIR__ . '/batch.inc' ; _batch_process(); } } } |
Please login to continue.