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):
?>
-
+
= htmlspecialchars($project["name"]) ?>
+
+ Compartido
+
= htmlspecialchars($project["description"]) ?>
@@ -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.
+
+
+
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'] ?? '';
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+