From 88fb053031152c9485d1cd82d6611f4ef3aa70b1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 31 Jan 2026 20:36:55 +0000 Subject: [PATCH] Add permission levels for linked projects (read-only, request edit, full edit) Co-authored-by: naielv <109038805+naielv@users.noreply.github.com> --- public_html/entreaulas/proyectos.php | 120 +++++++++++++++++++++++---- public_html/sysadmin/aularios.php | 29 +++++-- 2 files changed, 125 insertions(+), 24 deletions(-) diff --git a/public_html/entreaulas/proyectos.php b/public_html/entreaulas/proyectos.php index de518b6..5b7704b 100644 --- a/public_html/entreaulas/proyectos.php +++ b/public_html/entreaulas/proyectos.php @@ -100,7 +100,13 @@ function list_projects($proyectos_dir, $parent_id = null) { return $projects; } -// Function to get linked projects from other aularios +/** + * Get linked projects from other aularios based on aulario configuration + * + * @param array $aulario The aulario configuration containing linked_projects array + * @param string $centro_id The centro ID for constructing file paths + * @return array Array of project data arrays with is_linked and source_aulario fields added + */ function get_linked_projects($aulario, $centro_id) { $linked = []; $linked_projects = $aulario["linked_projects"] ?? []; @@ -244,9 +250,25 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { $item_type = $_POST["item_type"] ?? "link"; $item_name = trim($_POST["item_name"] ?? ""); $item_url = trim($_POST["item_url"] ?? ""); + $source_aulario_param = $_POST["source_aulario"] ?? ""; + + // Determine which directory to use based on whether this is a linked project + $working_dir = $proyectos_dir; + if (!empty($source_aulario_param)) { + // Validate the link + $linked_projects = $aulario["linked_projects"] ?? []; + foreach ($linked_projects as $link) { + if (($link["source_aulario"] ?? "") === $source_aulario_param && + ($link["project_id"] ?? "") === $project_id && + (($link["permission"] ?? "read_only") === "full_edit" || ($link["permission"] ?? "read_only") === "request_edit")) { + $working_dir = "/DATA/entreaulas/Centros/$centro_id/Aularios/$source_aulario_param/Proyectos"; + break; + } + } + } if ($project_id !== "" && $item_name !== "") { - $project = load_project($proyectos_dir, $project_id); + $project = load_project($working_dir, $project_id); if ($project) { $item_id = generate_id($item_name); $item = [ @@ -262,7 +284,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { $item["url"] = $item_url; } elseif ($item_type === "file" && isset($_FILES["item_file"]) && $_FILES["item_file"]["error"] === UPLOAD_ERR_OK) { // Handle file upload with validation - $project_dir = "$proyectos_dir/$project_id"; + $project_dir = "$working_dir/$project_id"; if (!is_dir($project_dir)) { mkdir($project_dir, 0755, true); } @@ -316,9 +338,13 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { $project["items"][] = $item; $project["updated_at"] = time(); - save_project($proyectos_dir, $project_id, $project); + save_project($working_dir, $project_id, $project); - header("Location: /entreaulas/proyectos.php?aulario=" . urlencode($aulario_id) . "&project=" . urlencode($project_id)); + $redirect_params = "aulario=" . urlencode($aulario_id) . "&project=" . urlencode($project_id); + if (!empty($source_aulario_param)) { + $redirect_params .= "&source=" . urlencode($source_aulario_param); + } + header("Location: /entreaulas/proyectos.php?" . $redirect_params); exit; } } @@ -328,9 +354,25 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { if ($action === "delete_item") { $project_id = $_POST["project_id"] ?? ""; $item_id = $_POST["item_id"] ?? ""; + $source_aulario_param = $_POST["source_aulario"] ?? ""; + + // Determine which directory to use based on whether this is a linked project + $working_dir = $proyectos_dir; + if (!empty($source_aulario_param)) { + // Validate the link + $linked_projects = $aulario["linked_projects"] ?? []; + foreach ($linked_projects as $link) { + if (($link["source_aulario"] ?? "") === $source_aulario_param && + ($link["project_id"] ?? "") === $project_id && + (($link["permission"] ?? "read_only") === "full_edit" || ($link["permission"] ?? "read_only") === "request_edit")) { + $working_dir = "/DATA/entreaulas/Centros/$centro_id/Aularios/$source_aulario_param/Proyectos"; + break; + } + } + } if ($project_id !== "" && $item_id !== "") { - $project = load_project($proyectos_dir, $project_id); + $project = load_project($working_dir, $project_id); if ($project && isset($project["items"])) { $new_items = []; foreach ($project["items"] as $item) { @@ -339,7 +381,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { } else { // Delete file if it's a file type if ($item["type"] === "file" && isset($item["filename"])) { - $file_path = "$proyectos_dir/$project_id/" . $item["filename"]; + $file_path = "$working_dir/$project_id/" . $item["filename"]; if (file_exists($file_path)) { unlink($file_path); } @@ -348,9 +390,13 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { } $project["items"] = $new_items; $project["updated_at"] = time(); - save_project($proyectos_dir, $project_id, $project); + save_project($working_dir, $project_id, $project); - header("Location: /entreaulas/proyectos.php?aulario=" . urlencode($aulario_id) . "&project=" . urlencode($project_id)); + $redirect_params = "aulario=" . urlencode($aulario_id) . "&project=" . urlencode($project_id); + if (!empty($source_aulario_param)) { + $redirect_params .= "&source=" . urlencode($source_aulario_param); + } + header("Location: /entreaulas/proyectos.php?" . $redirect_params); exit; } } @@ -493,17 +539,45 @@ $view = $current_project ? "project" : "list";
@@ -544,8 +618,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. +
+ + ✏️ Proyecto compartido con permisos de edición: Este es un proyecto compartido desde otro aulario. Puedes ver y editar su contenido. Los cambios se guardarán en el aulario origen. + + ℹ️ Proyecto compartido (solo lectura): Este es un proyecto compartido desde otro aulario. Solo puedes ver su contenido, pero no editarlo. +
@@ -577,7 +655,7 @@ $view = $current_project ? "project" : "list";
- +
@@ -727,6 +808,9 @@ $view = $current_project ? "project" : "list";