From 291fd81504d96ba67bbcdc09997db9991381f6a6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Nov 2025 11:56:11 +0000 Subject: [PATCH] Add coupon system integration to shopping cart Co-authored-by: iaretechnician <2749183+iaretechnician@users.noreply.github.com> --- modules/billing/cart.php | 203 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 201 insertions(+), 2 deletions(-) diff --git a/modules/billing/cart.php b/modules/billing/cart.php index 6b989541..49434b99 100644 --- a/modules/billing/cart.php +++ b/modules/billing/cart.php @@ -42,6 +42,120 @@ if ($result) { // If cart is empty, show message $cart_empty = count($invoices) === 0; +// Coupon handling +$coupon_code = ''; +$coupon_discount_percent = 0; +$coupon_error = ''; +$coupon_success = ''; +$applied_coupon = null; + +// Check for coupon in session +if (isset($_SESSION['cart_coupon_code'])) { + $coupon_code = $_SESSION['cart_coupon_code']; +} + +// Handle coupon application +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['apply_coupon'])) { + $submitted_code = trim($_POST['coupon_code'] ?? ''); + + if (empty($submitted_code)) { + $coupon_error = 'Please enter a coupon code.'; + } else { + // Validate coupon + $safe_code = mysqli_real_escape_string($db, $submitted_code); + $coupon_query = "SELECT * FROM {$table_prefix}billing_coupons + WHERE code = '$safe_code' AND is_active = 1"; + $coupon_result = mysqli_query($db, $coupon_query); + + if ($coupon_result && mysqli_num_rows($coupon_result) === 1) { + $coupon = mysqli_fetch_assoc($coupon_result); + + // Check expiration + $expired = false; + if (!empty($coupon['expires'])) { + $expires_time = strtotime($coupon['expires']); + if ($expires_time && $expires_time < time()) { + $expired = true; + } + } + + // Check usage limit + $max_uses_reached = false; + if (!empty($coupon['max_uses'])) { + if (intval($coupon['current_uses']) >= intval($coupon['max_uses'])) { + $max_uses_reached = true; + } + } + + if ($expired) { + $coupon_error = 'This coupon has expired.'; + } elseif ($max_uses_reached) { + $coupon_error = 'This coupon has reached its maximum usage limit.'; + } else { + // Check game filter + $game_valid = true; + if ($coupon['game_filter_type'] === 'specific_games' && !empty($coupon['game_filter_list'])) { + $allowed_games = json_decode($coupon['game_filter_list'], true); + if (is_array($allowed_games) && count($allowed_games) > 0) { + // Check if any invoice game is in allowed list + $has_valid_game = false; + foreach ($invoices as $inv) { + if (in_array($inv['game_key'], $allowed_games)) { + $has_valid_game = true; + break; + } + } + if (!$has_valid_game) { + $game_valid = false; + } + } + } + + if (!$game_valid) { + $coupon_error = 'This coupon is not valid for the items in your cart.'; + } else { + // Apply coupon + $applied_coupon = $coupon; + $coupon_code = $submitted_code; + $coupon_discount_percent = floatval($coupon['discount_percent']); + $_SESSION['cart_coupon_code'] = $coupon_code; + $_SESSION['cart_coupon_id'] = $coupon['coupon_id']; + $coupon_success = 'Coupon "' . htmlspecialchars($coupon['name']) . '" applied! You save ' . $coupon_discount_percent . '%'; + } + } + } else { + $coupon_error = 'Invalid coupon code.'; + } + } +} + +// Handle coupon removal +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['remove_coupon'])) { + unset($_SESSION['cart_coupon_code']); + unset($_SESSION['cart_coupon_id']); + $coupon_code = ''; + $coupon_discount_percent = 0; + $applied_coupon = null; +} + +// Calculate discount if coupon is applied +$discount_amount = 0; +if (!empty($coupon_code) && $coupon_discount_percent > 0) { + // Re-validate the coupon from session + $safe_code = mysqli_real_escape_string($db, $coupon_code); + $coupon_query = "SELECT * FROM {$table_prefix}billing_coupons + WHERE code = '$safe_code' AND is_active = 1"; + $coupon_result = mysqli_query($db, $coupon_query); + + if ($coupon_result && mysqli_num_rows($coupon_result) === 1) { + $applied_coupon = mysqli_fetch_assoc($coupon_result); + $coupon_discount_percent = floatval($applied_coupon['discount_percent']); + $discount_amount = $total_amount * ($coupon_discount_percent / 100); + } +} + +$final_amount = $total_amount - $discount_amount; + // PayPal configuration $sandbox = true; // Set to false for live PayPal $client_id = 'AfvY_C2zA_hTHxHq7TIhtOeub4xBdySYrt_Hjj3d_WYQwjWI9NfOAVOTeResx2rgZ_nP5tOoxQSAHw8c'; @@ -188,6 +302,33 @@ mysqli_close($db); padding: 20px; color: #666; } + .coupon-section { + background: #f8f9fa; + padding: 20px; + border-radius: 8px; + margin-bottom: 20px; + } + .coupon-input { + width: 100%; + padding: 10px; + border: 1px solid #ced4da; + border-radius: 4px; + font-size: 1em; + } + .alert-error { + background: #f8d7da; + color: #721c24; + padding: 10px; + border-radius: 4px; + margin-bottom: 15px; + } + .alert-success { + background: #d4edda; + color: #155724; + padding: 10px; + border-radius: 4px; + margin-bottom: 15px; + } @@ -241,9 +382,60 @@ mysqli_close($db); + +