editar.php Formulario de edición ISAD(G) 1 líneas
1
<?php
// ============================================================
// SIDE - ARC 1.0
// Archivo: editar.php
// ============================================================

require_once 'conexion.php';
require_once 'helpers.php';
requerir_admin();

// --- Validar ID ---
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    header('Location: /apps/side-arc/cuadro_clasificacion.php');
    exit;
}

$id = (int) $_GET['id'];

// --- Cargar registro actual ---
$stmt = mysqli_prepare($conexion,
    "SELECT * FROM descripcion_isadg WHERE id = ? LIMIT 1");
mysqli_stmt_bind_param($stmt, 'i', $id);
mysqli_stmt_execute($stmt);
$res      = mysqli_stmt_get_result($stmt);
$registro = mysqli_fetch_assoc($res);
mysqli_free_result($res);
mysqli_stmt_close($stmt);

if (!$registro) {
    header('Location: /apps/side-arc/cuadro_clasificacion.php');
    exit;
}

// --- Obtener nivel del padre ---
$nivel_padre = null;
$padre       = null;

if ($registro['parent_id'] !== null) {
    $stmt2 = mysqli_prepare($conexion,
        "SELECT id, titulo, nivel_descripcion
         FROM descripcion_isadg WHERE id = ? LIMIT 1");
    mysqli_stmt_bind_param($stmt2, 'i', $registro['parent_id']);
    mysqli_stmt_execute($stmt2);
    $res2  = mysqli_stmt_get_result($stmt2);
    $padre = mysqli_fetch_assoc($res2);
    mysqli_free_result($res2);
    mysqli_stmt_close($stmt2);

    if ($padre) {
        $nivel_padre = $padre['nivel_descripcion'];
    }
}

// --- Calcular niveles permitidos ---
$niveles_permitidos = niveles_permitidos_bajo($nivel_padre);

// Si el nivel actual no está en la lista, añadirlo
if (!in_array($registro['nivel_descripcion'], $niveles_permitidos, true)) {
    array_unshift($niveles_permitidos, $registro['nivel_descripcion']);
}

// --- Recuperar errores de sesión ---
$mensaje_error = '';
if (isset($_SESSION['form_error'])) {
    $mensaje_error = $_SESSION['form_error'];
    unset($_SESSION['form_error']);
}

$d = isset($_SESSION['form_data']) ? $_SESSION['form_data'] : $registro;
unset($_SESSION['form_data']);

// Token CSRF
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

$titulo_pagina = 'Editar: ' . h($registro['titulo']);
require_once 'header.php';
?>

<div class="form-pagina__encabezado">
    <div style="display:flex; justify-content:space-between; align-items:center;">
        <h1 class="form-pagina__titulo">Editar Registro Archivístico</h1>
        <div style="display:flex; gap:0.5rem; margin-left:1rem; white-space:nowrap; align-items:center;">
            
            <a href="/apps/side-arc/ficha.php?id=<?= $id ?>" class="btn btn--cancelar"
               style="padding:0.55rem 1.25rem; font-size:0.92rem;">
                Cancelar
            </a>
            <button type="submit" form="form-editar" class="btn btn--primario"
                    style="padding:0.55rem 1.25rem; font-size:0.92rem;">
                &#10003; Guardar Cambios
            </button>
            <a href="/apps/side-arc/eliminar.php?id=<?= $id ?>"
               class="btn btn--peligro"
               style="padding:0.55rem 1.25rem; font-size:0.92rem;"
               onclick="return confirm('¿Confirma la eliminación de este registro?')">
                Eliminar
            </a>
        </div>
    </div>
    <p class="form-pagina__contexto" style="margin-top:0.8rem;">
        <span class="badge-nivel"><?= h($registro['nivel_descripcion']) ?></span>
        <strong><?= h($registro['titulo']) ?></strong>
        <?php if ($padre): ?>
            &mdash;
            <span class="badge-nivel"><?= htmlspecialchars($nivel_padre) ?></span>
            <a href="/apps/side-arc/ficha.php?id=<?= $padre['id'] ?>"><?= h($padre['titulo']) ?></a>
        <?php endif; ?>
    </p>
</div>
    <?php if (!empty($mensaje_error)): ?>
        <div class="alerta alerta--error"><?= h($mensaje_error) ?></div>
    <?php endif; ?>

<form id="form-editar" action="/apps/side-arc/procesar_edicion.php"
      method="POST"
      class="form-isadg"
      novalidate>

        <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
        <input type="hidden" name="id" value="<?= $id ?>">

            <!-- ==================================================
             SECCIÓN 1: IDENTIFICACIÓN
             ================================================== -->

       <fieldset class="form-seccion">
    <legend class="form-seccion__titulo">Área de Identificación</legend>

    <!-- Fila 1: Nivel / Código -->
    <div class="form-grid form-grid--2" style="margin-bottom:1rem;">
        <div class="form-grupo">
            <label for="nivel_descripcion" class="form-label form-label--req">Nivel de descripción</label>
            <select id="nivel_descripcion" name="nivel_descripcion"
                    class="form-input form-select" required>
                <?php foreach ($niveles_permitidos as $nivel): ?>
                    <option value="<?= h($nivel) ?>"
                        <?= ($d['nivel_descripcion'] === $nivel) ? 'selected' : '' ?>>
                        <?= h($nivel) ?>
                    </option>
                <?php endforeach; ?>
            </select>
        </div>
        <div class="form-grupo">
            <label for="codigo_referencia" class="form-label form-label--req">Código de referencia</label>
            <input type="text" id="codigo_referencia" name="codigo_referencia"
                   class="form-input"
                   value="<?= h($d['codigo_referencia'] ?? '') ?>"
                   maxlength="100" required>
        </div>
    </div>

    <!-- Fila 2: Título (full) -->
    <div class="form-grid form-grid--1" style="margin-bottom:1rem;">
        <div class="form-grupo">
            <label for="titulo" class="form-label form-label--req">Título</label>
            <input type="text" id="titulo" name="titulo"
                   class="form-input"
                   value="<?= h($d['titulo'] ?? '') ?>"
                   maxlength="255" required>
        </div>
    </div>

    <!-- Fila 3: Fecha(s) / Año inicial / Año final -->
    <div class="form-grid form-grid--2" style="margin-bottom:1rem;">
        <div class="form-grupo">
            <label for="fechas" class="form-label">Fecha(s)</label>
            <input type="text" id="fechas" name="fechas"
                   class="form-input"
                   value="<?= h($d['fechas'] ?? '') ?>"
                   maxlength="255" placeholder="Ej: 1990-2005 / ca. 1980">
        </div>
        <div class="form-grupo">
            <label for="fecha_inicial_filtro" class="form-label">Año inicial</label>
            <input type="number" id="fecha_inicial_filtro" name="fecha_inicial_filtro"
                   class="form-input"
                   value="<?= h($d['fecha_inicial_filtro'] ?? '') ?>"
                   min="1000" max="2999" placeholder="Ej: 1990">
        </div>
        <div class="form-grupo">
            <label for="fecha_final_filtro" class="form-label">Año final</label>
            <input type="number" id="fecha_final_filtro" name="fecha_final_filtro"
                   class="form-input"
                   value="<?= h($d['fecha_final_filtro'] ?? '') ?>"
                   min="1000" max="2999" placeholder="Ej: 2005">
        </div>
    </div>

    <!-- Fila 4: Volumen y soporte (full) -->
    <div class="form-grid form-grid--1">
        <div class="form-grupo">
            <label for="volumen_soporte" class="form-label">Volumen y soporte</label>
            <textarea id="volumen_soporte" name="volumen_soporte"
                      class="form-input form-textarea"
                      rows="2"><?= h($d['volumen_soporte'] ?? '') ?></textarea>
        </div>
    </div>

</fieldset>

            <!-- ==================================================
             SECCIÓN 2: CONTEXTO
             ================================================== -->
        <fieldset class="form-seccion">
            <legend class="form-seccion__titulo">
                
                Área de Contexto
            </legend>
            <div class="form-grid form-grid--1">

                <div class="form-grupo">
                    <label for="nombre_productor" class="form-label">Nombre del productor</label>
                    <input type="text" id="nombre_productor" name="nombre_productor"
                           class="form-input"
                           value="<?= h($d['nombre_productor'] ?? '') ?>"
                           maxlength="255">
                </div>

                <div class="form-grupo form-grupo--full">
                    <label for="historia_institucional" class="form-label">
                        Historia institucional / Reseña biográfica
                    </label>
                    <textarea id="historia_institucional" name="historia_institucional"
                              class="form-input form-textarea"
                              rows="4"><?= h($d['historia_institucional'] ?? '') ?></textarea>
                </div>

            </div>
        </fieldset>

            <!-- ==================================================
             SECCIÓN 3: CONTENIDO Y ESTRUCTURA
             ================================================== -->

    <fieldset class="form-seccion">
        <legend class="form-seccion__titulo">Área de Contenido y Estructura</legend>

            <div class="form-grid form-grid--1" style="margin-bottom:1rem;">
                <div class="form-grupo">
                    <label for="alcance_contenido" class="form-label">Alcance y contenido</label>
                        <textarea id="alcance_contenido" name="alcance_contenido"
                            class="form-input form-textarea"
                            rows="5"><?= h($d['alcance_contenido'] ?? '') ?></textarea>
                </div>
            </div>

        <div class="form-grid form-grid--2">
            <div class="form-grupo">
                    <label for="valoracion_eliminacion" class="form-label">
                    Valoración, selección y eliminación
                    </label>
                        <textarea id="valoracion_eliminacion" name="valoracion_eliminacion"
                            class="form-input form-textarea"
                            rows="3"><?= h($d['valoracion_eliminacion'] ?? '') ?></textarea>
            </div>
            <div class="form-grupo">
                <label for="organizacion" class="form-label">Organización</label>
                    <textarea id="organizacion" name="organizacion"
                      class="form-input form-textarea"
                      rows="3"><?= h($d['organizacion'] ?? '') ?></textarea>
            </div>
        </div>

        </fieldset>

            <!-- ==================================================
             SECCIÓN 4: CONDICIONES DE ACCESO
             ================================================== -->

        <fieldset class="form-seccion">
            <legend class="form-seccion__titulo">
                Área de Condiciones de Acceso y Utilización
            </legend>
            <div class="form-grid form-grid--2">

                <div class="form-grupo">
                    <label for="condiciones_acceso" class="form-label">Condiciones de acceso</label>
                    <textarea id="condiciones_acceso" name="condiciones_acceso"
                              class="form-input form-textarea"
                              rows="3"><?= h($d['condiciones_acceso'] ?? '') ?></textarea>
                </div>

                <div class="form-grupo">
                    <label for="condiciones_reproduccion" class="form-label">
                        Condiciones de reproducción
                    </label>
                    <textarea id="condiciones_reproduccion" name="condiciones_reproduccion"
                              class="form-input form-textarea"
                              rows="3"><?= h($d['condiciones_reproduccion'] ?? '') ?></textarea>
                </div>

                                <div class="form-grupo">
                    <label for="caracteristicas_fisicas" class="form-label">
                        Características físicas y requisitos técnicos
                    </label>
                    <textarea id="caracteristicas_fisicas" name="caracteristicas_fisicas"
                              class="form-input form-textarea"
                              rows="3"><?= h($d['caracteristicas_fisicas'] ?? '') ?></textarea>
                </div>

                <div class="form-grupo">
                    <label for="lengua_escritura" class="form-label">Lengua / escritura(s)</label>
                    <input type="text" id="lengua_escritura" name="lengua_escritura"
                           class="form-input"
                           value="<?= h($d['lengua_escritura'] ?? '') ?>"
                           maxlength="255">
                </div>

            </div>
        </fieldset>

        <!-- ==================================================
             SECCIÓN 5: DOCUMENTACIÓN ASOCIADA
             ================================================== -->

        <fieldset class="form-seccion">
            <legend class="form-seccion__titulo">
               Área de Documentación Asociada
            </legend>
            <div class="form-grid form-grid--1">
                <div class="form-grupo">
                    <label for="unidades_relacionadas" class="form-label">
                        Unidades de descripción relacionadas
                    </label>
                    <textarea id="unidades_relacionadas" name="unidades_relacionadas"
                              class="form-input form-textarea"
                              rows="3"><?= h($d['unidades_relacionadas'] ?? '') ?></textarea>
                </div>
            </div>
        </fieldset>

            <!-- ==================================================
             SECCIÓN 6: NOTAS
             ================================================== -->

        <fieldset class="form-seccion">
            <legend class="form-seccion__titulo">
                Área de Notas
            </legend>
            <div class="form-grid form-grid--1">
                <div class="form-grupo">
                    <label for="notas" class="form-label">Notas</label>
                    <textarea id="notas" name="notas"
                              class="form-input form-textarea"
                              rows="3"><?= h($d['notas'] ?? '') ?></textarea>
                </div>
            </div>
        </fieldset>

            <!-- ==================================================
             SECCIÓN 7: CONTROL DE LA DESCRIPCIÓN
             ================================================== -->

        <fieldset class="form-seccion">
            <legend class="form-seccion__titulo">
                Área de Control de la Descripción
            </legend>
            <div class="form-grid form-grid--2">

                <div class="form-grupo">
                    <label for="fecha_ingreso_registro" class="form-label">
                        Fecha de ingreso del registro
                    </label>
                    <input type="date" id="fecha_ingreso_registro"
                           name="fecha_ingreso_registro"
                           class="form-input"
                           value="<?= h($d['fecha_ingreso_registro'] ?? '') ?>">
                </div>

                <div class="form-grupo">
                    <label for="fechas_descripciones" class="form-label">
                        Fecha(s) de la(s) descripción(es)
                    </label>
                    <input type="text" id="fechas_descripciones"
                           name="fechas_descripciones"
                           class="form-input"
                           value="<?= h($d['fechas_descripciones'] ?? '') ?>"
                           maxlength="255">
                </div>

                <div class="form-grupo">
                    <label for="estado" class="form-label">Estado</label>
                    <select id="estado" name="estado" class="form-input form-select">
                        <option value="">— Seleccione —</option>
                        <?php foreach (['Borrador','Revisión','Actualizado'] as $est): ?>
                            <option value="<?= $est ?>"
                                <?= (($d['estado'] ?? '') === $est) ? 'selected' : '' ?>>
                                <?= $est ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>

                <div class="form-grupo form-grupo--full">
                    <label for="nota_archivero" class="form-label">Nota del archivero</label>
                    <textarea id="nota_archivero" name="nota_archivero"
                              class="form-input form-textarea"
                              rows="3"><?= h($d['nota_archivero'] ?? '') ?></textarea>
                </div>

                <div class="form-grupo">
                    <label for="nombre_descriptor" class="form-label">Nombre del descriptor</label>
                    <input type="text" id="nombre_descriptor" name="nombre_descriptor"
                           class="form-input"
                           value="<?= h($d['nombre_descriptor'] ?? '') ?>"
                           maxlength="255">
                </div>

                <div class="form-grupo">
                    <label for="fecha_creacion_revision" class="form-label">
                        Fecha de creación, revisión y eliminación
                    </label>
                    <input type="text" id="fecha_creacion_revision"
                           name="fecha_creacion_revision"
                           class="form-input"
                           value="<?= h($d['fecha_creacion_revision'] ?? '') ?>"
                           maxlength="255">
                </div>

                <div class="form-grupo">
                    <label for="reglas_normas" class="form-label">Reglas o normas</label>
                    <input type="text" id="reglas_normas" name="reglas_normas"
                           class="form-input"
                           value="<?= h($d['reglas_normas'] ?? '') ?>"
                           maxlength="255">
                </div>

            </div>
        </fieldset>
 
            <!-- ==================================================
             SECCIÓN 8: PUNTOS DE ACCESO
             ================================================== -->
             
        <fieldset class="form-seccion">
            <legend class="form-seccion__titulo">
                Puntos de Acceso e Indexación
            </legend>
            <div class="form-grid form-grid--2">

                <div class="form-grupo">
                    <label for="pa_nombre" class="form-label">
                        PA – Nombre (personal o corporativo)
                    </label>
                    <input type="text" id="pa_nombre" name="pa_nombre"
                           class="form-input"
                           value="<?= h($d['pa_nombre'] ?? '') ?>"
                           maxlength="255">
                </div>

                <div class="form-grupo">
                    <label for="pa_geografico" class="form-label">
                        PA – Nombre geográfico o toponímico
                    </label>
                    <input type="text" id="pa_geografico" name="pa_geografico"
                           class="form-input"
                           value="<?= h($d['pa_geografico'] ?? '') ?>"
                           maxlength="255">
                </div>

                <div class="form-grupo">
                    <label for="pam_materia" class="form-label">
                        PAM – Encabezamiento de materia
                    </label>
                    <input type="text" id="pam_materia" name="pam_materia"
                           class="form-input"
                           value="<?= h($d['pam_materia'] ?? '') ?>"
                           maxlength="255">
                </div>

            </div>
        </fieldset>
    </form>

</div>

<?php
mysqli_close($conexion);
require_once 'footer.php';
?>