getConnection(); if (!isset($iduserlogin)) { die("Errore: ID utente non definito."); } /* |-------------------------------------------------------------------------- | 1) Load school owned by current user |-------------------------------------------------------------------------- */ $stmt = $pdo->prepare("SELECT id, name, logo FROM schools WHERE owner_id = ? LIMIT 1"); $stmt->execute([(int)$iduserlogin]); $school = $stmt->fetch(PDO::FETCH_ASSOC); if (!$school) { die("Errore: Nessuna scuola trovata per questo account."); } $school_id = (int)$school['id']; $school_name = $school['name'] ?? 'School'; /* |-------------------------------------------------------------------------- | 2) Helpers |-------------------------------------------------------------------------- */ function itDayLabel(string $dow): string { $map = [ 'monday' => 'Lunedì', 'tuesday' => 'Martedì', 'wednesday' => 'Mercoledì', 'thursday' => 'Giovedì', 'friday' => 'Venerdì', 'saturday' => 'Sabato', 'sunday' => 'Domenica' ]; return $map[$dow] ?? ucfirst($dow); } function safeTime($t): string { // expects "HH:MM:SS" or "HH:MM" if (!$t) return '—'; return substr((string)$t, 0, 5); } /* |-------------------------------------------------------------------------- | 3) Handle delete block propagation (bookings + sessions for that block) |-------------------------------------------------------------------------- | Block key = propagation_id + class_type_id + start_time + end_time |-------------------------------------------------------------------------- */ $feedback = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; if ($action === 'delete_propagation_block') { $propagation_id = trim($_POST['propagation_id'] ?? ''); $class_type_id = (int)($_POST['class_type_id'] ?? 0); $start_time = trim($_POST['start_time'] ?? ''); $end_time = trim($_POST['end_time'] ?? ''); if ($propagation_id === '' || $class_type_id <= 0 || $start_time === '' || $end_time === '') { $feedback = '
Parametri non validi per la cancellazione della propagazione.
'; } else { try { $pdo->beginTransaction(); // Delete bookings for sessions matching this block (only this school) $stmtDelBookings = $pdo->prepare(" DELETE sb FROM session_bookings sb JOIN class_sessions cs ON sb.session_id = cs.id JOIN class_types ct ON cs.class_type_id = ct.id JOIN classes c ON ct.class_id = c.id WHERE c.school_id = ? AND cs.propagation_id = ? AND cs.class_type_id = ? AND cs.start_time = ? AND cs.end_time = ? "); $stmtDelBookings->execute([$school_id, $propagation_id, $class_type_id, $start_time, $end_time]); $deletedBookings = $stmtDelBookings->rowCount(); // Delete sessions for this block (only this school) $stmtDelSessions = $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 c.school_id = ? AND cs.propagation_id = ? AND cs.class_type_id = ? AND cs.start_time = ? AND cs.end_time = ? "); $stmtDelSessions->execute([$school_id, $propagation_id, $class_type_id, $start_time, $end_time]); $deletedSessions = $stmtDelSessions->rowCount(); $pdo->commit(); $feedback = "
Propagazione rimossa con successo.
Codice: " . htmlspecialchars($propagation_id) . " | Sessioni eliminate: {$deletedSessions} | Prenotazioni eliminate: {$deletedBookings}
"; } catch (Throwable $e) { if ($pdo->inTransaction()) $pdo->rollBack(); $feedback = "
Errore durante la cancellazione: " . htmlspecialchars($e->getMessage()) . "
"; } } } } /* |-------------------------------------------------------------------------- | 4) Load propagation blocks (GROUPED - no single sessions list) |-------------------------------------------------------------------------- | One row per propagation_id + class_type + time range. |-------------------------------------------------------------------------- */ $stmt = $pdo->prepare(" SELECT cs.propagation_id, ct.id AS class_type_id, c.name AS class_name, ct.level, ct.day_of_week, cs.start_time, cs.end_time, MIN(cs.session_date) AS range_start, MAX(cs.session_date) AS range_end, COUNT(DISTINCT cs.id) AS sessions_count, SUM(CASE WHEN sb.id IS NULL THEN 0 ELSE 1 END) AS bookings_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 LEFT JOIN session_bookings sb ON sb.session_id = cs.id WHERE c.school_id = ? AND cs.propagation_id IS NOT NULL AND cs.propagation_id <> '' GROUP BY cs.propagation_id, ct.id, c.name, ct.level, ct.day_of_week, cs.start_time, cs.end_time ORDER BY range_start DESC, c.name ASC, cs.start_time ASC "); $stmt->execute([$school_id]); $blocks = $stmt->fetchAll(PDO::FETCH_ASSOC); /* |-------------------------------------------------------------------------- | 5) Optional quick counters for a nicer header |-------------------------------------------------------------------------- */ $totalBlocks = count($blocks); $totalSessions = 0; $totalBookings = 0; foreach ($blocks as $b) { $totalSessions += (int)($b['sessions_count'] ?? 0); $totalBookings += (int)($b['bookings_count'] ?? 0); } ?> Propagazioni - <?php echo htmlspecialchars($school_name); ?>
Logo

Propagazioni -

Vista “a blocchi”: codice propagazione + classe + giorno/ora + range (da–a). Nessun elenco di singole sessioni.

Blocchi: Sessioni generate: Prenotazioni totali:
Nessuna propagazione trovata.

Quando generi lezioni propagate, appariranno qui raggruppate per blocchi.

Blocchi di Propagazione
Codice Classe Giorno Ora Da A Sessioni Prenotazioni Azioni
ID tipo:
Livello: