Implement selective project sharing between aularios via JSON configuration
Co-authored-by: naielv <109038805+naielv@users.noreply.github.com>
This commit is contained in:
@@ -100,6 +100,36 @@ function list_projects($proyectos_dir, $parent_id = null) {
|
|||||||
return $projects;
|
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
|
// Handle actions
|
||||||
$message = "";
|
$message = "";
|
||||||
$error = "";
|
$error = "";
|
||||||
@@ -361,16 +391,31 @@ $view = $current_project ? "project" : "list";
|
|||||||
|
|
||||||
<!-- Project List -->
|
<!-- Project List -->
|
||||||
<?php
|
<?php
|
||||||
$projects = list_projects($proyectos_dir);
|
// Get local projects and linked projects
|
||||||
|
$local_projects = list_projects($proyectos_dir);
|
||||||
|
$linked_projects = get_linked_projects($aulario, $centro_id);
|
||||||
|
$projects = array_merge($local_projects, $linked_projects);
|
||||||
|
|
||||||
|
// Sort by creation date
|
||||||
|
usort($projects, function($a, $b) {
|
||||||
|
return ($b["created_at"] ?? 0) <=> ($a["created_at"] ?? 0);
|
||||||
|
});
|
||||||
|
|
||||||
if (count($projects) > 0):
|
if (count($projects) > 0):
|
||||||
?>
|
?>
|
||||||
<div id="grid">
|
<div id="grid">
|
||||||
<?php foreach ($projects as $project): ?>
|
<?php foreach ($projects as $project):
|
||||||
|
$is_linked = $project["is_linked"] ?? false;
|
||||||
|
$source_aulario = $project["source_aulario"] ?? "";
|
||||||
|
?>
|
||||||
<div class="card grid-item" style="width: 300px;">
|
<div class="card grid-item" style="width: 300px;">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">
|
<h5 class="card-title">
|
||||||
<img src="/static/arasaac/carpeta.png" height="30" style="vertical-align: middle; background: white; padding: 3px; border-radius: 5px;">
|
<img src="/static/arasaac/carpeta.png" height="30" style="vertical-align: middle; background: white; padding: 3px; border-radius: 5px;">
|
||||||
<?= htmlspecialchars($project["name"]) ?>
|
<?= htmlspecialchars($project["name"]) ?>
|
||||||
|
<?php if ($is_linked): ?>
|
||||||
|
<span class="badge bg-info" style="font-size: 0.7rem;">Compartido</span>
|
||||||
|
<?php endif; ?>
|
||||||
</h5>
|
</h5>
|
||||||
<?php if (!empty($project["description"])): ?>
|
<?php if (!empty($project["description"])): ?>
|
||||||
<p class="card-text"><?= htmlspecialchars($project["description"]) ?></p>
|
<p class="card-text"><?= htmlspecialchars($project["description"]) ?></p>
|
||||||
@@ -384,18 +429,25 @@ $view = $current_project ? "project" : "list";
|
|||||||
</small>
|
</small>
|
||||||
</p>
|
</p>
|
||||||
<div class="d-flex gap-2">
|
<div class="d-flex gap-2">
|
||||||
<a href="/entreaulas/proyectos.php?aulario=<?= urlencode($aulario_id) ?>&project=<?= urlencode($project["id"]) ?>" class="btn btn-primary">
|
<?php if ($is_linked): ?>
|
||||||
<img src="/static/iconexperience/find.png" height="20" style="vertical-align: middle;">
|
<a href="/entreaulas/proyectos.php?aulario=<?= urlencode($aulario_id) ?>&project=<?= urlencode($project["id"]) ?>&source=<?= urlencode($source_aulario) ?>" class="btn btn-primary">
|
||||||
Abrir
|
<img src="/static/iconexperience/find.png" height="20" style="vertical-align: middle;">
|
||||||
</a>
|
Abrir
|
||||||
<form method="post" style="display: inline;" onsubmit="return confirm('¿Estás seguro de que quieres eliminar este proyecto?');">
|
</a>
|
||||||
<input type="hidden" name="action" value="delete_project">
|
<?php else: ?>
|
||||||
<input type="hidden" name="project_id" value="<?= htmlspecialchars($project["id"]) ?>">
|
<a href="/entreaulas/proyectos.php?aulario=<?= urlencode($aulario_id) ?>&project=<?= urlencode($project["id"]) ?>" class="btn btn-primary">
|
||||||
<button type="submit" class="btn btn-danger">
|
<img src="/static/iconexperience/find.png" height="20" style="vertical-align: middle;">
|
||||||
<img src="/static/iconexperience/garbage.png" height="20" style="vertical-align: middle;">
|
Abrir
|
||||||
Eliminar
|
</a>
|
||||||
</button>
|
<form method="post" style="display: inline;" onsubmit="return confirm('¿Estás seguro de que quieres eliminar este proyecto?');">
|
||||||
</form>
|
<input type="hidden" name="action" value="delete_project">
|
||||||
|
<input type="hidden" name="project_id" value="<?= htmlspecialchars($project["id"]) ?>">
|
||||||
|
<button type="submit" class="btn btn-danger">
|
||||||
|
<img src="/static/iconexperience/garbage.png" height="20" style="vertical-align: middle;">
|
||||||
|
Eliminar
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -439,7 +491,19 @@ $view = $current_project ? "project" : "list";
|
|||||||
<?php elseif ($view === "project"): ?>
|
<?php elseif ($view === "project"): ?>
|
||||||
<!-- Project Detail View -->
|
<!-- Project Detail View -->
|
||||||
<?php
|
<?php
|
||||||
$project = load_project($proyectos_dir, $current_project);
|
// Check if this is a linked project from another aulario
|
||||||
|
$source_aulario_for_project = $_GET["source"] ?? "";
|
||||||
|
$is_linked_project = !empty($source_aulario_for_project);
|
||||||
|
|
||||||
|
if ($is_linked_project) {
|
||||||
|
// Load from source aulario
|
||||||
|
$project_source_dir = "/DATA/entreaulas/Centros/$centro_id/Aularios/$source_aulario_for_project/Proyectos";
|
||||||
|
$project = load_project($project_source_dir, $current_project);
|
||||||
|
} else {
|
||||||
|
// Load from local aulario
|
||||||
|
$project = load_project($proyectos_dir, $current_project);
|
||||||
|
}
|
||||||
|
|
||||||
if (!$project):
|
if (!$project):
|
||||||
?>
|
?>
|
||||||
<div class="card pad">
|
<div class="card pad">
|
||||||
@@ -479,6 +543,12 @@ $view = $current_project ? "project" : "list";
|
|||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
<?php if ($is_linked_project): ?>
|
||||||
|
<div class="card pad" style="background: #cfe2ff; color: #084298;">
|
||||||
|
<strong>ℹ️ Proyecto compartido:</strong> Este es un proyecto compartido desde otro aulario. Solo puedes ver su contenido, pero no editarlo ni eliminarlo.
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
<div class="card pad">
|
<div class="card pad">
|
||||||
<div class="d-flex justify-content-between align-items-start">
|
<div class="d-flex justify-content-between align-items-start">
|
||||||
<div>
|
<div>
|
||||||
@@ -486,6 +556,9 @@ $view = $current_project ? "project" : "list";
|
|||||||
<img src="/static/arasaac/carpeta.png" height="40" style="vertical-align: middle; background: white; padding: 5px; border-radius: 10px;">
|
<img src="/static/arasaac/carpeta.png" height="40" style="vertical-align: middle; background: white; padding: 5px; border-radius: 10px;">
|
||||||
<?= htmlspecialchars($project["name"]) ?>
|
<?= htmlspecialchars($project["name"]) ?>
|
||||||
<span class="badge bg-secondary">Nivel <?= $project_level ?></span>
|
<span class="badge bg-secondary">Nivel <?= $project_level ?></span>
|
||||||
|
<?php if ($is_linked_project): ?>
|
||||||
|
<span class="badge bg-info">Compartido</span>
|
||||||
|
<?php endif; ?>
|
||||||
</h1>
|
</h1>
|
||||||
<?php if (!empty($project["description"])): ?>
|
<?php if (!empty($project["description"])): ?>
|
||||||
<p><?= htmlspecialchars($project["description"]) ?></p>
|
<p><?= htmlspecialchars($project["description"]) ?></p>
|
||||||
@@ -504,6 +577,7 @@ $view = $current_project ? "project" : "list";
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
|
<?php if (!$is_linked_project): ?>
|
||||||
<div class="card pad">
|
<div class="card pad">
|
||||||
<div class="d-flex gap-2 flex-wrap">
|
<div class="d-flex gap-2 flex-wrap">
|
||||||
<button type="button" class="btn btn-success btn-lg" data-bs-toggle="modal" data-bs-target="#addItemModal">
|
<button type="button" class="btn btn-success btn-lg" data-bs-toggle="modal" data-bs-target="#addItemModal">
|
||||||
@@ -518,6 +592,7 @@ $view = $current_project ? "project" : "list";
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
<!-- Sub-Projects Section -->
|
<!-- Sub-Projects Section -->
|
||||||
<?php
|
<?php
|
||||||
@@ -610,11 +685,16 @@ $view = $current_project ? "project" : "list";
|
|||||||
Abrir Enlace
|
Abrir Enlace
|
||||||
</a>
|
</a>
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<a href="/entreaulas/_filefetch.php?type=proyecto_file¢ro=<?= urlencode($centro_id) ?>&aulario=<?= urlencode($aulario_id) ?>&project=<?= urlencode($current_project) ?>&file=<?= urlencode($item["filename"]) ?>" target="_blank" class="btn btn-primary btn-lg">
|
<?php
|
||||||
|
// Use source aulario for file fetch if linked project
|
||||||
|
$fetch_aulario = $is_linked_project ? $source_aulario_for_project : $aulario_id;
|
||||||
|
?>
|
||||||
|
<a href="/entreaulas/_filefetch.php?type=proyecto_file¢ro=<?= urlencode($centro_id) ?>&aulario=<?= urlencode($fetch_aulario) ?>&project=<?= urlencode($current_project) ?>&file=<?= urlencode($item["filename"]) ?>" target="_blank" class="btn btn-primary btn-lg">
|
||||||
<img src="/static/iconexperience/find.png" height="25" style="vertical-align: middle;">
|
<img src="/static/iconexperience/find.png" height="25" style="vertical-align: middle;">
|
||||||
Abrir Archivo
|
Abrir Archivo
|
||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
<?php if (!$is_linked_project): ?>
|
||||||
<form method="post" style="display: inline;" onsubmit="return confirm('¿Estás seguro de que quieres eliminar este elemento?');">
|
<form method="post" style="display: inline;" onsubmit="return confirm('¿Estás seguro de que quieres eliminar este elemento?');">
|
||||||
<input type="hidden" name="action" value="delete_item">
|
<input type="hidden" name="action" value="delete_item">
|
||||||
<input type="hidden" name="project_id" value="<?= htmlspecialchars($current_project) ?>">
|
<input type="hidden" name="project_id" value="<?= htmlspecialchars($current_project) ?>">
|
||||||
@@ -623,6 +703,7 @@ $view = $current_project ? "project" : "list";
|
|||||||
<img src="/static/iconexperience/garbage.png" height="20" style="vertical-align: middle;">
|
<img src="/static/iconexperience/garbage.png" height="20" style="vertical-align: middle;">
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -40,6 +40,26 @@ switch ($_GET["form"]) {
|
|||||||
unset($aulario_data["shared_comedor_from"]);
|
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));
|
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");
|
header("Location: ?action=edit&aulario=" . urlencode($aulario_id) . "¢ro=" . urlencode($centro_id) . "&saved=1");
|
||||||
exit();
|
exit();
|
||||||
@@ -104,6 +124,29 @@ switch ($_GET["action"]) {
|
|||||||
$available_aularios[$aul_id] = $aul_data['name'] ?? $aul_id;
|
$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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<?php if (isset($_GET['saved'])): ?>
|
<?php if (isset($_GET['saved'])): ?>
|
||||||
<div class="alert alert-success">Cambios guardados correctamente.</div>
|
<div class="alert alert-success">Cambios guardados correctamente.</div>
|
||||||
@@ -138,6 +181,125 @@ switch ($_GET["action"]) {
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<h3>Proyectos Enlazados</h3>
|
||||||
|
<p class="text-muted">Selecciona proyectos raíz específicos de otros aularios para mostrarlos en este aulario. Los proyectos enlazados se mostrarán como solo lectura.</p>
|
||||||
|
|
||||||
|
<div id="linked-projects-container">
|
||||||
|
<?php
|
||||||
|
$existing_links = $aulario_data['linked_projects'] ?? [];
|
||||||
|
if (count($existing_links) === 0) {
|
||||||
|
// Show one empty row
|
||||||
|
$existing_links = [["source_aulario" => "", "project_id" => ""]];
|
||||||
|
}
|
||||||
|
foreach ($existing_links as $idx => $link):
|
||||||
|
$source_aul = $link['source_aulario'] ?? '';
|
||||||
|
$proj_id = $link['project_id'] ?? '';
|
||||||
|
?>
|
||||||
|
<div class="row mb-2 linked-project-row">
|
||||||
|
<div class="col-md-5">
|
||||||
|
<select name="linked_aulario[]" class="form-select linked-aulario-select" data-row="<?php echo $idx; ?>">
|
||||||
|
<option value="">-- Seleccionar aulario origen --</option>
|
||||||
|
<?php foreach ($available_aularios as $aul_id => $aul_name): ?>
|
||||||
|
<option value="<?php echo htmlspecialchars($aul_id); ?>"
|
||||||
|
<?php echo $source_aul === $aul_id ? 'selected' : ''; ?>>
|
||||||
|
<?php echo htmlspecialchars($aul_name); ?>
|
||||||
|
</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<select name="linked_project_id[]" class="form-select linked-project-select" data-row="<?php echo $idx; ?>">
|
||||||
|
<option value="">-- Seleccionar proyecto --</option>
|
||||||
|
<?php if (!empty($source_aul) && isset($available_projects_by_aulario[$source_aul])): ?>
|
||||||
|
<?php foreach ($available_projects_by_aulario[$source_aul] as $proj): ?>
|
||||||
|
<option value="<?php echo htmlspecialchars($proj['id']); ?>"
|
||||||
|
<?php echo $proj_id === $proj['id'] ? 'selected' : ''; ?>>
|
||||||
|
<?php echo htmlspecialchars($proj['name']); ?>
|
||||||
|
</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2">
|
||||||
|
<button type="button" class="btn btn-danger remove-link-btn" onclick="removeLinkedProject(this)">Eliminar</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="button" class="btn btn-secondary mb-3" onclick="addLinkedProject()">+ Añadir Proyecto Enlazado</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Store available projects data
|
||||||
|
const availableProjects = <?php echo json_encode($available_projects_by_aulario); ?>;
|
||||||
|
let rowCounter = <?php echo count($existing_links); ?>;
|
||||||
|
|
||||||
|
function addLinkedProject() {
|
||||||
|
const container = document.getElementById('linked-projects-container');
|
||||||
|
const newRow = document.createElement('div');
|
||||||
|
newRow.className = 'row mb-2 linked-project-row';
|
||||||
|
newRow.innerHTML = `
|
||||||
|
<div class="col-md-5">
|
||||||
|
<select name="linked_aulario[]" class="form-select linked-aulario-select" data-row="${rowCounter}">
|
||||||
|
<option value="">-- Seleccionar aulario origen --</option>
|
||||||
|
<?php foreach ($available_aularios as $aul_id => $aul_name): ?>
|
||||||
|
<option value="<?php echo htmlspecialchars($aul_id); ?>">
|
||||||
|
<?php echo htmlspecialchars($aul_name); ?>
|
||||||
|
</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<select name="linked_project_id[]" class="form-select linked-project-select" data-row="${rowCounter}">
|
||||||
|
<option value="">-- Seleccionar proyecto --</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2">
|
||||||
|
<button type="button" class="btn btn-danger remove-link-btn" onclick="removeLinkedProject(this)">Eliminar</button>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
container.appendChild(newRow);
|
||||||
|
|
||||||
|
// Attach change event to new aulario select
|
||||||
|
const newAularioSelect = newRow.querySelector('.linked-aulario-select');
|
||||||
|
newAularioSelect.addEventListener('change', updateProjectOptions);
|
||||||
|
|
||||||
|
rowCounter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeLinkedProject(btn) {
|
||||||
|
btn.closest('.linked-project-row').remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateProjectOptions(event) {
|
||||||
|
const aularioSelect = event.target;
|
||||||
|
const rowId = aularioSelect.dataset.row;
|
||||||
|
const projectSelect = document.querySelector(`.linked-project-select[data-row="${rowId}"]`);
|
||||||
|
const selectedAulario = aularioSelect.value;
|
||||||
|
|
||||||
|
// Clear project options
|
||||||
|
projectSelect.innerHTML = '<option value="">-- Seleccionar proyecto --</option>';
|
||||||
|
|
||||||
|
// Add new options
|
||||||
|
if (selectedAulario && availableProjects[selectedAulario]) {
|
||||||
|
availableProjects[selectedAulario].forEach(proj => {
|
||||||
|
const option = document.createElement('option');
|
||||||
|
option.value = proj.id;
|
||||||
|
option.textContent = proj.name;
|
||||||
|
projectSelect.appendChild(option);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attach event listeners to existing selects
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
document.querySelectorAll('.linked-aulario-select').forEach(select => {
|
||||||
|
select.addEventListener('change', updateProjectOptions);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<input type="hidden" name="aulario_id" value="<?php echo htmlspecialchars($aulario_id); ?>">
|
<input type="hidden" name="aulario_id" value="<?php echo htmlspecialchars($aulario_id); ?>">
|
||||||
<input type="hidden" name="centro_id" value="<?php echo htmlspecialchars($centro_id); ?>">
|
<input type="hidden" name="centro_id" value="<?php echo htmlspecialchars($centro_id); ?>">
|
||||||
<button type="submit" class="btn btn-primary">Guardar Cambios</button>
|
<button type="submit" class="btn btn-primary">Guardar Cambios</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user