prepare("DELETE FROM timetable WHERE class_id = ?");
$stmt->bind_param("i", $classe_id);
$stmt->execute();
$stmt->close();
$inserimenti = 0;
$materie_create = [];
// Processa ogni giorno
foreach ($data['giorni'] as $giorno => $ore) {
foreach ($ore as $oraData) {
// Salta ore vuote
if ($oraData['materia'] === null) {
continue;
}
$ora = $oraData['ora'];
$materia = $oraData['materia'];
$materiaCompleta = $oraData['materiaCompleta'];
$docenti = $oraData['docenti'];
$laboratori = $oraData['laboratori']; // Ora è un array
// Se non ci sono docenti, salta (situazione anomala)
if (count($docenti) === 0) {
continue;
}
// Caso 1: Stesso numero di docenti e laboratori → associazione 1:1
if (count($docenti) === count($laboratori) && count($laboratori) > 0) {
foreach ($docenti as $idx => $docente) {
$laboratorio = $laboratori[$idx];
// Cerca/crea materia
$stmt = $conn->prepare("SELECT id FROM subjects WHERE name = ? AND teacher = ? AND room = ?");
$stmt->bind_param("sss", $materiaCompleta, $docente, $laboratorio);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$subject_id = $result->fetch_assoc()['id'];
} else {
$stmt2 = $conn->prepare("INSERT INTO subjects (name, teacher, room) VALUES (?, ?, ?)");
$stmt2->bind_param("sss", $materiaCompleta, $docente, $laboratorio);
$stmt2->execute();
$subject_id = $conn->insert_id;
$stmt2->close();
$materie_create[] = "$materiaCompleta ($docente - $laboratorio)";
}
$stmt->close();
// Inserisci in timetable
$stmt3 = $conn->prepare("INSERT INTO timetable (class_id, day, hour, subject_id) VALUES (?, ?, ?, ?)");
$stmt3->bind_param("isii", $classe_id, $giorno, $ora, $subject_id);
$stmt3->execute();
$stmt3->close();
$inserimenti++;
}
}
// Caso 2: Più docenti, un laboratorio (o nessuno) → stesso laboratorio per tutti
else if (count($laboratori) <= 1) {
$laboratorio = count($laboratori) > 0 ? $laboratori[0] : null;
foreach ($docenti as $docente) {
// Cerca/crea materia
if ($laboratorio) {
$stmt = $conn->prepare("SELECT id FROM subjects WHERE name = ? AND teacher = ? AND room = ?");
$stmt->bind_param("sss", $materiaCompleta, $docente, $laboratorio);
} else {
$stmt = $conn->prepare("SELECT id FROM subjects WHERE name = ? AND teacher = ? AND (room IS NULL OR room = '')");
$stmt->bind_param("ss", $materiaCompleta, $docente);
}
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$subject_id = $result->fetch_assoc()['id'];
} else {
$stmt2 = $conn->prepare("INSERT INTO subjects (name, teacher, room) VALUES (?, ?, ?)");
$stmt2->bind_param("sss", $materiaCompleta, $docente, $laboratorio);
$stmt2->execute();
$subject_id = $conn->insert_id;
$stmt2->close();
$materie_create[] = "$materiaCompleta ($docente" . ($laboratorio ? " - $laboratorio" : "") . ")";
}
$stmt->close();
// Inserisci in timetable
$stmt3 = $conn->prepare("INSERT INTO timetable (class_id, day, hour, subject_id) VALUES (?, ?, ?, ?)");
$stmt3->bind_param("isii", $classe_id, $giorno, $ora, $subject_id);
$stmt3->execute();
$stmt3->close();
$inserimenti++;
}
}
// Caso 3: Più laboratori che docenti → usa il primo laboratorio per tutti
else {
$laboratorio = $laboratori[0];
foreach ($docenti as $docente) {
$stmt = $conn->prepare("SELECT id FROM subjects WHERE name = ? AND teacher = ? AND room = ?");
$stmt->bind_param("sss", $materiaCompleta, $docente, $laboratorio);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$subject_id = $result->fetch_assoc()['id'];
} else {
$stmt2 = $conn->prepare("INSERT INTO subjects (name, teacher, room) VALUES (?, ?, ?)");
$stmt2->bind_param("sss", $materiaCompleta, $docente, $laboratorio);
$stmt2->execute();
$subject_id = $conn->insert_id;
$stmt2->close();
$materie_create[] = "$materiaCompleta ($docente - $laboratorio)";
}
$stmt->close();
$stmt3 = $conn->prepare("INSERT INTO timetable (class_id, day, hour, subject_id) VALUES (?, ?, ?, ?)");
$stmt3->bind_param("isii", $classe_id, $giorno, $ora, $subject_id);
$stmt3->execute();
$stmt3->close();
$inserimenti++;
}
}
}
}
$message = "Importazione completata con successo!
";
$message .= "- Inserite $inserimenti ore di lezione
";
if (count($materie_create) > 0) {
$message .= "- Create " . count($materie_create) . " nuove materie";
}
$messageType = "success";
} catch (Exception $e) {
$message = "Errore durante l'importazione: " . htmlspecialchars($e->getMessage());
$messageType = "error";
}
}
}
?>
node server.js)Copyright (C) 2025 EmmeV. - Released under GNU AGPL 3.0 License.