![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/soundstudiopro.com/private_html/api/ |
<?php
session_start();
header('Content-Type: application/json');
require_once '../config/database.php';
const MAX_TICKETS_PER_PURCHASE = 10;
// Check if user is logged in
if (!isset($_SESSION['user_id'])) {
http_response_code(401);
echo json_encode([
'success' => false,
'error' => 'User must be logged in',
'redirect' => '/auth/login.php'
]);
exit;
}
try {
$pdo = getDBConnection();
$user_id = $_SESSION['user_id'];
// Get request data
$input = json_decode(file_get_contents('php://input'), true);
$event_id = $input['event_id'] ?? null;
$quantity = isset($input['quantity']) ? max(1, (int)$input['quantity']) : 1;
if (!$event_id) {
throw new Exception('Event ID is required');
}
// Get event information
$stmt = $pdo->prepare("
SELECT
e.id,
e.title,
e.creator_id,
e.ticket_price,
e.is_free,
e.max_attendees,
COUNT(DISTINCT et.id) as tickets_sold
FROM events e
LEFT JOIN event_tickets et ON e.id = et.event_id AND et.status IN ('pending', 'confirmed')
WHERE e.id = ? AND e.status = 'published'
GROUP BY e.id
");
$stmt->execute([$event_id]);
$event = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$event) {
throw new Exception('Event not found or not available');
}
// Check if user is trying to buy ticket for their own event
if ($event['creator_id'] == $user_id) {
throw new Exception('You cannot purchase tickets for your own event');
}
// Check if event is sold out
$available_tickets = $event['max_attendees'] ? max(0, $event['max_attendees'] - $event['tickets_sold']) : 999;
if ($event['max_attendees'] && $event['tickets_sold'] >= $event['max_attendees']) {
throw new Exception('Event is sold out');
}
// Check per-purchase limit and availability
if ($quantity > MAX_TICKETS_PER_PURCHASE) {
throw new Exception("You can only purchase up to " . MAX_TICKETS_PER_PURCHASE . " tickets per event.");
}
if ($event['max_attendees'] && $quantity > $available_tickets) {
throw new Exception("Only {$available_tickets} ticket(s) available right now.");
}
// Initialize ticket cart if it doesn't exist
if (!isset($_SESSION['ticket_cart'])) {
$_SESSION['ticket_cart'] = [];
}
// Check if this event is already in the cart
$found = false;
foreach ($_SESSION['ticket_cart'] as &$item) {
if ($item['event_id'] == $event_id) {
// Update quantity, but check availability and per-order limits
$new_quantity = $item['quantity'] + $quantity;
if ($new_quantity > MAX_TICKETS_PER_PURCHASE) {
throw new Exception("You can only keep up to " . MAX_TICKETS_PER_PURCHASE . " tickets for this event.");
}
if ($event['max_attendees'] && $new_quantity > $available_tickets) {
throw new Exception("Cannot add more tickets. Only {$available_tickets} available right now.");
}
$item['quantity'] = $new_quantity;
$found = true;
break;
}
}
unset($item);
if (!$found) {
// Add new ticket item to cart
$_SESSION['ticket_cart'][] = [
'type' => 'ticket',
'event_id' => $event_id,
'event_title' => $event['title'],
'ticket_price' => $event['ticket_price'],
'is_free' => $event['is_free'] ? true : false,
'quantity' => $quantity,
'price' => $event['is_free'] ? 0 : (float)$event['ticket_price']
];
}
// Calculate total tickets in cart
$total_tickets = 0;
foreach ($_SESSION['ticket_cart'] as $item) {
$total_tickets += $item['quantity'];
}
// Calculate total items across all carts for cart badge
$total_cart_items = $total_tickets;
if (isset($_SESSION['cart']) && !empty($_SESSION['cart'])) {
foreach ($_SESSION['cart'] as $item) {
$total_cart_items += $item['quantity'] ?? 1;
}
}
if (isset($_SESSION['credit_cart']) && !empty($_SESSION['credit_cart'])) {
foreach ($_SESSION['credit_cart'] as $item) {
$total_cart_items += $item['quantity'] ?? 1;
}
}
// Log for debugging
error_log("Ticket added to cart - Event ID: $event_id, Quantity: $quantity, Total tickets: $total_tickets, Total cart items: $total_cart_items");
error_log("Ticket cart contents: " . json_encode($_SESSION['ticket_cart']));
error_log("Session ID: " . session_id());
echo json_encode([
'success' => true,
'message' => 'Tickets added to cart',
'cart_count' => $total_cart_items,
'ticket_count' => $total_tickets,
'debug' => [
'session_id' => session_id(),
'cart_size' => count($_SESSION['ticket_cart'] ?? []),
'cart_items' => $_SESSION['ticket_cart'] ?? []
],
'item' => [
'event_id' => $event_id,
'quantity' => $quantity
]
]);
} catch (Exception $e) {
error_log("Add Ticket to Cart Error: " . $e->getMessage());
echo json_encode([
'success' => false,
'error' => $e->getMessage()
]);
}
?>