prepare("DELETE FROM aularios WHERE org_id = ? AND aulario_id = ?") ->execute([$centro_id, $aulario_id]); // Remove comedor, diario, panel data db()->prepare("DELETE FROM comedor_menu_types WHERE org_id = ? AND aulario_id = ?") ->execute([$centro_id, $aulario_id]); db()->prepare("DELETE FROM comedor_entries WHERE org_id = ? AND aulario_id = ?") ->execute([$centro_id, $aulario_id]); db()->prepare("DELETE FROM diario_entries WHERE org_id = ? AND aulario_id = ?") ->execute([$centro_id, $aulario_id]); db()->prepare("DELETE FROM panel_alumno WHERE org_id = ? AND aulario_id = ?") ->execute([$centro_id, $aulario_id]); // Remove filesystem directory with student photos $aulario_dir = aulatek_orgs_base_path() . "/$centro_id/Aularios/$aulario_id"; function rrmdir($dir) { if (is_dir($dir)) { foreach (scandir($dir) as $object) { if ($object !== "." && $object !== "..") { $p = "$dir/$object"; is_dir($p) ? rrmdir($p) : unlink($p); } } rmdir($dir); } } rrmdir($aulario_dir); header("Location: ?action=index"); exit(); break; case "create": $centro_id = safe_path_segment(Sf($_POST["centro"] ?? ($_POST["org"] ?? ""))); $aulario_id = strtolower(preg_replace("/[^a-zA-Z0-9_-]/", "_", Sf($_POST["name"] ?? ""))); if (empty($centro_id) || empty($aulario_id)) { die("Datos incompletos."); } // Ensure centro exists in DB $stmt = db()->prepare("SELECT id FROM organizaciones WHERE org_id = ?"); $stmt->execute([$centro_id]); if (!$stmt->fetch()) { die("Centro no válido."); } db()->prepare( "INSERT OR IGNORE INTO aularios (org_id, aulario_id, name, icon) VALUES (?, ?, ?, ?)" )->execute([ $centro_id, $aulario_id, Sf($_POST["name"] ?? ""), Sf($_POST["icon"] ?? "/static/logo-entreaulas.png"), ]); // Create Proyectos directory for project file storage $proyectos_dir = aulatek_orgs_base_path() . "/$centro_id/Aularios/$aulario_id/Proyectos/"; if (!is_dir($proyectos_dir)) { mkdir($proyectos_dir, 0755, true); } header("Location: ?action=index"); exit(); break; case "save_edit": $aulario_id = safe_path_segment(Sf($_POST["aulario_id"] ?? "")); $centro_id = safe_path_segment(Sf($_POST["centro_id"] ?? "")); if ($aulario_id === "" || $centro_id === "") { die("Parámetros inválidos."); } // Fetch existing extra data $existing = db_get_aulario($centro_id, $aulario_id); if ($existing === null) { die("Aulario no encontrado."); } // Build extra JSON preserving any existing extra fields $extra_skip = ['name', 'icon']; $extra = []; foreach ($existing as $k => $v) { if (!in_array($k, $extra_skip, true)) { $extra[$k] = $v; } } // Update shared_comedor_from if posted if (isset($_POST['shared_comedor_from'])) { $extra['shared_comedor_from'] = Sf($_POST['shared_comedor_from']); } db()->prepare( "UPDATE aularios SET name = ?, icon = ?, extra = ? WHERE org_id = ? AND aulario_id = ?" )->execute([ Sf($_POST["name"] ?? ""), Sf($_POST["icon"] ?? "/static/logo-entreaulas.png"), json_encode($extra), $centro_id, $aulario_id, ]); header("Location: ?action=edit&aulario=" . urlencode($aulario_id) . "¢ro=" . urlencode($centro_id) . "&_result=" . urlencode("Cambios guardados.")); exit(); break; } $view_action = $_GET["action"] ?? "index"; switch ($view_action) { case "new": require_once "_incl/pre-body.php"; $centro_id = safe_path_segment(Sf($_GET["centro"] ?? ($_GET["org"] ?? ""))); $all_centros = db_get_centro_ids(); ?>