From 7e85c2a1f2818807ebdba7cac6564d2de0f89e60 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 6 Mar 2026 20:40:10 +0000
Subject: [PATCH 1/7] Initial plan
From c0a93ce1095db94744463902eb31d2d362d476fe Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 6 Mar 2026 20:50:53 +0000
Subject: [PATCH 2/7] Redesign UI to match Google Workspace integrated feel
Co-authored-by: naielv <109038805+naielv@users.noreply.github.com>
---
public_html/_incl/pre-body.php | 711 +++++++++++++++------------------
public_html/index.php | 265 ++++++------
2 files changed, 439 insertions(+), 537 deletions(-)
diff --git a/public_html/_incl/pre-body.php b/public_html/_incl/pre-body.php
index d7b6592..9a39d47 100755
--- a/public_html/_incl/pre-body.php
+++ b/public_html/_incl/pre-body.php
@@ -38,412 +38,361 @@ if (!empty($displayName)) {
" />
+
+
+
@@ -548,17 +464,95 @@ if (!empty($displayName)) {
});
})();
+
+
+
+
+
Gestionar cuenta
diff --git a/public_html/_incl/switch_tenant.php b/public_html/_incl/switch_tenant.php
new file mode 100644
index 0000000..65e6891
--- /dev/null
+++ b/public_html/_incl/switch_tenant.php
@@ -0,0 +1,28 @@
+ 300) {
- $username = $_SESSION["auth_user"];
- $user_filename = safe_username_to_filename($username);
- if ($user_filename !== "") {
- $userdata = json_decode(file_get_contents("/DATA/Usuarios/" . $user_filename . ".json"), true);
- $_SESSION["auth_data"] = $userdata;
- }
- $_SESSION["last_reload_time"] = time();
+ } elseif ($load_mode !== "never") {
+ $last = $_SESSION["last_reload_time"] ?? 0;
+ if (time() - $last > 300) {
+ $row = db_get_user($_SESSION["auth_user"]);
+ if ($row) {
+ $_SESSION["auth_data"] = db_build_auth_data($row);
+ init_active_centro($_SESSION["auth_data"]);
}
- } else {
+ $_SESSION["last_reload_time"] = time();
+ }
+ if (!isset($_SESSION["last_reload_time"])) {
$_SESSION["last_reload_time"] = time();
}
}
}
-
-function user_is_authenticated()
+function user_is_authenticated(): bool
{
return isset($_SESSION["auth_ok"]) && $_SESSION["auth_ok"] === true;
}
-function user_has_permission($perm)
-{
- return in_array($perm, $_SESSION["auth_data"]["permissions"] ?? []);
-}
-/**
- * Returns all centro/tenant IDs the authenticated user belongs to.
- * Supports both the legacy single-centro format (entreaulas.centro = "string")
- * and the new multi-tenant format (entreaulas.centros = ["a", "b"]).
- */
-function get_user_centros($auth_data = null)
+function user_has_permission(string $perm): bool
{
- $data = $auth_data ?? $_SESSION["auth_data"] ?? [];
- $ea = $data["entreaulas"] ?? [];
-
- if (!empty($ea["centros"]) && is_array($ea["centros"])) {
- return array_values($ea["centros"]);
- }
- if (!empty($ea["centro"])) {
- return [$ea["centro"]];
- }
- return [];
-}
-
-/**
- * Ensures $_SESSION['active_centro'] is set to a valid centro for the user.
- * Call after user data is loaded/reloaded.
- */
-function init_active_centro($auth_data = null)
-{
- $centros = get_user_centros($auth_data);
- if (empty($centros)) {
- $_SESSION['active_centro'] = null;
- return;
- }
- // Keep existing selection only if it is still valid
- if (!empty($_SESSION['active_centro']) && in_array($_SESSION['active_centro'], $centros, true)) {
- return;
- }
- $_SESSION['active_centro'] = $centros[0];
+ return in_array($perm, $_SESSION["auth_data"]["permissions"] ?? [], true);
}
diff --git a/public_html/_install.php b/public_html/_install.php
index 764e6ca..c9eb756 100644
--- a/public_html/_install.php
+++ b/public_html/_install.php
@@ -1,28 +1,25 @@
'Administrador',
- 'email' => "$admin_user@nomail.arpa",
- 'permissions' => ['*', 'sysadmin:access', 'entreaulas:access'],
- 'password_hash' => $password_hash
- ];
- if (!is_dir("/DATA/Usuarios")) {
- mkdir("/DATA/Usuarios", 0777, true);
- }
- file_put_contents("/DATA/Usuarios/$admin_user.json", json_encode($admin_userdata, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
- file_put_contents("/DATA/SISTEMA_INSTALADO.txt", "Sistema instalado el ".date("Y-m-d H:i:s")."\n");
+ db_upsert_user([
+ 'username' => $admin_user,
+ 'display_name' => 'Administrador',
+ 'email' => "$admin_user@nomail.arpa",
+ 'permissions' => ['*', 'sysadmin:access', 'entreaulas:access'],
+ 'password_hash' => password_hash($admin_password, PASSWORD_DEFAULT),
+ ]);
+ db_set_config('installed', '1');
header("Location: /_login.php");
exit;
break;
diff --git a/public_html/_login.php b/public_html/_login.php
index 324ac4e..98d36e3 100755
--- a/public_html/_login.php
+++ b/public_html/_login.php
@@ -1,8 +1,9 @@
$name,
- "email" => $email,
- "permissions" => ["public"],
- "password_hash" => password_hash($password, PASSWORD_DEFAULT),
- "google_auth" => true,
- "#" => "Este usuario fue creado automáticamente al iniciar sesión con Google por primera vez.",
- ];
- file_put_contents($userfile, json_encode($userdata));
+ db_upsert_user([
+ 'username' => $username,
+ 'display_name' => $name,
+ 'email' => $email,
+ 'permissions' => ['public'],
+ 'password_hash' => password_hash($password, PASSWORD_DEFAULT),
+ 'google_auth' => true,
+ '#' => 'Este usuario fue creado automáticamente al iniciar sesión con Google por primera vez.',
+ ]);
+ $user_row = db_get_user($username);
}
-
+
session_regenerate_id(true);
- $_SESSION['auth_user'] = $email;
- $_SESSION['auth_data'] = $userdata;
- $_SESSION['auth_ok'] = true;
+ $_SESSION['auth_user'] = $username;
+ $_SESSION['auth_data'] = db_build_auth_data($user_row);
+ $_SESSION['auth_ok'] = true;
+ init_active_centro($_SESSION['auth_data']);
$cookie_options = ["expires" => time() + (86400 * 30), "path" => "/", "httponly" => true, "secure" => true, "samesite" => "Lax"];
- setcookie("auth_user", $email, $cookie_options);
- setcookie("auth_pass_b64", base64_encode($password), $cookie_options);
+ setcookie("auth_user", $username, $cookie_options);
+ setcookie("auth_pass_b64", base64_encode($password), $cookie_options);
$redir = safe_redir($state["redir"] ?? "/");
@@ -161,20 +164,19 @@ if ($_GET["clear_session"] == "1") {
die();
}
if (isset($_POST["user"])) {
- $valid = "";
- $user = trim(strtolower($_POST["user"]));
+ $user = trim(strtolower($_POST["user"]));
$password = $_POST["password"];
- $user_filename = safe_username_to_filename($user);
- $userdata = ($user_filename !== "") ? json_decode(@file_get_contents("/DATA/Usuarios/" . $user_filename . ".json"), true) : null;
- if (!is_array($userdata) || !isset($userdata["password_hash"])) {
+ $row = db_get_user($user);
+ if (!$row || !isset($row["password_hash"])) {
$_GET["_result"] = "El usuario no existe.";
- } elseif (password_verify($password, $userdata["password_hash"])) {
+ } elseif (password_verify($password, $row["password_hash"])) {
session_regenerate_id(true);
$_SESSION['auth_user'] = $user;
- $_SESSION['auth_data'] = $userdata;
- $_SESSION['auth_ok'] = true;
+ $_SESSION['auth_data'] = db_build_auth_data($row);
+ $_SESSION['auth_ok'] = true;
+ init_active_centro($_SESSION['auth_data']);
$cookie_options = ["expires" => time() + (86400 * 30), "path" => "/", "httponly" => true, "secure" => true, "samesite" => "Lax"];
- setcookie("auth_user", $user, $cookie_options);
+ setcookie("auth_user", $user, $cookie_options);
setcookie("auth_pass_b64", base64_encode($password), $cookie_options);
$redir = safe_redir($_GET["redir"] ?? "/");
header("Location: $redir");
@@ -182,9 +184,8 @@ if (isset($_POST["user"])) {
} else {
$_GET["_result"] = "La contraseña no es correcta.";
}
-
}
-if (!file_exists("/DATA/SISTEMA_INSTALADO.txt")) {
+if (db_get_config('installed') !== '1') {
header("Location: /_install.php");
die();
}
diff --git a/public_html/account/index.php b/public_html/account/index.php
index 0ea6b70..aa9838b 100644
--- a/public_html/account/index.php
+++ b/public_html/account/index.php
@@ -1,44 +1,131 @@
-
-
-
¡Hola, !
- Tu Email:
- Tu Nombre de Usuario:
-
-
-
Código QR
-
" alt="QR Code de Nombre de Usuario" style="margin: 0 auto;">
-
Escanea este código para iniciar sesión. Es como tu contraseña, pero más fácil.
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
Mi Perfil
+
= htmlspecialchars($initials) ?>
+
= htmlspecialchars($displayName) ?>
+
= htmlspecialchars($email ?: 'Sin correo') ?>
+
Usuario = htmlspecialchars($username) ?>
+
+
Rol = htmlspecialchars($role) ?>
+
+
+
+
+
+
+
Código QR de Acceso
+
+
Escanea este código para iniciar sesión rápidamente.
+
+
+
+
+
+
Organizaciones
+
+
+
+
+
+
+
+
+
+
Mis Aulas (= htmlspecialchars($activeCentro) ?>)
+
+
+
+
+
+
+
= htmlspecialchars($aula['name'] ?? $aula_id) ?>
+
Asignada
+
+
+
+
+
+
+
+
+
Permisos
+
+
+ = htmlspecialchars($p) ?>
+
+
+
+
+
+
+
+
Sesión Activa
+
ID Sesión = htmlspecialchars(substr(session_id(), 0, 12)) ?>…
+
Org. activa = htmlspecialchars($activeCentro ?: '–') ?>
+
Autenticación = empty($authData['google_auth']) ? 'Contraseña' : 'Google' ?>
+
+
+
+
+
+
diff --git a/public_html/account/register.php b/public_html/account/register.php
index 7dbc0f5..1752e34 100644
--- a/public_html/account/register.php
+++ b/public_html/account/register.php
@@ -1,36 +1,27 @@
$_POST['display_name'],
- 'email' => $_POST['email'],
- 'password_hash' => password_hash($_POST['password'], PASSWORD_DEFAULT),
- '_meta_signup' => [
- 'invitation_code' => $invi_code
- ],
- 'permissions' => []
- ];
- if ($invitations[$invi_code]["active"] != true) {
- header("Location: /?_resultcolor=red&_result=" . urlencode("Código de invitación no válido."));
- exit;
- }
- $username = $_POST['username'];
- if (file_exists("/DATA/Usuarios/$username.json")) {
+ $username = strtolower(trim($_POST['username'] ?? ''));
+ if (db_get_user($username)) {
header("Location: /?_resultcolor=red&_result=" . urlencode("El nombre de usuario ya existe. Por favor, elige otro."));
exit;
}
- file_put_contents("/DATA/Usuarios/$username.json", json_encode($userdata, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
- // Deactivate invitation code if it's single-use
- if ($invitations[$invi_code]["single_use"] === true) {
- $invitations[$invi_code]["active"] = false;
- file_put_contents("/DATA/Invitaciones_de_usuarios.json", json_encode($invitations, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ db_upsert_user([
+ 'username' => $username,
+ 'display_name' => $_POST['display_name'] ?? '',
+ 'email' => $_POST['email'] ?? '',
+ 'password_hash' => password_hash($_POST['password'], PASSWORD_DEFAULT),
+ 'permissions' => [],
+ '_meta_signup' => ['invitation_code' => $invi_code],
+ ]);
+ if ($invitation['single_use']) {
+ db_deactivate_invitation($invi_code);
}
header("Location: /?_result=" . urlencode("Cuenta creada correctamente. Ya puedes iniciar sesión."));
exit;
diff --git a/public_html/aulatek/api/comedor.php b/public_html/aulatek/api/comedor.php
index 320ca98..36aa8d9 100644
--- a/public_html/aulatek/api/comedor.php
+++ b/public_html/aulatek/api/comedor.php
@@ -2,24 +2,7 @@
header("Content-Type: application/json; charset=utf-8");
require_once "_incl/auth_redir.php";
require_once "../_incl/tools.security.php";
-
-function menu_types_path($centro_id, $aulario_id) {
- $centro = safe_centro_id($centro_id);
- $aulario = safe_id_segment($aulario_id);
- if ($centro === '' || $aulario === '') {
- return null;
- }
- return "/DATA/entreaulas/Centros/$centro/Aularios/$aulario/Comedor-MenuTypes.json";
-}
-
-function comedor_day_base_dir($centro_id, $aulario_id, $ym, $day) {
- $centro = safe_centro_id($centro_id);
- $aulario = safe_id_segment($aulario_id);
- if ($centro === '' || $aulario === '') {
- return null;
- }
- return "/DATA/entreaulas/Centros/$centro/Aularios/$aulario/Comedor/$ym/$day";
-}
+require_once "../../_incl/db.php";
// Check permissions
if (!in_array("entreaulas:docente", $_SESSION["auth_data"]["permissions"] ?? [])) {
@@ -33,64 +16,48 @@ if ($centro_id === "") {
die(json_encode(["error" => "Centro not found in session", "code" => "INVALID_SESSION"]));
}
-$action = $_GET["action"] ?? ($_POST["action"] ?? "");
+$action = $_GET["action"] ?? ($_POST["action"] ?? "");
$aulario_id = safe_id_segment($_GET["aulario"] ?? $_POST["aulario"] ?? "");
-// Validate aulario_id
if ($aulario_id === "") {
http_response_code(400);
die(json_encode(["error" => "aulario parameter is required", "code" => "MISSING_PARAM"]));
}
-// Verify that the user has access to this aulario
-$userAulas = $_SESSION["auth_data"]["entreaulas"]["aulas"] ?? [];
-$userAulas = array_values(array_filter(array_map('safe_id_segment', $userAulas)));
+$userAulas = array_values(array_filter(array_map('safe_id_segment', $_SESSION["auth_data"]["entreaulas"]["aulas"] ?? [])));
if (!in_array($aulario_id, $userAulas, true)) {
http_response_code(403);
die(json_encode(["error" => "Access denied to this aulario", "code" => "FORBIDDEN"]));
}
-$aulario_path = safe_aulario_config_path($centro_id, $aulario_id);
-$aulario = ($aulario_path && file_exists($aulario_path)) ? json_decode(file_get_contents($aulario_path), true) : null;
+$aulario = db_get_aulario($centro_id, $aulario_id);
-// Handle shared comedor data
$source_aulario_id = $aulario_id;
$is_shared = false;
if ($aulario && !empty($aulario["shared_comedor_from"])) {
$shared_from = safe_id_segment($aulario["shared_comedor_from"]);
- $shared_aulario_path = safe_aulario_config_path($centro_id, $shared_from);
- if ($shared_aulario_path && file_exists($shared_aulario_path)) {
+ if (db_get_aulario($centro_id, $shared_from)) {
$source_aulario_id = $shared_from;
$is_shared = true;
}
}
-// Check edit permissions (must be sysadmin and not shared)
$canEdit = in_array("sysadmin:access", $_SESSION["auth_data"]["permissions"] ?? []) && !$is_shared;
-// Helper functions
-function get_menu_types($centro_id, $source_aulario_id) {
- $menuTypesPath = menu_types_path($centro_id, $source_aulario_id);
- $defaultMenuTypes = [
- ["id" => "basal", "label" => "Menú basal", "color" => "#0d6efd"],
- ["id" => "vegetariano", "label" => "Menú vegetariano", "color" => "#198754"],
- ["id" => "alergias", "label" => "Menú alergias", "color" => "#dc3545"],
- ];
+$defaultMenuTypes = [
+ ["id" => "basal", "label" => "Menú basal", "color" => "#0d6efd"],
+ ["id" => "vegetariano", "label" => "Menú vegetariano", "color" => "#198754"],
+ ["id" => "alergias", "label" => "Menú alergias", "color" => "#dc3545"],
+];
- if ($menuTypesPath === null) {
+function get_menu_types($centro_id, $source_aulario_id) {
+ global $defaultMenuTypes;
+ $types = db_get_comedor_menu_types($centro_id, $source_aulario_id);
+ if (empty($types)) {
+ db_set_comedor_menu_types($centro_id, $source_aulario_id, $defaultMenuTypes);
return $defaultMenuTypes;
}
-
- if (!file_exists($menuTypesPath)) {
- if (!is_dir(dirname($menuTypesPath))) {
- mkdir(dirname($menuTypesPath), 0777, true);
- }
- file_put_contents($menuTypesPath, json_encode($defaultMenuTypes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
- return $defaultMenuTypes;
- }
-
- $menuTypes = json_decode(@file_get_contents($menuTypesPath), true);
- return (is_array($menuTypes) && count($menuTypes) > 0) ? $menuTypes : $defaultMenuTypes;
+ return $types;
}
function blank_menu() {
@@ -98,7 +65,7 @@ function blank_menu() {
"plates" => [
"primero" => ["name" => "", "pictogram" => ""],
"segundo" => ["name" => "", "pictogram" => ""],
- "postre" => ["name" => "", "pictogram" => ""],
+ "postre" => ["name" => "", "pictogram" => ""],
]
];
}
@@ -113,43 +80,25 @@ switch ($action) {
case "get_menu_types":
handle_get_menu_types();
break;
-
case "get_menu":
handle_get_menu();
break;
-
case "save_menu":
- if (!$canEdit) {
- http_response_code(403);
- die(json_encode(["error" => "Insufficient permissions to edit", "code" => "FORBIDDEN"]));
- }
+ if (!$canEdit) { http_response_code(403); die(json_encode(["error" => "Insufficient permissions to edit", "code" => "FORBIDDEN"])); }
handle_save_menu();
break;
-
case "add_menu_type":
- if (!$canEdit) {
- http_response_code(403);
- die(json_encode(["error" => "Insufficient permissions to edit", "code" => "FORBIDDEN"]));
- }
+ if (!$canEdit) { http_response_code(403); die(json_encode(["error" => "Insufficient permissions to edit", "code" => "FORBIDDEN"])); }
handle_add_menu_type();
break;
-
case "delete_menu_type":
- if (!$canEdit) {
- http_response_code(403);
- die(json_encode(["error" => "Insufficient permissions to edit", "code" => "FORBIDDEN"]));
- }
+ if (!$canEdit) { http_response_code(403); die(json_encode(["error" => "Insufficient permissions to edit", "code" => "FORBIDDEN"])); }
handle_delete_menu_type();
break;
-
case "rename_menu_type":
- if (!$canEdit) {
- http_response_code(403);
- die(json_encode(["error" => "Insufficient permissions to edit", "code" => "FORBIDDEN"]));
- }
+ if (!$canEdit) { http_response_code(403); die(json_encode(["error" => "Insufficient permissions to edit", "code" => "FORBIDDEN"])); }
handle_rename_menu_type();
break;
-
default:
http_response_code(400);
die(json_encode(["error" => "Invalid action", "code" => "INVALID_ACTION"]));
@@ -157,298 +106,102 @@ switch ($action) {
function handle_get_menu_types() {
global $centro_id, $source_aulario_id;
-
- $menuTypes = get_menu_types($centro_id, $source_aulario_id);
- echo json_encode([
- "success" => true,
- "menu_types" => $menuTypes
- ]);
+ echo json_encode(["success" => true, "menu_types" => get_menu_types($centro_id, $source_aulario_id)]);
}
function handle_get_menu() {
global $centro_id, $source_aulario_id;
-
$date = $_GET["date"] ?? date("Y-m-d");
$menuTypeId = safe_id_segment($_GET["menu"] ?? "");
-
- // Validate date
$dateObj = DateTime::createFromFormat("Y-m-d", $date);
- if (!$dateObj) {
- http_response_code(400);
- die(json_encode(["error" => "Invalid date format", "code" => "INVALID_FORMAT"]));
- }
+ if (!$dateObj) { http_response_code(400); die(json_encode(["error" => "Invalid date format", "code" => "INVALID_FORMAT"])); }
$date = $dateObj->format("Y-m-d");
-
- // Get menu types
- $menuTypes = get_menu_types($centro_id, $source_aulario_id);
- $menuTypeIds = [];
- foreach ($menuTypes as $t) {
- if (!empty($t["id"])) {
- $menuTypeIds[] = $t["id"];
- }
- }
-
- if ($menuTypeId === "" || !in_array($menuTypeId, $menuTypeIds)) {
- $menuTypeId = $menuTypeIds[0] ?? "basal";
- }
-
- // Get menu data
- $ym = $dateObj->format("Y-m");
+ $menuTypes = get_menu_types($centro_id, $source_aulario_id);
+ $menuTypeIds = array_column($menuTypes, "id");
+ if ($menuTypeId === "" || !in_array($menuTypeId, $menuTypeIds)) { $menuTypeId = $menuTypeIds[0] ?? "basal"; }
+ $ym = $dateObj->format("Y-m");
$day = $dateObj->format("d");
- $baseDir = comedor_day_base_dir($centro_id, $source_aulario_id, $ym, $day);
- if ($baseDir === null) {
- http_response_code(400);
- die(json_encode(["error" => "Invalid path parameters", "code" => "INVALID_PATH"]));
- }
- $dataPath = "$baseDir/_datos.json";
-
- $menuData = [
- "date" => $date,
- "menus" => []
- ];
-
- if (file_exists($dataPath)) {
- $existing = json_decode(file_get_contents($dataPath), true);
- if (is_array($existing)) {
- $menuData = array_merge($menuData, $existing);
- }
- }
-
- if (!isset($menuData["menus"][$menuTypeId])) {
- $menuData["menus"][$menuTypeId] = blank_menu();
- }
-
- $menuForType = $menuData["menus"][$menuTypeId];
-
- echo json_encode([
- "success" => true,
- "date" => $date,
- "menu_type" => $menuTypeId,
- "menu_types" => $menuTypes,
- "menu" => $menuForType
- ]);
+ $menuData = ["date" => $date, "menus" => []];
+ $existing = db_get_comedor_entry($centro_id, $source_aulario_id, $ym, $day);
+ if (!empty($existing)) { $menuData = array_merge($menuData, $existing); }
+ if (!isset($menuData["menus"][$menuTypeId])) { $menuData["menus"][$menuTypeId] = blank_menu(); }
+ echo json_encode(["success" => true, "date" => $date, "menu_type" => $menuTypeId, "menu_types" => $menuTypes, "menu" => $menuData["menus"][$menuTypeId]]);
}
function handle_save_menu() {
global $centro_id, $source_aulario_id;
-
- // Parse JSON body
- $input = json_decode(file_get_contents("php://input"), true);
- if (!$input) {
- $input = $_POST;
- }
-
- $date = $input["date"] ?? date("Y-m-d");
+ $input = json_decode(file_get_contents("php://input"), true) ?: $_POST;
+ $date = $input["date"] ?? date("Y-m-d");
$menuTypeId = safe_id_segment($input["menu_type"] ?? "");
- $plates = $input["plates"] ?? [];
-
- // Validate date
+ $plates = $input["plates"] ?? [];
$dateObj = DateTime::createFromFormat("Y-m-d", $date);
- if (!$dateObj) {
- http_response_code(400);
- die(json_encode(["error" => "Invalid date format", "code" => "INVALID_FORMAT"]));
- }
+ if (!$dateObj) { http_response_code(400); die(json_encode(["error" => "Invalid date format", "code" => "INVALID_FORMAT"])); }
$date = $dateObj->format("Y-m-d");
-
- // Validate menu type
- $menuTypes = get_menu_types($centro_id, $source_aulario_id);
- $validMenuTypeIds = [];
- foreach ($menuTypes as $t) {
- if (!empty($t["id"])) {
- $validMenuTypeIds[] = $t["id"];
- }
- }
-
- if (!in_array($menuTypeId, $validMenuTypeIds)) {
- http_response_code(400);
- die(json_encode(["error" => "Invalid menu type", "code" => "INVALID_MENU_TYPE"]));
- }
-
- // Get existing menu data
- $ym = $dateObj->format("Y-m");
+ $menuTypes = get_menu_types($centro_id, $source_aulario_id);
+ $validMenuTypeIds = array_column($menuTypes, "id");
+ if (!in_array($menuTypeId, $validMenuTypeIds)) { http_response_code(400); die(json_encode(["error" => "Invalid menu type", "code" => "INVALID_MENU_TYPE"])); }
+ $ym = $dateObj->format("Y-m");
$day = $dateObj->format("d");
- $baseDir = comedor_day_base_dir($centro_id, $source_aulario_id, $ym, $day);
- if ($baseDir === null) {
- http_response_code(400);
- die(json_encode(["error" => "Invalid path parameters", "code" => "INVALID_PATH"]));
- }
- $dataPath = "$baseDir/_datos.json";
-
- $menuData = [
- "date" => $date,
- "menus" => []
- ];
-
- if (file_exists($dataPath)) {
- $existing = json_decode(file_get_contents($dataPath), true);
- if (is_array($existing)) {
- $menuData = array_merge($menuData, $existing);
+ $menuData = ["date" => $date, "menus" => []];
+ $existing = db_get_comedor_entry($centro_id, $source_aulario_id, $ym, $day);
+ if (!empty($existing)) { $menuData = array_merge($menuData, $existing); }
+ if (!isset($menuData["menus"][$menuTypeId])) { $menuData["menus"][$menuTypeId] = blank_menu(); }
+ foreach (["primero", "segundo", "postre"] as $plateKey) {
+ if (isset($plates[$plateKey]["name"])) {
+ $menuData["menus"][$menuTypeId]["plates"][$plateKey]["name"] = trim($plates[$plateKey]["name"]);
}
}
-
- if (!isset($menuData["menus"][$menuTypeId])) {
- $menuData["menus"][$menuTypeId] = blank_menu();
- }
-
- // Update plates
- $validPlates = ["primero", "segundo", "postre"];
- foreach ($validPlates as $plateKey) {
- if (isset($plates[$plateKey])) {
- if (isset($plates[$plateKey]["name"])) {
- $menuData["menus"][$menuTypeId]["plates"][$plateKey]["name"] = trim($plates[$plateKey]["name"]);
- }
- // Note: pictogram upload not supported via JSON API - use form-data instead
- }
- }
-
- // Save menu
- if (!is_dir($baseDir)) {
- mkdir($baseDir, 0777, true);
- }
- file_put_contents($dataPath, json_encode($menuData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
-
- echo json_encode([
- "success" => true,
- "date" => $date,
- "menu_type" => $menuTypeId,
- "menu" => $menuData["menus"][$menuTypeId]
- ]);
+ db_set_comedor_entry($centro_id, $source_aulario_id, $ym, $day, $menuData);
+ echo json_encode(["success" => true, "date" => $date, "menu_type" => $menuTypeId, "menu" => $menuData["menus"][$menuTypeId]]);
}
function handle_add_menu_type() {
global $centro_id, $source_aulario_id;
-
- $input = json_decode(file_get_contents("php://input"), true);
- if (!$input) {
- $input = $_POST;
- }
-
- $newId = safe_id_segment(strtolower(trim($input["id"] ?? "")));
+ $input = json_decode(file_get_contents("php://input"), true) ?: $_POST;
+ $newId = safe_id_segment(strtolower(trim($input["id"] ?? "")));
$newLabel = trim($input["label"] ?? "");
$newColor = trim($input["color"] ?? "#0d6efd");
-
- if ($newId === "" || $newLabel === "") {
- http_response_code(400);
- die(json_encode(["error" => "id and label are required", "code" => "MISSING_PARAM"]));
- }
-
- $menuTypesPath = menu_types_path($centro_id, $source_aulario_id);
- if ($menuTypesPath === null) {
- http_response_code(400);
- die(json_encode(["error" => "Invalid path parameters", "code" => "INVALID_PATH"]));
- }
+ if ($newId === "" || $newLabel === "") { http_response_code(400); die(json_encode(["error" => "id and label are required", "code" => "MISSING_PARAM"])); }
$menuTypes = get_menu_types($centro_id, $source_aulario_id);
-
- // Check if already exists
foreach ($menuTypes as $t) {
- if (($t["id"] ?? "") === $newId) {
- http_response_code(400);
- die(json_encode(["error" => "Menu type already exists", "code" => "DUPLICATE"]));
- }
+ if (($t["id"] ?? "") === $newId) { http_response_code(400); die(json_encode(["error" => "Menu type already exists", "code" => "DUPLICATE"])); }
}
-
$menuTypes[] = ["id" => $newId, "label" => $newLabel, "color" => $newColor];
- file_put_contents($menuTypesPath, json_encode($menuTypes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
-
- echo json_encode([
- "success" => true,
- "menu_type" => ["id" => $newId, "label" => $newLabel, "color" => $newColor],
- "message" => "Menu type added successfully"
- ]);
+ db_set_comedor_menu_types($centro_id, $source_aulario_id, $menuTypes);
+ echo json_encode(["success" => true, "menu_type" => ["id" => $newId, "label" => $newLabel, "color" => $newColor], "message" => "Menu type added successfully"]);
}
function handle_delete_menu_type() {
global $centro_id, $source_aulario_id;
-
- $input = json_decode(file_get_contents("php://input"), true);
- if (!$input) {
- $input = $_POST;
- }
-
+ $input = json_decode(file_get_contents("php://input"), true) ?: $_POST;
$deleteId = safe_id_segment(trim($input["id"] ?? ""));
-
- if ($deleteId === "") {
- http_response_code(400);
- die(json_encode(["error" => "id is required", "code" => "MISSING_PARAM"]));
- }
-
- $menuTypesPath = menu_types_path($centro_id, $source_aulario_id);
- if ($menuTypesPath === null) {
- http_response_code(400);
- die(json_encode(["error" => "Invalid path parameters", "code" => "INVALID_PATH"]));
- }
- $menuTypes = get_menu_types($centro_id, $source_aulario_id);
-
- $deleted = false;
- $newMenuTypes = [];
- foreach ($menuTypes as $t) {
- if (($t["id"] ?? "") === $deleteId) {
- $deleted = true;
- } else {
- $newMenuTypes[] = $t;
- }
- }
-
- if (!$deleted) {
- http_response_code(404);
- die(json_encode(["error" => "Menu type not found", "code" => "NOT_FOUND"]));
- }
-
- file_put_contents($menuTypesPath, json_encode($newMenuTypes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
-
- echo json_encode([
- "success" => true,
- "message" => "Menu type deleted successfully"
- ]);
+ if ($deleteId === "") { http_response_code(400); die(json_encode(["error" => "id is required", "code" => "MISSING_PARAM"])); }
+ $menuTypes = get_menu_types($centro_id, $source_aulario_id);
+ $newMenuTypes = array_values(array_filter($menuTypes, fn($t) => ($t["id"] ?? "") !== $deleteId));
+ if (count($newMenuTypes) === count($menuTypes)) { http_response_code(404); die(json_encode(["error" => "Menu type not found", "code" => "NOT_FOUND"])); }
+ db_set_comedor_menu_types($centro_id, $source_aulario_id, $newMenuTypes);
+ echo json_encode(["success" => true, "message" => "Menu type deleted successfully"]);
}
function handle_rename_menu_type() {
global $centro_id, $source_aulario_id;
-
- $input = json_decode(file_get_contents("php://input"), true);
- if (!$input) {
- $input = $_POST;
- }
-
+ $input = json_decode(file_get_contents("php://input"), true) ?: $_POST;
$renameId = safe_id_segment(trim($input["id"] ?? ""));
$newLabel = trim($input["label"] ?? "");
$newColor = trim($input["color"] ?? "");
-
- if ($renameId === "" || $newLabel === "") {
- http_response_code(400);
- die(json_encode(["error" => "id and label are required", "code" => "MISSING_PARAM"]));
- }
-
- $menuTypesPath = menu_types_path($centro_id, $source_aulario_id);
- if ($menuTypesPath === null) {
- http_response_code(400);
- die(json_encode(["error" => "Invalid path parameters", "code" => "INVALID_PATH"]));
- }
+ if ($renameId === "" || $newLabel === "") { http_response_code(400); die(json_encode(["error" => "id and label are required", "code" => "MISSING_PARAM"])); }
$menuTypes = get_menu_types($centro_id, $source_aulario_id);
-
$found = false;
foreach ($menuTypes as &$t) {
if (($t["id"] ?? "") === $renameId) {
$t["label"] = $newLabel;
- if ($newColor !== "") {
- $t["color"] = $newColor;
- }
+ if ($newColor !== "") { $t["color"] = $newColor; }
$found = true;
break;
}
}
unset($t);
-
- if (!$found) {
- http_response_code(404);
- die(json_encode(["error" => "Menu type not found", "code" => "NOT_FOUND"]));
- }
-
- file_put_contents($menuTypesPath, json_encode($menuTypes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
-
- echo json_encode([
- "success" => true,
- "menu_type" => ["id" => $renameId, "label" => $newLabel, "color" => $newColor],
- "message" => "Menu type renamed successfully"
- ]);
+ if (!$found) { http_response_code(404); die(json_encode(["error" => "Menu type not found", "code" => "NOT_FOUND"])); }
+ db_set_comedor_menu_types($centro_id, $source_aulario_id, $menuTypes);
+ echo json_encode(["success" => true, "message" => "Menu type renamed successfully"]);
}
diff --git a/public_html/aulatek/aulario.php b/public_html/aulatek/aulario.php
index df80422..9259f3f 100644
--- a/public_html/aulatek/aulario.php
+++ b/public_html/aulatek/aulario.php
@@ -2,11 +2,11 @@
require_once "_incl/auth_redir.php";
require_once "_incl/pre-body.php";
require_once "../_incl/tools.security.php";
+require_once "../_incl/db.php";
$aulario_id = safe_id_segment($_GET["id"] ?? "");
-$centro_id = safe_centro_id($_SESSION["auth_data"]["entreaulas"]["centro"] ?? "");
-$aulario_path = safe_aulario_config_path($centro_id, $aulario_id);
-$aulario = ($aulario_path && file_exists($aulario_path)) ? json_decode(file_get_contents($aulario_path), true) : null;
+$centro_id = safe_centro_id($_SESSION["auth_data"]["entreaulas"]["centro"] ?? "");
+$aulario = db_get_aulario($centro_id, $aulario_id);
if (!$aulario || !is_array($aulario)) {
?>
diff --git a/public_html/aulatek/comedor.php b/public_html/aulatek/comedor.php
index 3b47bdd..32e7d0d 100644
--- a/public_html/aulatek/comedor.php
+++ b/public_html/aulatek/comedor.php
@@ -1,6 +1,7 @@
"basal", "label" => "Menú basal", "color" => "#0d6efd"],
+ ["id" => "basal", "label" => "Menú basal", "color" => "#0d6efd"],
["id" => "vegetariano", "label" => "Menú vegetariano", "color" => "#198754"],
- ["id" => "alergias", "label" => "Menú alergias", "color" => "#dc3545"],
+ ["id" => "alergias", "label" => "Menú alergias", "color" => "#dc3545"],
];
-if (!file_exists($menuTypesPath)) {
- if (!is_dir(dirname($menuTypesPath))) {
- mkdir(dirname($menuTypesPath), 0777, true);
- }
- file_put_contents($menuTypesPath, json_encode($defaultMenuTypes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
-}
-$menuTypes = json_decode(@file_get_contents($menuTypesPath), true);
+$menuTypes = db_get_comedor_menu_types($centro_id, $source_aulario_id);
if (!is_array($menuTypes) || count($menuTypes) === 0) {
$menuTypes = $defaultMenuTypes;
+ db_set_comedor_menu_types($centro_id, $source_aulario_id, $menuTypes);
}
$menuTypeIds = [];
@@ -71,10 +65,9 @@ if (!in_array($menuTypeId, $menuTypeIds, true)) {
$menuTypeId = $menuTypeIds[0] ?? "basal";
}
-$ym = $dateObj->format("Y-m");
+$ym = $dateObj->format("Y-m");
$day = $dateObj->format("d");
-$baseDir = "/DATA/entreaulas/Centros/$centro_id/Aularios/$source_aulario_id/Comedor/$ym/$day";
-$dataPath = "$baseDir/_datos.json";
+
function blank_menu()
{
@@ -91,11 +84,9 @@ $menuData = [
"date" => $date,
"menus" => []
];
-if (file_exists($dataPath)) {
- $existing = json_decode(file_get_contents($dataPath), true);
- if (is_array($existing)) {
- $menuData = array_merge($menuData, $existing);
- }
+$existing = db_get_comedor_entry($centro_id, $source_aulario_id, $ym, $day);
+if (is_array($existing) && !empty($existing)) {
+ $menuData = array_merge($menuData, $existing);
}
if (!isset($menuData["menus"][$menuTypeId])) {
$menuData["menus"][$menuTypeId] = blank_menu();
@@ -251,14 +242,11 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $canEdit) {
if ($newId !== "" && $newLabel !== "") {
$exists = false;
foreach ($menuTypes as $t) {
- if (($t["id"] ?? "") === $newId) {
- $exists = true;
- break;
- }
+ if (($t["id"] ?? "") === $newId) { $exists = true; break; }
}
if (!$exists) {
$menuTypes[] = ["id" => $newId, "label" => $newLabel, "color" => $newColor];
- file_put_contents($menuTypesPath, json_encode($menuTypes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ db_set_comedor_menu_types($centro_id, $source_aulario_id, $menuTypes);
header("Location: /entreaulas/comedor.php?aulario=" . urlencode($aulario_id) . "&date=" . urlencode($date) . "&menu=" . urlencode($newId));
exit;
}
@@ -268,19 +256,10 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $canEdit) {
if ($action === "delete_type") {
$deleteId = safe_id_segment(trim($_POST["delete_type_id"] ?? ""));
if ($deleteId !== "") {
- $deleted = false;
- $newMenuTypes = [];
- foreach ($menuTypes as $t) {
- if (($t["id"] ?? "") === $deleteId) {
- $deleted = true;
- } else {
- $newMenuTypes[] = $t;
- }
- }
- if ($deleted) {
+ $newMenuTypes = array_values(array_filter($menuTypes, fn($t) => ($t["id"] ?? "") !== $deleteId));
+ if (count($newMenuTypes) !== count($menuTypes)) {
$menuTypes = $newMenuTypes;
- file_put_contents($menuTypesPath, json_encode($menuTypes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
- // Redirect to the first available menu type or default
+ db_set_comedor_menu_types($centro_id, $source_aulario_id, $menuTypes);
$redirectMenuId = !empty($menuTypes) ? $menuTypes[0]["id"] : "basal";
header("Location: /entreaulas/comedor.php?aulario=" . urlencode($aulario_id) . "&date=" . urlencode($date) . "&menu=" . urlencode($redirectMenuId));
exit;
@@ -296,15 +275,12 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $canEdit) {
foreach ($menuTypes as &$t) {
if (($t["id"] ?? "") === $renameId) {
$t["label"] = $newLabel;
- if ($newColor !== "") {
- $t["color"] = $newColor;
- }
+ if ($newColor !== "") { $t["color"] = $newColor; }
break;
}
}
- // Clean up the reference to avoid accidental usage after the loop
unset($t);
- file_put_contents($menuTypesPath, json_encode($menuTypes, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ db_set_comedor_menu_types($centro_id, $source_aulario_id, $menuTypes);
header("Location: /entreaulas/comedor.php?aulario=" . urlencode($aulario_id) . "&date=" . urlencode($date) . "&menu=" . urlencode($renameId));
exit;
}
@@ -316,23 +292,19 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $canEdit) {
$menuData["menus"][$menuTypeId] = blank_menu();
}
+ // Pictogram images still stored on filesystem in Comedor dir
+ $baseDir = "/DATA/entreaulas/Centros/$centro_id/Aularios/$source_aulario_id/Comedor/$ym/$day";
$plates = ["primero", "segundo", "postre"];
foreach ($plates as $plate) {
$name = trim($_POST["name_" . $plate] ?? "");
$menuData["menus"][$menuTypeId]["plates"][$plate]["name"] = $name;
-
$pictUpload = handle_image_upload("pictogram_file_" . $plate, $menuTypeId . "_" . $plate . "_pict", $baseDir, $uploadErrors);
-
if ($pictUpload !== null) {
$menuData["menus"][$menuTypeId]["plates"][$plate]["pictogram"] = $pictUpload;
}
-
}
- if (!is_dir($baseDir)) {
- mkdir($baseDir, 0777, true);
- }
- file_put_contents($dataPath, json_encode($menuData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ db_set_comedor_entry($centro_id, $source_aulario_id, $ym, $day, $menuData);
$saveNotice = "Menú guardado correctamente.";
}
}
@@ -359,11 +331,10 @@ foreach ($userAulas as $aulaId) {
if ($aulaIdSafe === "") {
continue;
}
- $aulaPath = "/DATA/entreaulas/Centros/$centro_id/Aularios/$aulaIdSafe.json";
- $aulaData = file_exists($aulaPath) ? json_decode(file_get_contents($aulaPath), true) : null;
+ $aulaData = db_get_aulario($centro_id, $aulaIdSafe);
$aulaOptions[] = [
- "id" => $aulaIdSafe,
- "name" => $aulaData["name"] ?? $aulaIdSafe
+ "id" => $aulaIdSafe,
+ "name" => $aulaData["name"] ?? $aulaIdSafe,
];
}
require_once "_incl/pre-body.php";
diff --git a/public_html/aulatek/index.php b/public_html/aulatek/index.php
old mode 100755
new mode 100644
index ce0271a..09e12d7
--- a/public_html/aulatek/index.php
+++ b/public_html/aulatek/index.php
@@ -2,30 +2,29 @@
require_once "_incl/auth_redir.php";
require_once "_incl/pre-body.php";
require_once "../_incl/tools.security.php";
+require_once "../_incl/db.php";
?>
-
¡Hola, !
+ ¡Hola, !
Bienvenidx a la plataforma de gestión de aularios conectados. Desde aquí podrás administrar los aularios asociados a tu cuenta.
-
-
-
diff --git a/public_html/aulatek/paneldiario.php b/public_html/aulatek/paneldiario.php
index e11a5f3..056229a 100755
--- a/public_html/aulatek/paneldiario.php
+++ b/public_html/aulatek/paneldiario.php
@@ -1,6 +1,7 @@
format("Y-m-d");
- $menuTypesPath = ($centro_id !== '' && $source_aulario_id !== '') ? "/DATA/entreaulas/Centros/$centro_id/Aularios/$source_aulario_id/Comedor-MenuTypes.json" : "";
$defaultMenuTypes = [
["id" => "basal", "label" => "Menú basal", "color" => "#0d6efd"],
["id" => "vegetariano", "label" => "Menú vegetariano", "color" => "#198754"],
["id" => "alergias", "label" => "Menú alergias", "color" => "#dc3545"],
];
- $menuTypes = ($menuTypesPath !== '' && file_exists($menuTypesPath)) ? json_decode(@file_get_contents($menuTypesPath), true) : null;
+ $menuTypes = ($centro_id !== '' && $source_aulario_id !== '') ? db_get_comedor_menu_types($centro_id, $source_aulario_id) : [];
if (!is_array($menuTypes) || count($menuTypes) === 0) {
$menuTypes = $defaultMenuTypes;
}
@@ -822,17 +820,13 @@ switch ($view_action) {
$menuTypeId = $menuTypeIds[0] ?? "basal";
}
- $ym = $dateObj->format("Y-m");
+ $ym = $dateObj->format("Y-m");
$day = $dateObj->format("d");
- $dataPath = ($centro_id !== '' && $source_aulario_id !== '') ? "/DATA/entreaulas/Centros/$centro_id/Aularios/$source_aulario_id/Comedor/$ym/$day/_datos.json" : "";
- $menuData = [
- "date" => $date,
- "menus" => []
- ];
- if ($dataPath !== '' && file_exists($dataPath)) {
- $existing = json_decode(file_get_contents($dataPath), true);
- if (is_array($existing)) {
+ $menuData = ["date" => $date, "menus" => []];
+ if ($centro_id !== '' && $source_aulario_id !== '') {
+ $existing = db_get_comedor_entry($centro_id, $source_aulario_id, $ym, $day);
+ if (!empty($existing)) {
$menuData = array_merge($menuData, $existing);
}
}
diff --git a/public_html/aulatek/proyectos.php b/public_html/aulatek/proyectos.php
index 7ff347c..d68606b 100644
--- a/public_html/aulatek/proyectos.php
+++ b/public_html/aulatek/proyectos.php
@@ -1,6 +1,7 @@
$aulario_id,
- "project_id" => $project_id,
- "permission" => "request_edit"
+ "project_id" => $project_id,
+ "permission" => "request_edit",
];
$message = "Proyecto compartido correctamente.";
}
- file_put_contents($target_config_path, json_encode($target_config, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ // Save back: build extra JSON excluding standard fields
+ $extra_skip = ['name', 'icon'];
+ $extra = [];
+ foreach ($target_config as $k => $v) {
+ if (!in_array($k, $extra_skip, true)) {
+ $extra[$k] = $v;
+ }
+ }
+ db()->prepare(
+ "UPDATE aularios SET extra = ? WHERE centro_id = ? AND aulario_id = ?"
+ )->execute([json_encode($extra, JSON_UNESCAPED_UNICODE), $centro_id, $target_aulario]);
}
}
}
@@ -1570,10 +1565,9 @@ $view = $current_project ? "project" : "list";
@@ -1636,27 +1630,14 @@ $view = $current_project ? "project" : "list";
$entry,
- "name" => $config["name"] ?? "Aulario Desconocido",
- "linked_projects" => $config["linked_projects"] ?? []
- ];
- }
- }
- }
+ foreach ($aularios_db as $aid => $adata) {
+ $aularios[] = [
+ "id" => $aid,
+ "name" => $adata["name"] ?? "Aulario Desconocido",
+ "linked_projects" => $adata["linked_projects"] ?? [],
+ ];
}
return $aularios;
}
@@ -1918,10 +1899,8 @@ $view = $current_project ? "project" : "list";
diff --git a/public_html/aulatek/supercafe.php b/public_html/aulatek/supercafe.php
index e1d0355..1b53a4a 100644
--- a/public_html/aulatek/supercafe.php
+++ b/public_html/aulatek/supercafe.php
@@ -1,6 +1,7 @@
$aulario_data) {
$aulario_name = $aulario_data['name'] ?? $aulario_id;
- $alumnos_path = "$aularios_path/$aulario_id/Alumnos";
+ $alumnos_path = "$aularios_dir/$aulario_id/Alumnos";
if (!is_dir($alumnos_path)) {
continue;
}
foreach (glob("$alumnos_path/*/", GLOB_ONLYDIR) ?: [] as $alumno_dir) {
$alumno_name = basename($alumno_dir);
- $key = $aulario_id . ':' . $alumno_name;
+ $key = $aulario_id . ':' . $alumno_name;
$personas[$key] = [
'Nombre' => $alumno_name,
'Region' => $aulario_name,
@@ -62,7 +58,6 @@ if ($centro_id === '') {
exit;
}
-define('SC_DATA_DIR', "/DATA/entreaulas/Centros/$centro_id/SuperCafe/Comandas");
define('SC_MAX_DEBTS', 3);
$estados_colores = [
@@ -81,20 +76,15 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $can_edit) {
$action = $_POST['action'] ?? '';
if ($action === 'change_status') {
- $order_id = safe_id($_POST['order_id'] ?? '');
+ $order_id = safe_id($_POST['order_id'] ?? '');
$new_status = $_POST['status'] ?? '';
if ($order_id !== '' && array_key_exists($new_status, $estados_colores)) {
- $order_file = SC_DATA_DIR . '/' . $order_id . '.json';
- if (is_readable($order_file)) {
- $data = json_decode(file_get_contents($order_file), true);
- if (is_array($data)) {
- $data['Estado'] = $new_status;
- file_put_contents(
- $order_file,
- json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE),
- LOCK_EX
- );
- }
+ $row = db_get_supercafe_order($centro_id, $order_id);
+ if ($row) {
+ db_upsert_supercafe_order(
+ $centro_id, $order_id,
+ $row['fecha'], $row['persona'], $row['comanda'], $row['notas'], $new_status
+ );
}
}
header('Location: /entreaulas/supercafe.php');
@@ -104,34 +94,30 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $can_edit) {
if ($action === 'delete') {
$order_id = safe_id($_POST['order_id'] ?? '');
if ($order_id !== '') {
- $order_file = SC_DATA_DIR . '/' . $order_id . '.json';
- if (is_file($order_file)) {
- unlink($order_file);
- }
+ db()->prepare('DELETE FROM supercafe_orders WHERE centro_id = ? AND order_ref = ?')
+ ->execute([$centro_id, $order_id]);
}
header('Location: /entreaulas/supercafe.php');
exit;
}
}
-// Load all orders
+// Load all orders from DB
+$db_orders = db_get_supercafe_orders($centro_id);
$orders = [];
-if (is_dir(SC_DATA_DIR)) {
- $files = glob(SC_DATA_DIR . '/*.json') ?: [];
- foreach ($files as $file) {
- $data = json_decode(file_get_contents($file), true);
- if (!is_array($data)) {
- continue;
- }
- $data['_id'] = basename($file, '.json');
- $orders[] = $data;
- }
+foreach ($db_orders as $row) {
+ $orders[] = [
+ '_id' => $row['order_ref'],
+ 'Fecha' => $row['fecha'],
+ 'Persona'=> $row['persona'],
+ 'Comanda'=> $row['comanda'],
+ 'Notas' => $row['notas'],
+ 'Estado' => $row['estado'],
+ ];
}
// Sort newest first (by Fecha desc)
-usort($orders, function ($a, $b) {
- return strcmp($b['Fecha'] ?? '', $a['Fecha'] ?? '');
-});
+usort($orders, fn($a, $b) => strcmp($b['Fecha'] ?? '', $a['Fecha'] ?? ''));
$orders_active = array_filter($orders, fn($o) => ($o['Estado'] ?? '') !== 'Deuda');
$orders_deuda = array_filter($orders, fn($o) => ($o['Estado'] ?? '') === 'Deuda');
@@ -139,6 +125,7 @@ $orders_deuda = array_filter($orders, fn($o) => ($o['Estado'] ?? '') === 'Deuda
require_once "_incl/pre-body.php";
?>
+
SuperCafe – Cafetería
diff --git a/public_html/aulatek/supercafe_edit.php b/public_html/aulatek/supercafe_edit.php
index ded87ea..2e187b7 100644
--- a/public_html/aulatek/supercafe_edit.php
+++ b/public_html/aulatek/supercafe_edit.php
@@ -1,6 +1,7 @@
$aulario_data) {
$aulario_name = $aulario_data['name'] ?? $aulario_id;
- $alumnos_path = "$aularios_path/$aulario_id/Alumnos";
+ $alumnos_path = "$aularios_dir/$aulario_id/Alumnos";
if (!is_dir($alumnos_path)) {
continue;
}
$alumno_dirs = glob("$alumnos_path/*/", GLOB_ONLYDIR) ?: [];
- usort($alumno_dirs, function ($a, $b) {
- return strcasecmp(basename($a), basename($b));
- });
+ usort($alumno_dirs, fn($a, $b) => strcasecmp(basename($a), basename($b)));
foreach ($alumno_dirs as $alumno_dir) {
$alumno_name = basename($alumno_dir);
- // Key uses ':' as separator; safe_id_segment chars [A-Za-z0-9_-] exclude ':'
- $key = $aulario_id . ':' . $alumno_name;
+ $key = $aulario_id . ':' . $alumno_name;
$personas[$key] = [
'Nombre' => $alumno_name,
'Region' => $aulario_name,
@@ -62,43 +51,14 @@ function sc_load_personas_from_alumnos($centro_id)
return $personas;
}
-function sc_load_menu($sc_base)
-{
- $path = "$sc_base/Menu.json";
- if (!file_exists($path)) {
- return [];
- }
- $data = json_decode(file_get_contents($path), true);
- return is_array($data) ? $data : [];
-}
-
-function sc_count_debts($persona_key)
-{
- if (!is_dir(SC_DATA_DIR)) {
- return 0;
- }
- $count = 0;
- foreach (glob(SC_DATA_DIR . '/*.json') ?: [] as $file) {
- $data = json_decode(file_get_contents($file), true);
- if (is_array($data)
- && ($data['Persona'] ?? '') === $persona_key
- && ($data['Estado'] ?? '') === 'Deuda') {
- $count++;
- }
- }
- return $count;
-}
-
// Determine if creating or editing
$order_id = safe_id($_GET['id'] ?? '');
$is_new = $order_id === '';
if ($is_new) {
- $raw_id = uniqid('sc', true);
- $order_id = preg_replace('/[^a-zA-Z0-9_-]/', '', $raw_id);
+ $order_id = db_next_supercafe_ref($centro_id);
}
-$order_file = SC_DATA_DIR . '/' . $order_id . '.json';
-
+// Load existing order from DB (or defaults)
$order_data = [
'Fecha' => date('Y-m-d'),
'Persona' => '',
@@ -106,15 +66,21 @@ $order_data = [
'Notas' => '',
'Estado' => 'Pedido',
];
-if (!$is_new && is_readable($order_file)) {
- $existing = json_decode(file_get_contents($order_file), true);
- if (is_array($existing)) {
- $order_data = array_merge($order_data, $existing);
+if (!$is_new) {
+ $existing = db_get_supercafe_order($centro_id, $order_id);
+ if ($existing) {
+ $order_data = [
+ 'Fecha' => $existing['fecha'],
+ 'Persona' => $existing['persona'],
+ 'Comanda' => $existing['comanda'],
+ 'Notas' => $existing['notas'],
+ 'Estado' => $existing['estado'],
+ ];
}
}
$personas = sc_load_personas_from_alumnos($centro_id);
-$menu = sc_load_menu($sc_base);
+$menu = db_get_supercafe_menu($centro_id);
// Group personas by aulario for the optgroup picker
$personas_by_aulario = [];
@@ -133,11 +99,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$estado = 'Pedido';
}
- // Validar persona
if ($persona_key === '' || (!empty($personas) && !array_key_exists($persona_key, $personas))) {
$error = '¡Hay que elegir una persona válida!';
} else {
- // Construir comanda desde los campos de categoría visual
$comanda_parts = [];
if (!empty($menu)) {
foreach ($menu as $category => $items) {
@@ -152,48 +116,28 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$comanda_parts[] = $manual;
}
}
- $comanda_str = implode(', ', $comanda_parts);
-
- // Comprobar deudas
- $prev_persona = $order_data['Persona'] ?? '';
+ $comanda_str = implode(', ', $comanda_parts);
+ $prev_persona = $order_data['Persona'];
if ($is_new || $prev_persona !== $persona_key) {
- $debt_count = sc_count_debts($persona_key);
+ $debt_count = db_supercafe_count_debts($centro_id, $persona_key);
if ($debt_count >= SC_MAX_DEBTS) {
$error = 'Esta persona tiene ' . $debt_count . ' comandas en deuda. No se puede realizar el pedido.';
}
}
-
if ($error === '') {
- $new_data = [
- 'Fecha' => date('Y-m-d'),
- 'Persona' => $persona_key,
- 'Comanda' => $comanda_str,
- 'Notas' => $notas,
- 'Estado' => $is_new ? 'Pedido' : $estado,
- ];
-
- if (!is_dir(SC_DATA_DIR)) {
- mkdir(SC_DATA_DIR, 0755, true);
- }
-
- $tmp = SC_DATA_DIR . '/.' . $order_id . '.tmp';
- $bytes = file_put_contents(
- $tmp,
- json_encode($new_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE),
- LOCK_EX
+ db_upsert_supercafe_order(
+ $centro_id, $order_id,
+ date('Y-m-d'), $persona_key, $comanda_str, $notas,
+ $is_new ? 'Pedido' : $estado
);
- if ($bytes === false || !rename($tmp, $order_file)) {
- @unlink($tmp);
- $error = 'Error al guardar la comanda.';
- } else {
- header('Location: /entreaulas/supercafe.php');
- exit;
- }
+ header('Location: /entreaulas/supercafe.php');
+ exit;
}
}
}
require_once "_incl/pre-body.php";
+
?>
Comanda = htmlspecialchars($order_id) ?>
diff --git a/public_html/club/cal.php b/public_html/club/cal.php
index 97ba209..d67ebb4 100755
--- a/public_html/club/cal.php
+++ b/public_html/club/cal.php
@@ -1,10 +1,11 @@
$_POST["title"],
- "note" => $_POST["note"],
- "mapa" => [
- "url" => $_POST["mapa_url"]
- ]
- ];
+ "title" => $_POST["title"],
+ "note" => $_POST["note"],
+ "mapa" => ["url" => $_POST["mapa_url"]],
+ ];
$file = $_POST["date"];
- $val = file_put_contents("/DATA/club/IMG/$file/data.json", json_encode($data, JSON_UNESCAPED_SLASHES));
+ db_set_club_event($file, $data);
header("Location: /club/");
die();
}
diff --git a/public_html/club/index.php b/public_html/club/index.php
index 167fd72..0dc861c 100755
--- a/public_html/club/index.php
+++ b/public_html/club/index.php
@@ -1,5 +1,6 @@
-
diff --git a/public_html/club/upload/upload.php b/public_html/club/upload/upload.php
index 920456a..0811646 100755
--- a/public_html/club/upload/upload.php
+++ b/public_html/club/upload/upload.php
@@ -1,7 +1,8 @@
prepare("DELETE FROM aularios WHERE centro_id = ? AND aulario_id = ?")
+ ->execute([$centro_id, $aulario_id]);
+ // Remove comedor, diario, panel data
+ db()->prepare("DELETE FROM comedor_menu_types WHERE centro_id = ? AND aulario_id = ?")
+ ->execute([$centro_id, $aulario_id]);
+ db()->prepare("DELETE FROM comedor_entries WHERE centro_id = ? AND aulario_id = ?")
+ ->execute([$centro_id, $aulario_id]);
+ db()->prepare("DELETE FROM diario_entries WHERE centro_id = ? AND aulario_id = ?")
+ ->execute([$centro_id, $aulario_id]);
+ db()->prepare("DELETE FROM panel_alumno WHERE centro_id = ? AND aulario_id = ?")
+ ->execute([$centro_id, $aulario_id]);
+ // Remove filesystem directory with student photos
$aulario_dir = "/DATA/entreaulas/Centros/$centro_id/Aularios/$aulario_id";
- function rrmdir($dir) {
+ function rrmdir($dir)
+ {
if (is_dir($dir)) {
- $objects = scandir($dir);
- foreach ($objects as $object) {
- if ($object != "." && $object != "..") {
- $obj_path = $dir . "/" . $object;
- if (is_dir($obj_path)) {
- rrmdir($obj_path);
- } else {
- unlink($obj_path);
- }
+ foreach (scandir($dir) as $object) {
+ if ($object !== "." && $object !== "..") {
+ $p = "$dir/$object";
+ is_dir($p) ? rrmdir($p) : unlink($p);
}
}
rmdir($dir);
}
}
rrmdir($aulario_dir);
- // Remove aulario config file
- unlink($aulario_file);
header("Location: ?action=index");
exit();
break;
case "create":
- $user_data = $_SESSION["auth_data"];
- $centro_id = safe_path_segment(Sf($_POST["centro"] ?? ""));
- if (empty($centro_id) || !is_dir("/DATA/entreaulas/Centros/$centro_id")) {
+ $centro_id = safe_path_segment(Sf($_POST["centro"] ?? ""));
+ $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 centros WHERE centro_id = ?");
+ $stmt->execute([$centro_id]);
+ if (!$stmt->fetch()) {
die("Centro no válido.");
}
- $aulario_id = strtolower(preg_replace("/[^a-zA-Z0-9_-]/", "_", Sf($_POST["name"] ?? "")));
- $aulario_data = [
- "name" => Sf($_POST["name"] ?? ""),
- "icon" => Sf($_POST["icon"] ?? "/static/logo-entreaulas.png")
- ];
- // Make path recursive (mkdir -p equivalent)
- @mkdir("/DATA/entreaulas/Centros/$centro_id/Aularios/", 0777, true);
- @mkdir("/DATA/entreaulas/Centros/$centro_id/Aularios/$aulario_id/Proyectos/", 0777, true);
- file_put_contents("/DATA/entreaulas/Centros/$centro_id/Aularios/$aulario_id.json", json_encode($aulario_data));
- // Update user data
- $_SESSION["auth_data"]["entreaulas"]["aulas"][] = $aulario_id;
+ db()->prepare(
+ "INSERT OR IGNORE INTO aularios (centro_id, aulario_id, name, icon) VALUES (?, ?, ?, ?)"
+ )->execute([
+ $centro_id, $aulario_id,
+ Sf($_POST["name"] ?? ""),
+ Sf($_POST["icon"] ?? "/static/logo-entreaulas.png"),
+ ]);
+ // Create Alumnos directory for photo-based features
+ @mkdir("/DATA/entreaulas/Centros/$centro_id/Aularios/$aulario_id/Proyectos/", 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"] ?? ""));
- $aulario_file = "/DATA/entreaulas/Centros/$centro_id/Aularios/$aulario_id.json";
- if (!file_exists($aulario_file)) {
+ $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.");
}
- $aulario_data = json_decode(file_get_contents($aulario_file), true);
- $aulario_data["name"] = Sf($_POST["name"] ?? "");
- $aulario_data["icon"] = Sf($_POST["icon"] ?? "/static/logo-entreaulas.png");
-
- // Handle shared comedor configuration
- $share_comedor_from = safe_path_segment(Sf($_POST["share_comedor_from"] ?? ""));
-
- if (!empty($share_comedor_from) && $share_comedor_from !== "none") {
- $aulario_data["shared_comedor_from"] = $share_comedor_from;
- } else {
- unset($aulario_data["shared_comedor_from"]);
- }
-
- // Handle linked projects configuration
- $linked_projects = [];
- $linked_aularios = $_POST["linked_aulario"] ?? [];
- $linked_project_ids = $_POST["linked_project_id"] ?? [];
- $linked_permissions = $_POST["linked_permission"] ?? [];
-
- for ($i = 0; $i < count($linked_aularios); $i++) {
- $src_aul = safe_path_segment($linked_aularios[$i] ?? "");
- $proj_id = safe_path_segment($linked_project_ids[$i] ?? "");
- $perm = in_array(($linked_permissions[$i] ?? "read_only"), ["read_only", "request_edit", "full_edit"], true)
- ? ($linked_permissions[$i] ?? "read_only")
- : "read_only";
- if (!empty($src_aul) && !empty($proj_id)) {
- $linked_projects[] = [
- "source_aulario" => $src_aul,
- "project_id" => $proj_id,
- "permission" => $perm
- ];
+ // 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;
}
}
-
- if (count($linked_projects) > 0) {
- $aulario_data["linked_projects"] = $linked_projects;
- } else {
- unset($aulario_data["linked_projects"]);
+ // Update shared_comedor_from if posted
+ if (isset($_POST['shared_comedor_from'])) {
+ $extra['shared_comedor_from'] = Sf($_POST['shared_comedor_from']);
}
- @mkdir("/DATA/entreaulas/Centros/$centro_id/Aularios/$aulario_id/Proyectos/", 0777, true);
- 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");
+ db()->prepare(
+ "UPDATE aularios SET name = ?, icon = ?, extra = ? WHERE centro_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;
}
-require_once "_incl/pre-body.php";
$view_action = $_GET["action"] ?? "index";
switch ($view_action) {
case "new":
- ?>
+ require_once "_incl/pre-body.php";
+ $centro_id = safe_path_segment(Sf($_GET["centro"] ?? ""));
+ $all_centros = db_get_centro_ids();
+?>
-
Nuevo Aulario
-
- Aquí puedes crear un nuevo aulario para el centro que administras.
-
+
Nuevo Aulario
-
$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;
- }
- }
- }
+ $other_aularios = db_get_aularios($centro_id);
?>
-
-Cambios guardados correctamente.
-
-
Editar Aulario:
+
Aulario: = htmlspecialchars($aulario['name'] ?? $aulario_id) ?>
-
-
-
Gestión de Aularios
-
- Desde esta sección puedes administrar los aularios asociados al centro que estás administrando.
-
-
-
-
- Icono
- Nombre
-
- + Nuevo
-
-
-
-
- ';
- echo ' ';
- echo '' . htmlspecialchars($aula_data['name'] ?? 'Sin Nombre') . '' . $centro_id . ' ';
- echo 'Gestionar ';
- echo '';
- }
- ?>
-
-
+
Gestión de Aularios
+
+
+
= htmlspecialchars($c['centro_id']) ?>
+
+
+
+ Icono Nombre
+ + Nuevo
+
+
+
+ $adata): ?>
+
+
+ = htmlspecialchars($adata['name'] ?: $aid) ?>
+ Editar
+
+
+
+
+
-
\ No newline at end of file
diff --git a/public_html/sysadmin/centros.php b/public_html/sysadmin/centros.php
index 5cb06dd..2aa6be5 100644
--- a/public_html/sysadmin/centros.php
+++ b/public_html/sysadmin/centros.php
@@ -1,10 +1,11 @@
prepare("SELECT id FROM centros WHERE centro_id = ?");
+ $existing->execute([$centro_id]);
+ if ($existing->fetch()) {
die("El centro ya existe.");
}
- mkdir($centro_path, 0777, true);
+ // Create DB record
+ db()->prepare("INSERT INTO centros (centro_id) VALUES (?)")->execute([$centro_id]);
+ // Keep filesystem directory for activity photos (Panel/Actividades)
+ $centro_path = "/DATA/entreaulas/Centros/$centro_id";
+ if (!is_dir($centro_path)) {
+ mkdir($centro_path, 0755, true);
+ }
header("Location: ?action=index");
exit();
break;
case "create_activity":
ini_set('memory_limit', '512M');
- ini_set("display_errors", 1);
ini_set('upload_max_filesize', '256M');
ini_set('post_max_size', '256M');
$centro_id = safe_path_segment(Sf($_GET['centro'] ?? ''));
- $centro_path = "/DATA/entreaulas/Centros/$centro_id";
- if (!is_dir($centro_path)) {
+ // Validate centro exists in DB
+ $stmt = db()->prepare("SELECT id FROM centros WHERE centro_id = ?");
+ $stmt->execute([$centro_id]);
+ if (!$stmt->fetch()) {
die("Centro no válido.");
}
- $activity_name = safe_path_segment(Sf($_POST["name"] ?? ''));
+ $activity_name = safe_path_segment(Sf($_POST["name"] ?? ''));
if (empty($activity_name)) {
die("Nombre de la actividad no proporcionado.");
}
@@ -47,22 +57,20 @@ switch ($form_action) {
if ($activity_photo === null || $activity_photo["error"] !== UPLOAD_ERR_OK) {
die("Error al subir la foto.");
}
- $activity_path = "$centro_path/Panel/Actividades/$activity_name";
+ $activity_path = "/DATA/entreaulas/Centros/$centro_id/Panel/Actividades/$activity_name";
if (is_dir($activity_path)) {
die("La actividad ya existe.");
}
- mkdir($activity_path, 0777, true);
- $photo_path = "$activity_path/photo.jpg";
- move_uploaded_file($activity_photo["tmp_name"], $photo_path);
+ mkdir($activity_path, 0755, true);
+ move_uploaded_file($activity_photo["tmp_name"], "$activity_path/photo.jpg");
header("Location: ?action=edit¢ro=" . urlencode($centro_id));
exit();
break;
case "edit_activity":
ini_set('memory_limit', '512M');
- ini_set("display_errors", 1);
ini_set('upload_max_filesize', '256M');
ini_set('post_max_size', '256M');
- $centro_id = safe_path_segment(Sf($_GET['centro'] ?? ''));
+ $centro_id = safe_path_segment(Sf($_GET['centro'] ?? ''));
$activity_name = safe_path_segment(Sf($_GET['activity'] ?? ''));
$activity_path = "/DATA/entreaulas/Centros/$centro_id/Panel/Actividades/$activity_name";
if (!is_dir($activity_path)) {
@@ -70,27 +78,26 @@ switch ($form_action) {
}
$activity_photo = $_FILES["file"] ?? null;
if ($activity_photo !== null && $activity_photo["error"] === UPLOAD_ERR_OK) {
- $photo_path = "$activity_path/photo.jpg";
- move_uploaded_file($activity_photo["tmp_name"], $photo_path);
+ move_uploaded_file($activity_photo["tmp_name"], "$activity_path/photo.jpg");
}
- if (safe_path_segment(Sf($_POST['nombre'] ?? '')) != $activity_name) {
- $new_activity_name = safe_path_segment(Sf($_POST['nombre'] ?? ''));
- $new_activity_path = "/DATA/entreaulas/Centros/$centro_id/Panel/Actividades/$new_activity_name";
- if (is_dir($new_activity_path)) {
+ $new_name = safe_path_segment(Sf($_POST['nombre'] ?? ''));
+ if ($new_name !== $activity_name && $new_name !== '') {
+ $new_path = "/DATA/entreaulas/Centros/$centro_id/Panel/Actividades/$new_name";
+ if (is_dir($new_path)) {
die("Ya existe una actividad con ese nombre.");
}
- rename($activity_path, $new_activity_path);
+ rename($activity_path, $new_path);
}
- header("Location: ?action=edit¢ro=" . urlencode($centro_id));;
+ header("Location: ?action=edit¢ro=" . urlencode($centro_id));
exit();
break;
}
-require_once "_incl/pre-body.php";
+require_once "_incl/pre-body.php";
$view_action = $_GET["action"] ?? "index";
switch ($view_action) {
case "edit_activity":
- $centro_id = safe_path_segment(Sf($_GET['centro'] ?? ''));
+ $centro_id = safe_path_segment(Sf($_GET['centro'] ?? ''));
$activity_name = safe_path_segment(Sf($_GET['activity'] ?? ''));
$activity_path = "/DATA/entreaulas/Centros/$centro_id/Panel/Actividades/$activity_name";
if (!is_dir($activity_path)) {
@@ -99,22 +106,20 @@ switch ($view_action) {
?>
-
Gestión de la Actividad:
-
- Desde esta sección puedes administrar la actividad seleccionada del panel del centro .
-
-