getConnection(); // Recupera lo school_id e user_id dalla sessione $school_id = session('school_id'); $user_id = $iduserlogin; // Debug: verifica il valore di iduserlogin \Log::info('Valore di iduserlogin: ' . $user_id); // Controlla se l'utente è loggato if (empty($user_id)) { // Reindirizza alla pagina di login se l'utente non è loggato header('Location: login.php?error=not_logged_in'); exit; } $school = null; $school_name = 'Nessuna scuola selezionata'; $school_logo_path = url('userarea/photoschool/yogibook_logo.png'); // Default logo if ($school_id) { $school = \Vanguard\Models\School::find($school_id); if ($school) { $school_name = $school->name; $school_logo_path = $school->logo ? url('userarea/photoschool/' . $school->logo) : $school_logo_path; } } // Inizializza il carrello se non esiste if (!isset($_SESSION['cart'])) { $_SESSION['cart'] = []; } // Recupera i prodotti nel carrello $cart_items = []; $total_price = 0; if (!empty($_SESSION['cart'])) { foreach ($_SESSION['cart'] as $cart_key => $item) { $product_id = $item['product_id']; $variation_id = $item['variation_id']; $class_type_id = $item['class_type_id']; $quantity = $item['quantity']; // Query per ottenere i dettagli del prodotto, variazione e classe $stmt = $pdo->prepare(" SELECT p.id AS product_id, p.name AS product_name, pv.id AS variation_id, pv.name AS variation_name, pv.price, c.id AS class_id, c.name AS class_name, c.photo AS class_photo, ct.id AS class_type_id, ct.level, ct.day_of_week FROM products p JOIN product_variations pv ON pv.id = ? LEFT JOIN product_class_types pct ON p.id = pct.product_id AND pct.variation_id IS NULL LEFT JOIN class_types ct ON ct.id = ? LEFT JOIN classes c ON ct.class_id = c.id WHERE p.id = ? "); $stmt->execute([$variation_id, $class_type_id, $product_id]); $cart_item = $stmt->fetch(PDO::FETCH_ASSOC); if ($cart_item) { $cart_items[$cart_key] = [ 'product_id' => $cart_item['product_id'], 'product_name' => $cart_item['product_name'], 'variation_id' => $cart_item['variation_id'], 'variation_name' => $cart_item['variation_name'], 'class_id' => $cart_item['class_id'], 'class_name' => $cart_item['class_name'], 'class_type_id' => $cart_item['class_type_id'], 'level' => $cart_item['level'], 'day_of_week' => $cart_item['day_of_week'], 'photo' => $cart_item['class_photo'] ?: 'default_class_image.jpg', 'price' => $cart_item['price'], 'quantity' => $quantity, 'subtotal' => $cart_item['price'] * $quantity ]; $total_price += $cart_item['price'] * $quantity; } } } // Calcola il numero totale di elementi nel carrello $cart_count = array_sum(array_column($_SESSION['cart'], 'quantity')); // Gestione della conferma dell'acquisto if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['confirm_purchase'])) { // Assicurati che non ci siano output prima di questo punto ob_start(); // Avvia il buffer per catturare eventuali output indesiderati if (empty($cart_items)) { $response = ['success' => false, 'message' => 'Il carrello è vuoto.']; } else { try { // Verifica che user_id non sia NULL (dovrebbe essere già garantito dal controllo sopra) if (empty($user_id)) { throw new Exception("L'ID utente non è definito nella sessione."); } // Genera un order_number unico $stmt = $pdo->query("SELECT MAX(order_number) AS max_order FROM orders"); $result = $stmt->fetch(PDO::FETCH_ASSOC); $order_number = ($result['max_order'] ?? 0) + 1; // Inserisci ogni elemento del carrello come un ordine foreach ($cart_items as $item) { $total_entries = null; // Da calcolare in base alla variazione if (preg_match('/(\d+) Ticket/i', $item['variation_name'], $matches)) { $total_entries = (int)$matches[1]; } $available_entries = $total_entries; $available_recoveries = 0; // Da definire $expiration_date = null; // Da definire $activation_date = date('Y-m-d'); // Oggi $stmt = $pdo->prepare(" INSERT INTO orders ( order_number, school_id, user_id, product_id, variation_id, class_id, class_type_id, created_at, payment_method, price, status, total_entries, available_entries, available_recoveries, expiration_date, activation_date ) VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), 'direct', ?, 'completed', ?, ?, ?, ?, ?) "); $stmt->execute([ $order_number, $school_id, $user_id, $item['product_id'], $item['variation_id'], $item['class_id'], $item['class_type_id'], $item['subtotal'], $total_entries, $available_entries, $available_recoveries, $expiration_date, $activation_date ]); } // Svuota il carrello $_SESSION['cart'] = []; // Reindirizza alla pagina di ringraziamento con l'order_number $response = ['success' => true, 'redirect' => 'thank_you.php?order_number=' . $order_number]; } catch (Exception $e) { $response = ['success' => false, 'message' => 'Errore durante l\'acquisto: ' . $e->getMessage()]; } } // Pulisci il buffer e invia la risposta JSON ob_end_clean(); header('Content-Type: application/json'); echo json_encode($response); exit; } ?>
Checkout - Scuola:
School Logo
Nessuna scuola selezionata
Default Logo
Riepilogo Carrello

Il carrello è vuoto.

product image

Variazione:

Classe:

Quantità:

Prezzo Unitario:

Subtotale:

Totale