@@ -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