yogiboook_new/public/userarea/future_sessions.php
2025-12-27 20:48:44 +01:00

736 lines
38 KiB
PHP

<?php
// future_sessions.php - VERSIONE COMPLETA E DEFINITIVA
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
include('include/headscript.php');
include(dirname(__DIR__) . '/userarea/class/mailer.php'); // Il tuo PHPMailer
$dbHandler = DBHandlerSelect::getInstance();
$pdo = $dbHandler->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'];
// === LISTA UTENTI DELLA SCUOLA (per dropdown "Aggiungi partecipante") ===
// NOTA: uso user_schools (come nel tuo progetto). Se la tabella si chiama diversamente, cambia qui.
$stmtUsers = $pdo->prepare("
SELECT au.id, au.first_name, au.last_name, au.email
FROM user_schools us
JOIN auth_users au ON au.id = us.user_id
WHERE us.school_id = ?
AND us.status = 'active'
ORDER BY au.first_name, au.last_name
");
$stmtUsers->execute([$school_id]);
$schoolUsers = $stmtUsers->fetchAll(PDO::FETCH_ASSOC);
// === 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 = isset($_POST['send_email']) && $_POST['send_email'] === '1';
error_log("DELETE_SESSION: session_id={$session_id} send_email_POST=" . var_export($_POST['send_email'] ?? null, true));
error_log("DELETE_SESSION: send_email_BOOL=" . var_export($send_email, true));
$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 = ?
");
$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 = '<div class="alert alert-success alert-dismissible fade show">
Lezione cancellata con successo!
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>';
}
}
}
// 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 = ?
");
$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 = "<div class='alert alert-success alert-dismissible fade show'>Email inviate a {$sent} partecipanti.<button type='button' class='btn-close' data-bs-dismiss='alert'></button></div>";
} 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 = "<div class='alert alert-success alert-dismissible fade show'>
Lezione cancellata (email non inviata).
<button type='button' class='btn-close' data-bs-dismiss='alert'></button>
</div>";
}
// Aggiungi partecipante alla lezione
elseif ($action === 'add_booking') {
$session_id = (int)($_POST['session_id'] ?? 0);
$user_id = (int)($_POST['user_id'] ?? 0);
if ($session_id <= 0 || $user_id <= 0) {
$feedback = '<div class="alert alert-danger alert-dismissible fade show">Dati non validi.<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
} else {
// 1) Verifica sessione appartiene alla scuola + capienza
$stmt = $pdo->prepare("
SELECT cs.id, ct.max_capacity,
(SELECT COUNT(*) FROM session_bookings sb
WHERE sb.session_id = cs.id AND sb.status IN ('booked','attended','rescheduled')
) AS booked_count
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 = ?
LIMIT 1
");
$stmt->execute([$session_id, $school_id]);
$info = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$info) {
$feedback = '<div class="alert alert-danger alert-dismissible fade show">Lezione non trovata o non autorizzata.<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
} else {
// 2) Verifica utente appartiene alla scuola
$stmt = $pdo->prepare("
SELECT 1
FROM user_schools
WHERE user_id = ? AND school_id = ? AND status = 'active'
LIMIT 1
");
$stmt->execute([$user_id, $school_id]);
$isMember = (bool)$stmt->fetchColumn();
if (!$isMember) {
$feedback = '<div class="alert alert-danger alert-dismissible fade show">Utente non associato a questa scuola.<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
} else {
// 3) Verifica già prenotato (qualsiasi status)
$stmt = $pdo->prepare("SELECT 1 FROM session_bookings WHERE session_id = ? AND user_id = ? LIMIT 1");
$stmt->execute([$session_id, $user_id]);
$already = (bool)$stmt->fetchColumn();
if ($already) {
$feedback = '<div class="alert alert-warning alert-dismissible fade show">Questo utente è già presente nella lezione.<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
} else {
// 4) Verifica capienza (se max_capacity valorizzato)
$max = (int)($info['max_capacity'] ?? 0);
$cnt = (int)($info['booked_count'] ?? 0);
if ($max > 0 && $cnt >= $max) {
$feedback = '<div class="alert alert-danger alert-dismissible fade show">Lezione piena: capienza massima raggiunta.<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
} else {
// 5) Inserimento (con fallback se non hai created_at/updated_at)
try {
$stmtIns = $pdo->prepare("
INSERT INTO session_bookings (session_id, user_id, status, created_at, updated_at)
VALUES (?, ?, 'booked', NOW(), NOW())
");
$stmtIns->execute([$session_id, $user_id]);
} catch (PDOException $e) {
// fallback SOLO se l'errore è "Unknown column"
if (stripos($e->getMessage(), 'Unknown column') !== false) {
$stmtIns = $pdo->prepare("
INSERT INTO session_bookings (session_id, user_id, status)
VALUES (?, ?, 'booked')
");
$stmtIns->execute([$session_id, $user_id]);
} else {
throw $e;
}
}
$feedback = '<div class="alert alert-success alert-dismissible fade show">Partecipante aggiunto alla lezione!<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
}
}
}
}
}
}
// Marca come persa
elseif ($action === 'mark_lost') {
$booking_id = (int)($_POST['booking_id'] ?? 0);
$stmt = $pdo->prepare("UPDATE session_bookings SET status = 'missed' 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 = '<div class="alert alert-warning alert-dismissible fade show">Presenza segnata come persa.<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
}
// 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 = '<div class="alert alert-danger alert-dismissible fade show">Prenotazione rimossa.<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
}
}
// 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.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','missed')) 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;
}
?>
<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Lezioni Future - <?php echo htmlspecialchars($school_name); ?></title>
<?php include('cssinclude.php'); ?>
<?php include('siteinfo.php'); ?>
<link rel="stylesheet" href="assets/plugins/select2/css/select2.min.css">
</head>
<body>
<div class="wrapper">
<?php include('include/navbar.php'); ?>
<?php include('include/topbar.php'); ?>
<div class="page-wrapper">
<div class="page-content">
<div class="card radius-10 mb-4">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="me-4">
<img src="<?php echo $school['logo'] ? htmlspecialchars($school['logo']) : 'assets/images/default-school-logo.png'; ?>"
alt="Logo" class="rounded-circle" style="width: 100px; height: 100px; object-fit: cover;">
</div>
<div class="flex-grow-1">
<h4 class="mb-1">Lezioni Future - <?php echo htmlspecialchars($school_name); ?></h4>
<p class="mb-0 text-muted">Gestione completa: lista prenotati, P/C, cancellazione con avviso email.</p>
</div>
<div>
<a href="sessions_archive.php" class="btn btn-outline-secondary">Archivio</a>
<a href="school_dashboard.php" class="btn btn-outline-primary">← Dashboard</a>
</div>
</div>
</div>
</div>
<?php echo $feedback; ?>
<?php if (empty($grouped)): ?>
<div class="card radius-10">
<div class="card-body text-center py-5">
<h5 class="text-muted">Nessuna lezione programmata nel futuro.</h5>
</div>
</div>
<?php else: ?>
<?php foreach ($grouped as $month): ?>
<div class="card radius-10 mb-4">
<div class="card-header bg-primary text-white">
<h5 class="mb-0"><?php echo htmlspecialchars($month['name']); ?></h5>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-hover mb-0">
<thead class="table-light">
<tr>
<th>Data</th>
<th>Classe</th>
<th>Livello</th>
<th>Orario</th>
<th>Sala</th>
<th>Insegnante</th>
<th>Prenotati</th>
<th>Azioni</th>
</tr>
</thead>
<tbody>
<?php foreach ($month['sessions'] as $s): ?>
<tr id="<?php echo $s['session_id']; ?>">
<td><?php echo date('d/m/Y (l)', strtotime($s['session_date'])); ?></td>
<td><?php echo htmlspecialchars($s['class_name']); ?></td>
<td><?php echo ucfirst($s['level'] ?? '-'); ?></td>
<td><?php echo substr($s['start_time'], 0, 5) . ' - ' . substr($s['end_time'], 0, 5); ?></td>
<td><?php echo htmlspecialchars($s['room_name'] ?? '—'); ?></td>
<td><?php echo $s['first_name'] ? htmlspecialchars($s['first_name'] . ' ' . $s['last_name']) : '<em>Non assegnato</em>'; ?></td>
<td>
<button type="button"
class="btn btn-sm <?php echo ((int)$s['booked_count'] > 0) ? 'btn-success' : 'btn-outline-secondary'; ?> position-relative"
data-bs-toggle="modal"
data-bs-target="#studentsModal-<?php echo (int)$s['session_id']; ?>">
<?php
$bc = (int)$s['booked_count'];
$max = (int)($s['max_capacity'] ?? 0);
echo ($max > 0) ? "{$bc}/{$max}" : "{$bc}/∞";
?>
</button>
</td>
<td>
<button type="button" class="btn btn-sm btn-danger"
data-bs-toggle="modal" data-bs-target="#deleteModal-<?php echo $s['session_id']; ?>">
<i class="bx bx-trash"></i> Cancella
</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
<!-- MODALI PRINCIPALI -->
<?php foreach ($sessions as $session): ?>
<?php
$students_list = [];
if (!empty($session['booked_students_details'])) {
foreach (explode(';;;', $session['booked_students_details']) as $entry) {
if (empty(trim($entry))) continue;
$parts = explode('|||', $entry);
$students_list[] = [
'booking_id' => (int)($parts[0] ?? 0),
'user_id' => (int)($parts[1] ?? 0),
'name' => $parts[2] ?? '',
'email' => $parts[3] ?? '',
'phone' => $parts[4] ?? '—',
'status' => $parts[5] ?? 'booked'
];
}
}
?>
<!-- Modale Lista Prenotati + P/C -->
<div class="modal fade" id="studentsModal-<?php echo $session['session_id']; ?>" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header bg-primary text-white">
<h5 class="modal-title">Prenotati - <?php echo htmlspecialchars($session['class_name']); ?> del <?php echo date('d/m/Y', strtotime($session['session_date'])); ?></h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<?php
// Utenti già presenti (per escluderli dal dropdown)
$bookedUserIds = [];
foreach ($students_list as $st) {
if (!empty($st['user_id'])) $bookedUserIds[] = (int)$st['user_id'];
}
// Utenti disponibili = utenti scuola - già presenti
$availableUsers = array_values(array_filter($schoolUsers, function ($u) use ($bookedUserIds) {
return !in_array((int)$u['id'], $bookedUserIds, true);
}));
$isFull = false;
$maxCap = (int)($session['max_capacity'] ?? 0);
$bookedCnt = (int)($session['booked_count'] ?? 0);
if ($maxCap > 0 && $bookedCnt >= $maxCap) $isFull = true;
?>
<div class="mb-3 p-3 border rounded bg-light">
<div class="d-flex align-items-center justify-content-between mb-2">
<strong>Aggiungi partecipante</strong>
<small class="text-muted">
Capienza: <?php echo $maxCap > 0 ? ($bookedCnt . '/' . $maxCap) : ($bookedCnt . '/∞'); ?>
</small>
</div>
<?php if ($isFull): ?>
<div class="text-danger small">Lezione piena: non puoi aggiungere altri partecipanti.</div>
<?php elseif (empty($availableUsers)): ?>
<div class="text-muted small">Nessun utente disponibile (tutti già presenti o nessun utente associato alla scuola).</div>
<?php else: ?>
<form method="POST" class="row g-2 align-items-end">
<input type="hidden" name="action" value="add_booking">
<input type="hidden" name="session_id" value="<?php echo (int)$session['session_id']; ?>">
<div class="col-12 col-md-8">
<label class="form-label mb-1">Seleziona utente</label>
<select name="user_id" class="form-select select2-user" required data-placeholder="Cerca per nome o email">
<option value=""></option>
<?php foreach ($availableUsers as $u): ?>
<option value="<?php echo (int)$u['id']; ?>">
<?php
$full = trim(($u['first_name'] ?? '') . ' ' . ($u['last_name'] ?? ''));
echo htmlspecialchars($full . ' — ' . ($u['email'] ?? ''));
?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="col-12 col-md-4">
<button type="submit" class="btn btn-primary w-100">
<i class="bx bx-plus"></i> Aggiungi
</button>
</div>
</form>
<?php endif; ?>
</div>
<?php if (empty($students_list)): ?>
<p class="text-center text-muted">Nessuno prenotato.</p>
<?php else: ?>
<table class="table table-sm table-hover">
<thead class="table-light">
<tr>
<th>Nome</th>
<th>Email</th>
<th>Telefono</th>
<th>Stato</th>
<th>Azioni</th>
</tr>
</thead>
<tbody>
<?php foreach ($students_list as $stud): ?>
<tr>
<td><strong><?php echo htmlspecialchars($stud['name']); ?></strong></td>
<td><?php echo htmlspecialchars($stud['email']); ?></td>
<td><?php echo htmlspecialchars($stud['phone']); ?></td>
<td>
<span class="badge <?php echo $stud['status'] === 'missed' ? 'bg-warning' : 'bg-success'; ?>">
<?php echo $stud['status'] === 'missed' ? 'Persa' : 'Prenotato'; ?>
</span>
</td>
<td>
<?php if ($stud['status'] !== 'missed'): ?>
<button type="button" class="btn btn-sm btn-warning me-1" data-bs-toggle="modal" data-bs-target="#lostModal-<?php echo $stud['booking_id']; ?>">P</button>
<?php endif; ?>
<button type="button" class="btn btn-sm btn-danger" data-bs-toggle="modal" data-bs-target="#cancelModal-<?php echo $stud['booking_id']; ?>">C</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Chiudi</button>
</div>
</div>
</div>
</div>
<!-- Modali P e C per ogni studente -->
<?php foreach ($students_list as $stud): ?>
<div class="modal fade" id="lostModal-<?php echo $stud['booking_id']; ?>" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-warning text-dark">
<h5 class="modal-title">Segna come Persa</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>Confermi di segnare come <strong>persa</strong> la lezione per <strong><?php echo htmlspecialchars($stud['name']); ?></strong>?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annulla</button>
<form method="POST" style="display:inline;">
<input type="hidden" name="action" value="mark_lost">
<input type="hidden" name="booking_id" value="<?php echo $stud['booking_id']; ?>">
<button type="submit" class="btn btn-warning">Sì, segna persa</button>
</form>
</div>
</div>
</div>
</div>
<div class="modal fade" id="cancelModal-<?php echo $stud['booking_id']; ?>" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-danger text-white">
<h5 class="modal-title">Rimuovi Prenotazione</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>Confermi di rimuovere <strong><?php echo htmlspecialchars($stud['name']); ?></strong> dalla lezione?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annulla</button>
<form method="POST" style="display:inline;">
<input type="hidden" name="action" value="cancel_booking">
<input type="hidden" name="booking_id" value="<?php echo $stud['booking_id']; ?>">
<button type="submit" class="btn btn-danger">Sì, rimuovi</button>
</form>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
<!-- Modale Cancellazione Lezione con checkbox email (FIX DEFINITIVO) -->
<div class="modal fade" id="deleteModal-<?php echo $session['session_id']; ?>" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<form method="POST">
<div class="modal-header bg-danger text-white">
<h5 class="modal-title">Cancella Lezione</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>Confermi la cancellazione della lezione:</p>
<ul>
<li><strong>Classe:</strong> <?php echo htmlspecialchars($session['class_name']); ?></li>
<li><strong>Data:</strong> <?php echo date('d/m/Y (l)', strtotime($session['session_date'])); ?></li>
<li><strong>Orario:</strong> <?php echo substr($session['start_time'], 0, 5); ?> - <?php echo substr($session['end_time'], 0, 5); ?></li>
<li><strong>Prenotati:</strong> <?php echo (int)$session['booked_count']; ?></li>
</ul>
<?php if ((int)$session['booked_count'] > 0): ?>
<div class="form-check mt-3">
<input class="form-check-input" type="checkbox"
name="send_email" value="1"
id="sendEmail-<?php echo $session['session_id']; ?>">
<label class="form-check-label text-primary fw-bold"
for="sendEmail-<?php echo $session['session_id']; ?>">
Invia email di avviso ai <?php echo (int)$session['booked_count']; ?> partecipanti?
</label>
</div>
<?php endif; ?>
<input type="hidden" name="action" value="delete_session">
<input type="hidden" name="session_id" value="<?php echo (int)$session['session_id']; ?>">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annulla</button>
<button type="submit" class="btn btn-danger">Cancella Lezione</button>
</div>
</form>
</div>
</div>
</div>
<?php endforeach; ?>
<!-- Modale Invio Email Cancellazione -->
<?php if ($showEmailModal && $emailData): ?>
<div class="modal fade show" id="emailModal" style="display:block;" tabindex="-1" aria-modal="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form method="POST">
<div class="modal-header bg-warning text-dark">
<h5 class="modal-title">Invia Avviso Cancellazione</h5>
</div>
<div class="modal-body">
<p>Stai per cancellare la lezione. Vuoi inviare l'email a <strong><?php echo count($emailData['recipients']); ?> partecipanti</strong>?</p>
<div class="mb-3">
<label class="form-label">Oggetto</label>
<input type="text" class="form-control" value="Lezione cancellata - <?php echo htmlspecialchars($school_name); ?>" readonly>
</div>
<div class="mb-3">
<label class="form-label">Messaggio (modificabile)</label>
<textarea name="email_body" class="form-control" rows="12" required>Ciao {nome},
ti informiamo con dispiacere che la lezione di <?php echo htmlspecialchars($emailData['class_name']); ?><?php echo $emailData['level'] ? ' (' . ucfirst($emailData['level']) . ')' : ''; ?>
del <?php echo $emailData['date']; ?> alle ore <?php echo $emailData['time']; ?> è stata cancellata.
Ci scusiamo per il disagio.
Grazie per la comprensione,
<?php echo htmlspecialchars($school_name); ?></textarea>
<small class="text-muted">{nome} verrà sostituito con il nome del destinatario.</small>
</div>
<input type="hidden" name="session_id" value="<?php echo $emailData['session_id']; ?>">
</div>
<div class="modal-footer">
<button type="submit" name="action" value="skip_cancellation_email" class="btn btn-secondary">
Salta invio
</button>
<button type="submit" name="action" value="send_cancellation_email" class="btn btn-success">
Invia Email
</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal-backdrop fade show"></div>
<?php endif; ?>
<?php include('include/footer.php'); ?>
</div>
<?php include('jsinclude.php'); ?>
<script src="assets/plugins/select2/js/select2.min.js"></script>
<script>
document.addEventListener('shown.bs.modal', function(e) {
const modal = e.target;
if (!window.jQuery || !jQuery.fn || !jQuery.fn.select2) return;
modal.querySelectorAll('.select2-user').forEach(function(sel) {
const $sel = jQuery(sel);
// evita doppia init
if ($sel.hasClass('select2-hidden-accessible')) return;
$sel.select2({
dropdownParent: jQuery(modal),
width: '100%',
placeholder: sel.dataset.placeholder || 'Seleziona...'
});
});
});
</script>
</body>
</html>