';
} 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 = '
Partecipante aggiunto alla lezione!
';
}
}
}
}
}
}
// 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 = '
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.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;
}
?>
Lezioni Future -
Lezioni Future -
Gestione completa: lista prenotati, P/C, cancellazione con avviso email.