Skip to content

Commit d72b8e9

Browse files
committed
Allow carts with no email or addresses to just load
1 parent 099ad55 commit d72b8e9

File tree

1 file changed

+28
-32
lines changed

1 file changed

+28
-32
lines changed

src/controllers/CartController.php

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -397,47 +397,43 @@ public function actionLoadCart(): ?Response
397397
return $this->request->getIsGet() ? $this->redirect($redirect) : null;
398398
}
399399

400-
// Carts without email cannot be recovered
401-
if (!$cart->getEmail()) {
402-
$error = Craft::t('commerce', 'Unable to retrieve cart.');
403-
if ($this->request->getAcceptsJson()) {
404-
return $this->asFailure($error);
405-
}
406-
$this->setFailFlash($error);
407-
return $this->request->getIsGet() ? $this->redirect($redirect) : null;
408-
}
400+
// Carts without email or addresses don't need token validation
401+
$hasEmail = (bool)$cart->getEmail();
402+
$hasAddresses = $cart->billingAddressId || $cart->shippingAddressId;
409403

410-
$currentUser = Craft::$app->getUser()->getIdentity();
411-
$hasValidToken = false;
404+
if ($hasEmail || $hasAddresses) {
405+
$currentUser = Craft::$app->getUser()->getIdentity();
406+
$hasValidToken = false;
412407

413-
// Check token if provided
414-
if ($token) {
415-
$tokenData = Craft::$app->getTokens()->getTokenRoute($token);
416-
417-
if (!$tokenData || !isset($tokenData[1]['cartNumber']) || $tokenData[1]['cartNumber'] !== $number) {
418-
Craft::$app->getSession()->setError(Craft::t('commerce', 'The cart recovery link is invalid. Please request a new one.'));
419-
return $this->redirect(UrlHelper::actionUrl('commerce/cart/email-challenge', ['number' => $number]));
420-
}
408+
// Check token if provided
409+
if ($token) {
410+
$tokenData = Craft::$app->getTokens()->getTokenRoute($token);
421411

422-
if (isset($tokenData[1]['expiresAt'])) {
423-
$now = (new \DateTime())->getTimestamp();
424-
if ($now > $tokenData[1]['expiresAt']) {
412+
if (!$tokenData || !isset($tokenData[1]['cartNumber']) || $tokenData[1]['cartNumber'] !== $number) {
413+
Craft::$app->getSession()->setError(Craft::t('commerce', 'The cart recovery link is invalid. Please request a new one.'));
425414
return $this->redirect(UrlHelper::actionUrl('commerce/cart/email-challenge', ['number' => $number]));
426415
}
427-
}
428416

429-
$hasValidToken = true;
430-
}
417+
if (isset($tokenData[1]['expiresAt'])) {
418+
$now = (new \DateTime())->getTimestamp();
419+
if ($now > $tokenData[1]['expiresAt']) {
420+
return $this->redirect(UrlHelper::actionUrl('commerce/cart/email-challenge', ['number' => $number]));
421+
}
422+
}
431423

432-
// Check permissions if no valid token
433-
if (!$hasValidToken) {
434-
if ($currentUser) {
435-
$isCartCustomer = $cart->getCustomer() && $cart->getCustomer()->id === $currentUser->id;
436-
if (!$isCartCustomer) {
424+
$hasValidToken = true;
425+
}
426+
427+
// Check permissions if no valid token
428+
if (!$hasValidToken) {
429+
if ($currentUser) {
430+
$isCartCustomer = $cart->getCustomer() && $cart->getCustomer()->id === $currentUser->id;
431+
if (!$isCartCustomer) {
432+
return $this->redirect(UrlHelper::actionUrl('commerce/cart/email-challenge', ['number' => $number]));
433+
}
434+
} else {
437435
return $this->redirect(UrlHelper::actionUrl('commerce/cart/email-challenge', ['number' => $number]));
438436
}
439-
} else {
440-
return $this->redirect(UrlHelper::actionUrl('commerce/cart/email-challenge', ['number' => $number]));
441437
}
442438
}
443439

0 commit comments

Comments
 (0)