getConnection(); if (!isset($iduserlogin)) { die("Errore: ID utente non definito."); } $stmt = $pdo->prepare("SELECT id, name, logo FROM schools WHERE owner_id = ?"); $stmt->execute([$iduserlogin]); $school = $stmt->fetch(); if (!$school) { die("Errore: Nessuna scuola trovata."); } $school_id = $school['id']; $school_name = $school['name']; // === GESTIONE AZIONI === $feedback = ''; $showEmailModal = false; $emailData = null; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; // Cancellazione lezione if ($action === 'delete_session') { $session_id = (int)($_POST['session_id'] ?? 0); $send_email = !empty($_POST['send_email']); $stmt = $pdo->prepare(" SELECT cs.id, cs.session_date, cs.start_time, cs.end_time, c.name AS class_name, ct.level FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE cs.id = ? AND c.school_id = ? "); $stmt->execute([$session_id, $school_id]); $session = $stmt->fetch(); if ($session) { $recipients = []; if ($send_email) { $stmt2 = $pdo->prepare(" SELECT au.email, au.first_name FROM session_bookings sb JOIN auth_users au ON sb.user_id = au.id WHERE sb.session_id = ? AND sb.status IN ('booked','attended','rescheduled') "); $stmt2->execute([$session_id]); $recipients = $stmt2->fetchAll(PDO::FETCH_ASSOC); } // Se devo inviare email e ci sono destinatari -> apro modale (NON cancello ancora) if ($send_email && !empty($recipients)) { $showEmailModal = true; $emailData = [ 'session_id' => $session_id, 'class_name' => $session['class_name'], 'level' => $session['level'] ?? '', 'date' => date('d/m/Y', strtotime($session['session_date'])), 'time' => substr($session['start_time'], 0, 5) . ' - ' . substr($session['end_time'], 0, 5), 'recipients' => $recipients ]; } else { // Altrimenti cancello subito $stmt = $pdo->prepare("DELETE FROM class_sessions WHERE id = ? AND id IN ( SELECT cs.id FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE c.school_id = ? )"); $stmt->execute([$session_id, $school_id]); $feedback = '
Lezione cancellata con successo!
'; } } } // Invio email cancellazione elseif ($action === 'send_cancellation_email') { $session_id = (int)($_POST['session_id'] ?? 0); $body_text = $_POST['email_body'] ?? ''; $stmt = $pdo->prepare(" SELECT c.name AS class_name, ct.level, cs.session_date, cs.start_time, cs.end_time FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE cs.id = ? AND c.school_id = ? "); $stmt->execute([$session_id, $school_id]); $session = $stmt->fetch(); $class_info = $session['class_name'] . ($session['level'] ? ' (' . ucfirst($session['level']) . ')' : ''); $date = $session ? date('d/m/Y', strtotime($session['session_date'])) : ''; $time = $session ? substr($session['start_time'], 0, 5) . '-' . substr($session['end_time'], 0, 5) : ''; $stmt = $pdo->prepare(" SELECT au.email, au.first_name FROM session_bookings sb JOIN auth_users au ON sb.user_id = au.id WHERE sb.session_id = ? AND sb.status IN ('booked','attended','rescheduled') "); $stmt->execute([$session_id]); $recipients = $stmt->fetchAll(PDO::FETCH_ASSOC); $subject = "Lezione cancellata - {$school_name}"; $sent = 0; foreach ($recipients as $r) { $personal_body = str_replace( ['{nome}', '{classe}', '{data}', '{ora}'], [$r['first_name'] ?: 'Gentile utente', $class_info, $date, $time], $body_text ); $result = sendEmail($r['email'], $subject, $personal_body); if ($result['success']) $sent++; } // Cancella la lezione DOPO invio email $stmtDel = $pdo->prepare(" DELETE cs FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE cs.id = ? AND c.school_id = ? "); $stmtDel->execute([$session_id, $school_id]); $feedback = "
Email inviate a {$sent} partecipanti.
"; } elseif ($action === 'skip_cancellation_email') { $session_id = (int)($_POST['session_id'] ?? 0); $stmt = $pdo->prepare(" DELETE cs FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE cs.id = ? AND c.school_id = ? "); $stmt->execute([$session_id, $school_id]); $feedback = "
Lezione cancellata (email non inviata).
"; } // Marca come persa elseif ($action === 'mark_lost') { $booking_id = (int)($_POST['booking_id'] ?? 0); $stmt = $pdo->prepare("UPDATE session_bookings SET status = 'lost' WHERE id = ? AND session_id IN (SELECT cs.id FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE c.school_id = ?)"); $stmt->execute([$booking_id, $school_id]); $feedback = '
Presenza segnata come persa.
'; } // Cancella prenotazione elseif ($action === 'cancel_booking') { $booking_id = (int)($_POST['booking_id'] ?? 0); $stmt = $pdo->prepare("DELETE FROM session_bookings WHERE id = ? AND session_id IN (SELECT cs.id FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE c.school_id = ?)"); $stmt->execute([$booking_id, $school_id]); $feedback = '
Prenotazione rimossa.
'; } } // Recupero lezioni future $stmt = $pdo->prepare(" SELECT cs.id AS session_id, cs.session_date, cs.start_time, cs.end_time, c.name AS class_name, ct.level, ct.room_name, ct.max_capacity, t.first_name, t.last_name, (SELECT COUNT(*) FROM session_bookings sb WHERE sb.session_id = cs.id AND sb.status IN ('booked','attended','rescheduled')) AS booked_count, (SELECT GROUP_CONCAT(CONCAT(sb.id,'|||',au.first_name,' ',au.last_name,'|||',au.email,'|||',COALESCE(au.phone,''),'|||',sb.status) SEPARATOR ';;;') FROM session_bookings sb JOIN auth_users au ON sb.user_id = au.id WHERE sb.session_id = cs.id AND sb.status IN ('booked','attended','rescheduled','lost')) AS booked_students_details FROM class_sessions cs JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id LEFT JOIN teachers t ON cs.teacher_id = t.id WHERE cs.session_date >= CURDATE() AND c.school_id = ? ORDER BY cs.session_date, cs.start_time "); $stmt->execute([$school_id]); $sessions = $stmt->fetchAll(); $grouped = []; foreach ($sessions as $s) { $date = new DateTime($s['session_date']); $month_key = $date->format('Y-m'); $month_name = ucfirst(strftime('%B %Y', $date->getTimestamp())); $grouped[$month_key]['name'] = $month_name; $grouped[$month_key]['sessions'][] = $s; } ?> Lezioni Future - <?php echo htmlspecialchars($school_name); ?>
Logo

Lezioni Future -

Gestione completa: lista prenotati, P/C, cancellazione con avviso email.

Nessuna lezione programmata nel futuro.
Data Classe Livello Orario Sala Insegnante Prenotati Azioni
Non assegnato'; ?>
$parts[0] ?? 0, 'name' => $parts[1] ?? '', 'email' => $parts[2] ?? '', 'phone' => $parts[3] ?? '—', 'status' => $parts[4] ?? 'booked' ]; } } ?>