Issue #2843892 by slashrsm, Berdir, dawehner: Query arguments are not persisted when using batch
parent
44d77ea79a
commit
0c660e3434
|
@ -491,17 +491,13 @@ function _batch_finished() {
|
|||
$_SESSION['batch_form_state'] = $_batch['form_state'];
|
||||
}
|
||||
$callback = $_batch['redirect_callback'];
|
||||
/** @var \Drupal\Core\Url $source_url */
|
||||
$source_url = $_batch['source_url'];
|
||||
$_batch['source_url']->mergeOptions(['query' => ['op' => 'finish', 'id' => $_batch['id']]]);
|
||||
if (is_callable($callback)) {
|
||||
$callback($_batch['source_url'], array('query' => array('op' => 'finish', 'id' => $_batch['id'])));
|
||||
$callback($_batch['source_url'], $_batch['source_url']->getOption('query'));
|
||||
}
|
||||
elseif ($callback === NULL) {
|
||||
// Default to RedirectResponse objects when nothing specified.
|
||||
$url = $source_url
|
||||
->setAbsolute()
|
||||
->setOption('query', ['op' => 'finish', 'id' => $_batch['id']]);
|
||||
return new RedirectResponse($url->toString());
|
||||
return new RedirectResponse($_batch['source_url']->setAbsolute()->toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -782,6 +782,9 @@ function batch_set($batch_definition) {
|
|||
* \Symfony\Component\HttpFoundation\RedirectResponse, which will be used
|
||||
* automatically by the standard batch processing pipeline (and which takes
|
||||
* precedence over this parameter).
|
||||
* User will be redirected to the page that started the batch if this argument
|
||||
* is omitted and no redirect response was returned by the 'finished'
|
||||
* callback. Any query arguments will be automatically persisted.
|
||||
* @param \Drupal\Core\Url $url
|
||||
* (optional - should only be used for separate scripts like update.php)
|
||||
* URL of the batch processing page.
|
||||
|
@ -801,7 +804,7 @@ function batch_process($redirect = NULL, Url $url = NULL, $redirect_callback = N
|
|||
'current_set' => 0,
|
||||
'progressive' => TRUE,
|
||||
'url' => isset($url) ? $url : Url::fromRoute('system.batch_page.html'),
|
||||
'source_url' => Url::fromRouteMatch(\Drupal::routeMatch()),
|
||||
'source_url' => Url::fromRouteMatch(\Drupal::routeMatch())->mergeOptions(['query' => \Drupal::request()->query->all()]),
|
||||
'batch_redirect' => $redirect,
|
||||
'theme' => \Drupal::theme()->getActiveTheme()->getName(),
|
||||
'redirect_callback' => $redirect_callback,
|
||||
|
|
|
@ -107,6 +107,13 @@ class ProcessingTest extends WebTestBase {
|
|||
$this->assertEqual(batch_test_stack(), $this->_resultStack('batch_2'), 'Execution order was correct.');
|
||||
$this->assertText('Redirection successful.', 'Redirection after batch execution is correct.');
|
||||
$this->assertNoEscaped('<', 'No escaped markup is present.');
|
||||
|
||||
// Extra query arguments will trigger logic that will add them to the
|
||||
// redirect URL. Make sure they are persisted.
|
||||
$this->drupalGet('batch-test/multistep', ['query' => ['big_tree' => 'small_axe']]);
|
||||
$this->drupalPostForm(NULL, array(), 'Submit');
|
||||
$this->assertText('step 2', 'Form is displayed in step 2.');
|
||||
$this->assertTrue(strpos($this->getUrl(), 'batch-test/multistep?big_tree=small_axe'), 'Query argument was persisted and another extra argument was added.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue