From 010a661778bb3d158d221054d0e9f596387b4419 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Mon, 13 Nov 2023 16:43:17 +0800 Subject: [PATCH] Remove check for cookie with cart service --- src/services/Carts.php | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/services/Carts.php b/src/services/Carts.php index ace4f53d31..62a7324268 100644 --- a/src/services/Carts.php +++ b/src/services/Carts.php @@ -87,16 +87,9 @@ public function init() $this->cartCookie = Craft::cookieConfig($this->cartCookie); $session = Craft::$app->getSession(); - $requestCookies = $request->getCookies(); - // If we have a cart cookie, assign it to the cart number. // Also check pre Commerce 4.0 for a cart number in the session just in case. - if ($requestCookies->has($this->cartCookie['name'])) { - $this->_cartNumber = $requestCookies->getValue($this->cartCookie['name']); - if ($this->_cart && $this->_cart->number != $this->_cartNumber) { - $this->_cart = null; - } - } elseif (($session->getHasSessionId() || $session->getIsActive()) && $session->has('commerce_cart')) { + if (($session->getHasSessionId() || $session->getIsActive()) && $session->has('commerce_cart')) { $this->setSessionCartNumber($session->get('commerce_cart')); $session->remove('commerce_cart'); } @@ -119,7 +112,7 @@ public function getCart(bool $forceSave = false): Order // If there is no cart set for this request, and we can't get a cart from session, create one. if (!isset($this->_cart) && !$this->_cart = $this->_getCart()) { $this->_cart = new Order(); - $this->_cart->number = $this->getSessionCartNumber(); + $this->_cart->number = $this->generateCartNumber(); if ($currentUser) { $this->_cart->setCustomer($currentUser); // Will ensure the email is also set } @@ -268,10 +261,25 @@ public function getHasSessionCartNumber(): bool */ protected function getSessionCartNumber(): string { + if (!Craft::$app->getRequest()->getIsConsoleRequest()) { + + $request = Craft::$app->getRequest(); + $requestCookies = $request->getCookies(); + + if (!$this->_cartNumber && $cookieNumber = $requestCookies->getValue($this->cartCookie['name'])) { + $this->_cartNumber = $cookieNumber; + } + } + if ($this->_cartNumber === null) { $this->_cartNumber = $this->generateCartNumber(); } + /// Just in case the current cart is not the one in session, clear the cached cart. + if($this->_cart && $this->_cart->number !== $this->_cartNumber) { + $this->_cart = null; + } + return $this->_cartNumber; }