diff --git a/vendor/magento/module-multicoupon/Model/CouponManagement.php b/vendor/magento/module-multicoupon/Model/CouponManagement.php index 7f37d005afaf..a290965f52a3 100644 --- a/vendor/magento/module-multicoupon/Model/CouponManagement.php +++ b/vendor/magento/module-multicoupon/Model/CouponManagement.php @@ -58,10 +58,10 @@ public function get(int $cartId): array { $quote = $this->quoteRepository->get($cartId); $coupons = $quote->getExtensionAttributes()->getCouponCodes() ?? []; - if ($quote->getCouponCode() && !in_array($quote->getCouponCode(), $coupons)) { + if ($quote->getCouponCode() && !$this->couponsInList([$quote->getCouponCode()], $coupons)) { array_unshift($coupons, $quote->getCouponCode()); } - return $coupons; + return array_unique($coupons); } /** @@ -74,10 +74,11 @@ public function append(int $cartId, array $couponCodes): void } $quote = $this->quoteRepository->get($cartId); $appliedCouponCodes = $quote->getExtensionAttributes()->getCouponCodes() ?? []; - if ($quote->getCouponCode() && !in_array($quote->getCouponCode(), $appliedCouponCodes)) { - array_unshift($appliedCouponCodes, $quote->getCouponCode()); + $appliedCouponCodes = array_map('strtolower', $appliedCouponCodes); + if ($quote->getCouponCode() && !in_array(strtolower($quote->getCouponCode()), $appliedCouponCodes)) { + array_unshift($appliedCouponCodes, strtolower($quote->getCouponCode())); } - if (empty(array_diff($couponCodes, $appliedCouponCodes))) { + if (!$this->couponsInList($couponCodes, $appliedCouponCodes)) { return; } $allCouponCodes = array_unique(array_merge($appliedCouponCodes, $couponCodes)); @@ -150,10 +151,13 @@ private function validateCouponCodes(CartInterface $quote, array $couponCodes): $customerId = (int)$quote->getCustomer()->getId(); } - $invalidCouponCodes = array_diff( - $couponCodes, - array_values($this->validateCouponCode->execute($couponCodes, $customerId)) - ); + $invalidCouponCodes = []; + $validCoupons = $this->validateCouponCode->execute($couponCodes, $customerId); + foreach ($couponCodes as $code) { + if (!in_array(strtolower($code), array_map('strtolower', $validCoupons))) { + $invalidCouponCodes[] = $code; + } + } if (!empty($invalidCouponCodes)) { throw new InputException( @@ -197,7 +201,13 @@ private function getNotAppliedCoupons(CartInterface $quote, array $couponCodes): $quote->setCouponCode(''); } - return array_diff($couponCodes, $appliedCoupons); + $notAppliedCoupons = []; + foreach ($couponCodes as $couponCode) { + if (!in_array(strtolower($couponCode), array_map('strtolower', $appliedCoupons))) { + $notAppliedCoupons[] = $couponCode; + } + } + return $notAppliedCoupons; } /** @@ -229,4 +239,21 @@ public function remove(int $cartId, array $couponCodes = []): void $this->quoteRepository->save($quote->collectTotals()); } + + /** + * Check if the coupon codes are in the list + * + * @param array $couponCodes + * @param array $couponList + * @return bool + */ + private function couponsInList(array $couponCodes, array $couponList): bool + { + return !empty( + array_diff( + array_map('strtolower', $couponCodes), + array_map('strtolower', $couponList) + ) + ); + } } diff --git a/vendor/magento/module-multicoupon-ui/Plugin/AdminCreateOrderApplyCoupons.php b/vendor/magento/module-multicoupon-ui/Plugin/AdminCreateOrderApplyCoupons.php index dfe3eda9d4e6..dfe583bcd0a9 100644 --- a/vendor/magento/module-multicoupon-ui/Plugin/AdminCreateOrderApplyCoupons.php +++ b/vendor/magento/module-multicoupon-ui/Plugin/AdminCreateOrderApplyCoupons.php @@ -163,8 +163,8 @@ private function isValidCouponCode(Quote $quote, string $appendCouponCode): bool } $invalidCouponCodes = array_diff( - [$appendCouponCode], - array_values($this->validateCouponCode->execute([$appendCouponCode], $customerId)) + [strtolower($appendCouponCode)], + array_map('strtolower', array_values($this->validateCouponCode->execute([$appendCouponCode], $customerId))) ); if (!empty($invalidCouponCodes)) { return false; diff --git a/vendor/magento/module-multicoupon-ui/Plugin/AdminCreateOrderValidateCoupon.php b/vendor/magento/module-multicoupon-ui/Plugin/AdminCreateOrderValidateCoupon.php index 9aaceb9179db..9eb13fd4929c 100644 --- a/vendor/magento/module-multicoupon-ui/Plugin/AdminCreateOrderValidateCoupon.php +++ b/vendor/magento/module-multicoupon-ui/Plugin/AdminCreateOrderValidateCoupon.php @@ -73,7 +73,7 @@ public function aroundExecute(ValidateCoupon $subject, \Closure $proceed, CartIn return; } - if (in_array($code, $quote->getExtensionAttributes()->getCouponCodes())) { + if (in_array(strtolower($code), array_map('strtolower', $quote->getExtensionAttributes()->getCouponCodes()))) { $this->messageManager->addSuccessMessage(__('The coupon code has been accepted.')); return; }