From 1c3aef834568683b7398164cf963a8bd72c35a96 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 31 Jan 2026 20:33:32 +0000 Subject: [PATCH] Implement selective project sharing between aularios via JSON configuration Co-authored-by: naielv <109038805+naielv@users.noreply.github.com> --- public_html/entreaulas/proyectos.php | 113 ++++++++++++++++--- public_html/sysadmin/aularios.php | 162 +++++++++++++++++++++++++++ 2 files changed, 259 insertions(+), 16 deletions(-) diff --git a/public_html/entreaulas/proyectos.php b/public_html/entreaulas/proyectos.php index 22f0762..de518b6 100644 --- a/public_html/entreaulas/proyectos.php +++ b/public_html/entreaulas/proyectos.php @@ -100,6 +100,36 @@ function list_projects($proyectos_dir, $parent_id = null) { return $projects; } +// Function to get linked projects from other aularios +function get_linked_projects($aulario, $centro_id) { + $linked = []; + $linked_projects = $aulario["linked_projects"] ?? []; + + foreach ($linked_projects as $link) { + $source_aulario = $link["source_aulario"] ?? ""; + $project_id = $link["project_id"] ?? ""; + + if (empty($source_aulario) || empty($project_id)) { + continue; + } + + $source_dir = "/DATA/entreaulas/Centros/$centro_id/Aularios/$source_aulario/Proyectos"; + $project_file = "$source_dir/$project_id.json"; + + if (file_exists($project_file)) { + $project = json_decode(file_get_contents($project_file), true); + if ($project && ($project["parent_id"] ?? null) === null) { + // Mark as linked and add source info + $project["is_linked"] = true; + $project["source_aulario"] = $source_aulario; + $linked[] = $project; + } + } + } + + return $linked; +} + // Handle actions $message = ""; $error = ""; @@ -361,16 +391,31 @@ $view = $current_project ? "project" : "list"; ($a["created_at"] ?? 0); + }); + if (count($projects) > 0): ?>
- +
+ + Compartido +

@@ -384,18 +429,25 @@ $view = $current_project ? "project" : "list";

@@ -439,7 +491,19 @@ $view = $current_project ? "project" : "list";
@@ -479,6 +543,12 @@ $view = $current_project ? "project" : "list"; + +
+ ℹ️ Proyecto compartido: Este es un proyecto compartido desde otro aulario. Solo puedes ver su contenido, pero no editarlo ni eliminarlo. +
+ +
@@ -486,6 +556,9 @@ $view = $current_project ? "project" : "list"; Nivel + + Compartido +

@@ -504,6 +577,7 @@ $view = $current_project ? "project" : "list";
+
+ - " target="_blank" class="btn btn-primary btn-lg"> + + " target="_blank" class="btn btn-primary btn-lg"> Abrir Archivo +
@@ -623,6 +703,7 @@ $view = $current_project ? "project" : "list";
+
diff --git a/public_html/sysadmin/aularios.php b/public_html/sysadmin/aularios.php index 452b4da..fcc3375 100644 --- a/public_html/sysadmin/aularios.php +++ b/public_html/sysadmin/aularios.php @@ -40,6 +40,26 @@ switch ($_GET["form"]) { unset($aulario_data["shared_comedor_from"]); } + // Handle linked projects configuration + $linked_projects = []; + $linked_aularios = $_POST["linked_aulario"] ?? []; + $linked_project_ids = $_POST["linked_project_id"] ?? []; + + for ($i = 0; $i < count($linked_aularios); $i++) { + if (!empty($linked_aularios[$i]) && !empty($linked_project_ids[$i])) { + $linked_projects[] = [ + "source_aulario" => $linked_aularios[$i], + "project_id" => $linked_project_ids[$i] + ]; + } + } + + if (count($linked_projects) > 0) { + $aulario_data["linked_projects"] = $linked_projects; + } else { + unset($aulario_data["linked_projects"]); + } + file_put_contents($aulario_file, json_encode($aulario_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); header("Location: ?action=edit&aulario=" . urlencode($aulario_id) . "¢ro=" . urlencode($centro_id) . "&saved=1"); exit(); @@ -104,6 +124,29 @@ switch ($_GET["action"]) { $available_aularios[$aul_id] = $aul_data['name'] ?? $aul_id; } } + + // Get available projects from other aularios + $available_projects_by_aulario = []; + foreach ($available_aularios as $aul_id => $aul_name) { + $proj_dir = "/DATA/entreaulas/Centros/$centro_id/Aularios/$aul_id/Proyectos"; + if (is_dir($proj_dir)) { + $projects = []; + $files = glob("$proj_dir/*.json"); + foreach ($files as $file) { + $proj_data = json_decode(file_get_contents($file), true); + // Only include root projects (no parent) + if ($proj_data && ($proj_data["parent_id"] ?? null) === null) { + $projects[] = [ + "id" => $proj_data["id"] ?? basename($file, ".json"), + "name" => $proj_data["name"] ?? "Sin nombre" + ]; + } + } + if (count($projects) > 0) { + $available_projects_by_aulario[$aul_id] = $projects; + } + } + } ?>
Cambios guardados correctamente.
@@ -138,6 +181,125 @@ switch ($_GET["action"]) {
+
+

Proyectos Enlazados

+

Selecciona proyectos raíz específicos de otros aularios para mostrarlos en este aulario. Los proyectos enlazados se mostrarán como solo lectura.

+ +
+ "", "project_id" => ""]]; + } + foreach ($existing_links as $idx => $link): + $source_aul = $link['source_aulario'] ?? ''; + $proj_id = $link['project_id'] ?? ''; + ?> +
+
+ +
+
+ +
+
+ +
+
+ +
+ + + + +