getMessage()); $db = false; } if (!$db) { $error = 'Database connection failed. Please check your configuration.'; error_log('[admin_coupons] DB connect failed for host=' . ($db_host ?? 'unknown') . ' user=' . ($db_user ?? 'unknown') . ' db=' . ($db_name ?? 'unknown') . ' - ' . mysqli_connect_error()); } $status = ''; $error = ''; // Handle form submissions if ($_SERVER['REQUEST_METHOD'] === 'POST') { $token = $_POST['csrf'] ?? ''; if (!hash_equals($csrf, (string)$token)) { $error = 'Invalid CSRF token.'; } else { // Add new coupon if (isset($_POST['add_coupon'])) { $code = mysqli_real_escape_string($db, trim($_POST['code'])); $name = mysqli_real_escape_string($db, trim($_POST['name'])); $description = mysqli_real_escape_string($db, trim($_POST['description'])); $discount_percent = floatval($_POST['discount_percent']); $usage_type = mysqli_real_escape_string($db, $_POST['usage_type']); $game_filter_type = mysqli_real_escape_string($db, $_POST['game_filter_type']); $game_filter_list = isset($_POST['game_filter_list']) && $_POST['game_filter_type'] === 'specific_games' ? mysqli_real_escape_string($db, json_encode($_POST['game_filter_list'])) : 'NULL'; $max_uses = !empty($_POST['max_uses']) ? intval($_POST['max_uses']) : 'NULL'; $expires = !empty($_POST['expires']) ? "'" . mysqli_real_escape_string($db, $_POST['expires']) . "'" : 'NULL'; // Validate code is unique $check = mysqli_query($db, "SELECT coupon_id FROM {$table_prefix}billing_coupons WHERE code = '$code'"); if (mysqli_num_rows($check) > 0) { $error = "Coupon code '$code' already exists."; } else { $sql = "INSERT INTO {$table_prefix}billing_coupons (code, name, description, discount_percent, usage_type, game_filter_type, game_filter_list, max_uses, expires, is_active) VALUES ('$code', '$name', '$description', $discount_percent, '$usage_type', '$game_filter_type', " . ($game_filter_list === 'NULL' ? 'NULL' : "'$game_filter_list'") . ", $max_uses, $expires, 1)"; if (mysqli_query($db, $sql)) { $status = "Coupon '$code' added successfully."; } else { $error = "Error adding coupon: " . mysqli_error($db); } } } // Update existing coupon elseif (isset($_POST['update_coupon'])) { $coupon_id = intval($_POST['coupon_id']); $code = mysqli_real_escape_string($db, trim($_POST['code'])); $name = mysqli_real_escape_string($db, trim($_POST['name'])); $description = mysqli_real_escape_string($db, trim($_POST['description'])); $discount_percent = floatval($_POST['discount_percent']); $usage_type = mysqli_real_escape_string($db, $_POST['usage_type']); $game_filter_type = mysqli_real_escape_string($db, $_POST['game_filter_type']); $game_filter_list = isset($_POST['game_filter_list']) && $_POST['game_filter_type'] === 'specific_games' ? mysqli_real_escape_string($db, json_encode($_POST['game_filter_list'])) : 'NULL'; $max_uses = !empty($_POST['max_uses']) ? intval($_POST['max_uses']) : 'NULL'; $expires = !empty($_POST['expires']) ? "'" . mysqli_real_escape_string($db, $_POST['expires']) . "'" : 'NULL'; $is_active = isset($_POST['is_active']) ? 1 : 0; $sql = "UPDATE {$table_prefix}billing_coupons SET code = '$code', name = '$name', description = '$description', discount_percent = $discount_percent, usage_type = '$usage_type', game_filter_type = '$game_filter_type', game_filter_list = " . ($game_filter_list === 'NULL' ? 'NULL' : "'$game_filter_list'") . ", max_uses = $max_uses, expires = $expires, is_active = $is_active WHERE coupon_id = $coupon_id"; if (mysqli_query($db, $sql)) { $status = "Coupon updated successfully."; } else { $error = "Error updating coupon: " . mysqli_error($db); } } // Delete coupon elseif (isset($_POST['delete_coupon'])) { $coupon_id = intval($_POST['coupon_id']); if (mysqli_query($db, "DELETE FROM {$table_prefix}billing_coupons WHERE coupon_id = $coupon_id")) { $status = "Coupon deleted successfully."; } else { $error = "Error deleting coupon: " . mysqli_error($db); } } } } // Get all available games from server configs $game_options = []; $games_dir = __DIR__ . '/../../config_games/server_configs/'; if (is_dir($games_dir)) { $files = scandir($games_dir); foreach ((array)$files as $file) { if (pathinfo($file, PATHINFO_EXTENSION) === 'xml' && strpos($file, '.bak') === false) { $game_key = str_replace('.xml', '', $file); $game_options[] = $game_key; } } sort($game_options); } // Get all coupons $coupons_result = mysqli_query($db, "SELECT * FROM {$table_prefix}billing_coupons ORDER BY created_date DESC"); ?> Admin — Coupon Management

Coupon Management

Add New Coupon

Existing Coupons

0): ?>
Code Name Discount Type Game Filter Uses Expires Status Actions
% All Games specific games / (unlimited)

No coupons found. Add your first coupon above.