| 1 |
<?php
$titulo_pagina = 'Cuadro de Clasificación';
require_once 'conexion.php';
require_once 'helpers.php';
require_once 'header.php';
$niveles_abiertos = [
'Fondo',
'1era División de Fondo',
'2da División de Fondo',
'Subfondo',
];
$sql = "SELECT id, parent_id, titulo, nivel_descripcion, codigo_referencia
FROM descripcion_isadg
ORDER BY nivel_descripcion, codigo_referencia ASC";
$resultado = mysqli_query($conexion, $sql);
if (!$resultado) {
die('<p class="alerta alerta--error">Error al consultar el árbol: '
. h(mysqli_error($conexion)) . '</p>');
}
$arbol_indexado = [];
while ($fila = mysqli_fetch_assoc($resultado)) {
$pid = $fila['parent_id'] ?? null;
$arbol_indexado[$pid][] = $fila;
}
mysqli_free_result($resultado);
function renderizar_nodo(
?int $padre_id,
array &$arbol,
bool $es_admin,
array $niveles_abiertos,
bool $es_raiz = false
): void {
if (!isset($arbol[$padre_id])) {
return;
}
echo '<ul class="atom-rama">';
foreach ($arbol[$padre_id] as $nodo) {
$id = (int) $nodo['id'];
$titulo = h($nodo['titulo']);
$codigo = h($nodo['codigo_referencia']);
$nivel = $nodo['nivel_descripcion'];
$prefijo = prefijo_nivel($nivel);
$tiene_hijos = isset($arbol[$id]);
$abrir = in_array($nivel, $niveles_abiertos, true);
echo '<li class="atom-nodo">';
if ($tiene_hijos) {
$open_attr = $abrir ? ' open' : '';
echo '<details' . $open_attr . '>';
echo '<summary class="atom-fila">';
echo '<span class="atom-toggle"></span>';
echo '<span class="atom-prefijo nivel-' . strtolower($prefijo) . '">[' . $prefijo . ']</span>';
echo '<a href="/apps/side-arc/ficha.php?id=' . $id . '" class="atom-titulo" onclick="event.stopPropagation()">'
. $titulo . '</a>';
echo '<span class="atom-fila-derecha">';
if (!empty($codigo)) {
echo '<span class="atom-codigo">' . $codigo . '</span>';
}
if ($es_admin) {
echo '<a href="/apps/side-arc/ingreso.php?parent_id=' . $id . '" '
. 'class="btn btn--agregar-hijo" '
. 'onclick="event.stopPropagation()" '
. 'title="Agregar registro subordinado">+ Subordinado</a>';
}
echo '</span>';
echo '</summary>';
renderizar_nodo($id, $arbol, $es_admin, $niveles_abiertos);
echo '</details>';
} else {
echo '<div class="atom-fila">';
echo '<span class="atom-toggle sin-hijos"></span>';
echo '<span class="atom-prefijo nivel-' . strtolower($prefijo) . '">[' . $prefijo . ']</span>';
echo '<a href="/apps/side-arc/ficha.php?id=' . $id . '" class="atom-titulo">'
. $titulo . '</a>';
echo '<span class="atom-fila-derecha">';
if (!empty($codigo)) {
echo '<span class="atom-codigo">' . $codigo . '</span>';
}
if ($es_admin && $nivel !== 'Unidad Documental Simple') {
echo '<a href="/apps/side-arc/ingreso.php?parent_id=' . $id . '" '
. 'class="btn btn--agregar-hijo" '
. 'title="Agregar registro subordinado">+ Subordinado</a>';
}
echo '</span>';
echo '</div>';
}
echo '</li>';
}
echo '</ul>';
}
?>
<div class="cuadro-pagina">
<div class="cuadro-header">
<h1 class="cuadro-header__titulo">Cuadro de Clasificación</h1>
<?php if ($es_admin): ?>
<a href="/apps/side-arc/ingreso.php" class="btn-add-fondo">
Ingresar nuevo Fondo
</a>
<?php endif; ?>
</div>
<?php
$check = mysqli_query($conexion, "SELECT COUNT(*) AS total FROM descripcion_isadg");
$total = mysqli_fetch_assoc($check)['total'];
if ($total == 0):
?>
<div class="alerta alerta--info">
El fondo documental está vacío.
<?php if ($es_admin): ?>
<a href="/apps/side-arc/ingreso.php">Cree el primer registro</a>.
<?php else: ?>
Contacte al administrador del sistema.
<?php endif; ?>
</div>
<?php else: ?>
<div class="cuadro-arbol-box" role="tree">
<?php renderizar_nodo(null, $arbol_indexado, $es_admin, $niveles_abiertos, true); ?>
</div>
<?php endif; ?>
</div>
<?php
mysqli_close($conexion);
require_once 'footer.php';
?>
|