Skip to content
Snippets Groups Projects

Issue #3240123: Allow CheckoutController to preserve query parameters upon redirect

1 file
+ 25
3
Compare changes
  • Side-by-side
  • Inline
@@ -18,6 +18,7 @@ use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\Url;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* Provides the checkout form page.
@@ -56,6 +57,13 @@ class CheckoutController implements ContainerInjectionInterface {
*/
protected $cartProvider;
/**
* Symfony Request Stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
/**
* Constructs a new CheckoutController object.
*
@@ -69,13 +77,16 @@ class CheckoutController implements ContainerInjectionInterface {
* The cart session.
* @param \Drupal\Core\Messenger\MessengerInterface $messenger
* The messenger.
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* Symfony Request Stack.
*/
public function __construct(CheckoutOrderManagerInterface $checkout_order_manager, FormBuilderInterface $form_builder, CartSessionInterface $cart_session, CartProviderInterface $cart_provider, MessengerInterface $messenger) {
public function __construct(CheckoutOrderManagerInterface $checkout_order_manager, FormBuilderInterface $form_builder, CartSessionInterface $cart_session, CartProviderInterface $cart_provider, MessengerInterface $messenger, RequestStack $request_stack) {
$this->checkoutOrderManager = $checkout_order_manager;
$this->formBuilder = $form_builder;
$this->cartSession = $cart_session;
$this->cartProvider = $cart_provider;
$this->messenger = $messenger;
$this->requestStack = $request_stack;
}
/**
@@ -87,7 +98,8 @@ class CheckoutController implements ContainerInjectionInterface {
$container->get('form_builder'),
$container->get('commerce_cart.cart_session'),
$container->get('commerce_cart.cart_provider'),
$container->get('messenger')
$container->get('messenger'),
$container->get('request_stack'),
);
}
@@ -134,7 +146,17 @@ class CheckoutController implements ContainerInjectionInterface {
$requested_step_id = $route_match->getParameter('step');
$step_id = $this->checkoutOrderManager->getCheckoutStepId($order, $requested_step_id);
if ($requested_step_id != $step_id) {
$url = Url::fromRoute('commerce_checkout.form', ['commerce_order' => $order->id(), 'step' => $step_id]);
$url = Url::fromRoute('commerce_checkout.form',
[
'commerce_order' => $order->id(),
'step' => $step_id,
],
[
'query' => [
$this->requestStack->getCurrentRequest()->query->all(),
],
],
);
return new RedirectResponse($url->toString());
}
$checkout_flow = $this->checkoutOrderManager->getCheckoutFlow($order);
Loading