T.ME/BIBIL_0DAY
CasperSecurity


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/soundstudiopro.com/private_html/api/add_ticket_to_cart.php
<?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()
    ]);
}
?>


CasperSecurity Mini