public function CommerceCartRedirectionSubscriber::tryRedirect in Commerce Cart Redirection 3.0.x
Conditionally skip cart and send user to checkout.
If the added product meets criteria set in the config form then redirect.
Parameters
\Drupal\commerce_cart\Event\CartEntityAddEvent $event: The add to cart event.
File
- src/
EventSubscriber/ CommerceCartRedirectionSubscriber.php, line 64
Class
Namespace
Drupal\commerce_cart_redirection\EventSubscriberCode
public function tryRedirect(CartEntityAddEvent $event) {
$redirect = FALSE;
$purchased_entity = $event
->getEntity();
/** @var \Drupal\Core\Config\Config $config */
$config = \Drupal::config('commerce_cart_redirection.settings');
$active_bundles = $config
->get('product_bundles');
$negate = $config
->get('negate_product_bundles');
$purchased_bundle = $purchased_entity
->bundle();
if (isset($active_bundles[$purchased_bundle]) && $active_bundles[$purchased_bundle] !== 0) {
if (!$negate) {
$redirect = TRUE;
}
}
else {
if ($negate) {
$redirect = TRUE;
}
}
if ($redirect) {
// Set a default so we always end up somewhere.
$redirection_url = Url::fromRoute('<front>')
->toString();
// Since the hard dependency on commerce_checkout module has been removed
// in order to be compatible with any module that provides its
// own checkout, eg BigCommerce, we can not guarantee that this route exists.
// If it does we use it as our fall back instead of the home page.
if (count($this->routeProvider
->getRoutesByNames([
'commerce_checkout.form',
])) === 1) {
$redirection_url = Url::fromRoute('commerce_checkout.form', [
'commerce_order' => $event
->getCart()
->id(),
])
->toString();
}
switch ($config
->get('redirection_route_path')) {
case 'other':
// @TODO add some sort of sanity checking.
if (!empty($config
->get('redirection_route_path_other')) && UrlHelper::isValid($config
->get('redirection_route_path_other'))) {
$redirection_url = $config
->get('redirection_route_path_other');
}
break;
case 'cart':
$redirection_url = Url::fromRoute('commerce_cart.page')
->toString();
break;
case 'checkout':
default:
}
$this->requestStack
->getCurrentRequest()->attributes
->set('commerce_cart_redirection_url', $redirection_url);
}
}