Menú del Comedor

No se ha indicado un aulario válido.

"basal", "label" => "Menú basal", "color" => "#0d6efd"], ["id" => "vegetariano", "label" => "Menú vegetariano", "color" => "#198754"], ["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); if (!is_array($menuTypes) || count($menuTypes) === 0) { $menuTypes = $defaultMenuTypes; } $menuTypeIds = []; foreach ($menuTypes as $t) { if (!empty($t["id"])) { $menuTypeIds[] = $t["id"]; } } $dateParam = $_GET["date"] ?? date("Y-m-d"); $dateObj = DateTime::createFromFormat("Y-m-d", $dateParam) ?: new DateTime(); $date = $dateObj->format("Y-m-d"); $menuTypeId = $_GET["menu"] ?? ($menuTypeIds[0] ?? "basal"); if (!in_array($menuTypeId, $menuTypeIds, true)) { $menuTypeId = $menuTypeIds[0] ?? "basal"; } $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() { return [ "plates" => [ "primero" => ["name" => "", "pictogram" => ""], "segundo" => ["name" => "", "pictogram" => ""], "postre" => ["name" => "", "pictogram" => ""], ] ]; } $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(); } $canEdit = in_array("sysadmin:access", $_SESSION["auth_data"]["permissions"] ?? []) && !$is_shared; $saveNotice = ""; $uploadErrors = []; function safe_filename($name) { $name = basename($name); return preg_replace("/[^a-zA-Z0-9._-]/", "_", $name); } function handle_image_upload($fieldName, $targetBaseName, $baseDir, &$uploadErrors) { if (!isset($_FILES[$fieldName]) || $_FILES[$fieldName]["error"] !== UPLOAD_ERR_OK) { return null; } $ext = strtolower(pathinfo($_FILES[$fieldName]["name"], PATHINFO_EXTENSION)); $allowed = ["jpg", "jpeg", "png", "webp", "gif"]; if (!in_array($ext, $allowed, true)) { $uploadErrors[] = "El archivo " . htmlspecialchars($_FILES[$fieldName]["name"]) . " no es una imagen válida."; return null; } if (!is_dir($baseDir)) { mkdir($baseDir, 0777, true); } $target = "$targetBaseName.$ext"; $targetPath = $baseDir . "/" . safe_filename($target); if (move_uploaded_file($_FILES[$fieldName]["tmp_name"], $targetPath)) { return basename($targetPath); } $uploadErrors[] = "No se pudo guardar " . htmlspecialchars($_FILES[$fieldName]["name"]) . "."; return null; } if ($_SERVER["REQUEST_METHOD"] === "POST" && $canEdit) { $action = $_POST["action"] ?? ""; if ($action === "add_type") { $newId = strtolower(trim($_POST["new_type_id"] ?? "")); $newLabel = trim($_POST["new_type_label"] ?? ""); $newColor = trim($_POST["new_type_color"] ?? "#0d6efd"); if ($newId !== "" && $newLabel !== "") { $exists = false; foreach ($menuTypes as $t) { 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)); header("Location: /entreaulas/comedor.php?aulario=" . urlencode($aulario_id) . "&date=" . urlencode($date) . "&menu=" . urlencode($newId)); exit; } } } if ($action === "save") { $menuTypeId = $_POST["menu_type"] ?? $menuTypeId; if (!isset($menuData["menus"][$menuTypeId])) { $menuData["menus"][$menuTypeId] = blank_menu(); } $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)); $saveNotice = "Menú guardado correctamente."; } } $menuForType = $menuData["menus"][$menuTypeId] ?? blank_menu(); function image_src($value, $centro_id, $source_aulario_id, $date) { if (!$value) { return ""; } if (filter_var($value, FILTER_VALIDATE_URL)) { return $value; } return "/entreaulas/_filefetch.php?type=comedor_image¢ro=" . urlencode($centro_id) . "&aulario=" . urlencode($source_aulario_id) . "&date=" . urlencode($date) . "&file=" . urlencode($value); } $prevDate = (clone $dateObj)->modify("-1 day")->format("Y-m-d"); $nextDate = (clone $dateObj)->modify("+1 day")->format("Y-m-d"); $userAulas = $_SESSION["auth_data"]["entreaulas"]["aulas"] ?? []; $aulaOptions = []; foreach ($userAulas as $aulaId) { $aulaPath = "/DATA/entreaulas/Centros/$centro_id/Aularios/$aulaId.json"; $aulaData = file_exists($aulaPath) ? json_decode(file_get_contents($aulaPath), true) : null; $aulaOptions[] = [ "id" => $aulaId, "name" => $aulaData["name"] ?? $aulaId ]; } ?>
ℹ️ Datos compartidos: Este aulario está mostrando los menús del aulario origen. Para editar, debes acceder al aulario origen o desactivar el compartir en la configuración.
0): ?>
⟵ Día anterior Día siguiente ⟶

Tipos de menú

" class="btn btn-lg" style="background: ; color: white; border: 3px solid ;">
Editar menú
$plateLabel): $plate = $menuForType["plates"][$plateKey] ?? ["name" => "", "pictogram" => ""]; ?>

" placeholder="Ej. Lentejas">
Administrar tipos de menú