One Hat Cyber Team
Your IP :
104.23.197.103
Server IP :
104.21.51.23
Server :
Linux 128-201-239-36.cprapid.com 3.10.0-1160.41.1.el7.x86_64 #1 SMP Tue Aug 31 14:52:47 UTC 2021 x86_64
Server Software :
Apache
PHP Version :
7.4.33
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
juscatamarca
/
www
/
campusjxj
/
public
/
admin
/
Edit File:
departments.php
<?php declare(strict_types=1); require_once dirname(__DIR__, 2) . '/config/app.php'; require_once ROOT_PATH . '/helpers/functions.php'; require_once ROOT_PATH . '/helpers/auth.php'; require_once ROOT_PATH . '/helpers/admin_geographic_departments.php'; require_role('admin'); $pageTitle = 'Departamentos'; $navbarTitle = 'Departamentos de Catamarca'; $currentPage = 'departments'; $validStatuses = ['active', 'inactive']; $errors = []; $formData = [ 'id' => '0', 'name' => '', 'code' => '', 'status' => 'active', ]; $flashSuccess = get_flash('success'); $flashError = get_flash('error'); $editId = (int) ($_GET['edit'] ?? 0); if ($editId > 0 && $_SERVER['REQUEST_METHOD'] !== 'POST') { $editingDepartment = get_admin_geographic_department_by_id($editId); if ($editingDepartment === null) { set_flash('error', 'El departamento seleccionado no existe.'); redirect('admin/departments.php'); } $formData = [ 'id' => (string) ($editingDepartment['id'] ?? 0), 'name' => (string) ($editingDepartment['name'] ?? ''), 'code' => (string) ($editingDepartment['code'] ?? ''), 'status' => (string) ($editingDepartment['status'] ?? 'active'), ]; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = (string) ($_POST['action'] ?? 'create'); $departmentId = (int) ($_POST['id'] ?? 0); if ($action === 'delete') { if ($departmentId <= 0 || !admin_geographic_department_exists($departmentId)) { set_flash('error', 'El departamento seleccionado no existe.'); redirect('admin/departments.php'); } try { delete_admin_geographic_department($departmentId); set_flash('success', 'Departamento eliminado correctamente.'); redirect('admin/departments.php'); } catch (Throwable $e) { set_flash('error', 'No se pudo eliminar el departamento.'); redirect('admin/departments.php'); } } if ($action === 'assign_course_department') { $courseId = (int) ($_POST['course_id'] ?? 0); $geoDepartmentRaw = trim((string) ($_POST['geographic_department_id'] ?? '')); $geoDepartmentId = $geoDepartmentRaw === '' ? null : (int) $geoDepartmentRaw; if ($courseId <= 0 || !admin_course_exists_for_assignment($courseId)) { set_flash('error', 'El curso seleccionado no es válido para asignación.'); redirect('admin/departments.php'); } if ($geoDepartmentId !== null && ($geoDepartmentId <= 0 || !admin_geographic_department_exists($geoDepartmentId))) { set_flash('error', 'El departamento geográfico seleccionado no es válido.'); redirect('admin/departments.php'); } try { assign_course_to_geographic_department($courseId, $geoDepartmentId); set_flash('success', 'Asignación territorial del curso actualizada correctamente.'); redirect('admin/departments.php'); } catch (Throwable $e) { set_flash('error', 'No se pudo actualizar la asignación territorial del curso.'); redirect('admin/departments.php'); } } $formData = [ 'id' => (string) $departmentId, 'name' => trim((string) ($_POST['name'] ?? '')), 'code' => strtoupper(trim((string) ($_POST['code'] ?? ''))), 'status' => trim((string) ($_POST['status'] ?? 'active')), ]; if ($formData['name'] === '') { $errors[] = 'El nombre del departamento es obligatorio.'; } if (strlen($formData['name']) > 120) { $errors[] = 'El nombre del departamento no puede superar 120 caracteres.'; } if ($formData['code'] !== '' && !preg_match('/^[A-Z0-9]{2,30}$/', $formData['code'])) { $errors[] = 'El código debe tener entre 2 y 30 caracteres alfanuméricos en mayúscula.'; } if (!in_array($formData['status'], $validStatuses, true)) { $errors[] = 'El estado seleccionado no es válido.'; } if (empty($errors) && geographic_department_name_exists($formData['name'], $departmentId)) { $errors[] = 'Ya existe un departamento con ese nombre.'; } if (empty($errors) && geographic_department_code_exists($formData['code'], $departmentId)) { $errors[] = 'Ya existe un departamento con ese código.'; } if (empty($errors)) { $payload = [ 'name' => $formData['name'], 'code' => $formData['code'], 'status' => $formData['status'], ]; try { if ($action === 'update' && $departmentId > 0) { update_admin_geographic_department($departmentId, $payload); set_flash('success', 'Departamento actualizado correctamente.'); redirect('admin/departments.php'); } create_admin_geographic_department($payload); set_flash('success', 'Departamento creado correctamente.'); redirect('admin/departments.php'); } catch (Throwable $e) { $errors[] = 'No se pudo guardar el departamento en este momento.'; } } } $search = trim((string) ($_GET['q'] ?? '')); $statusFilter = trim((string) ($_GET['status'] ?? 'all')); $statusParam = in_array($statusFilter, $validStatuses, true) ? $statusFilter : null; $departmentRows = []; $listError = null; $courseAssignmentRows = []; try { $departmentRows = get_admin_geographic_departments($search !== '' ? $search : null, $statusParam); $courseAssignmentRows = get_courses_for_geographic_assignment(); } catch (Throwable $e) { $listError = 'No se pudo cargar la información de departamentos.'; } $isEditMode = (int) $formData['id'] > 0; include ROOT_PATH . '/includes/layout/header.php'; ?> <?php include ROOT_PATH . '/includes/layout/sidebar_admin.php'; ?> <div class="main-panel"> <?php include ROOT_PATH . '/includes/layout/navbar.php'; ?> <main class="content-area"> <section class="hero-panel mb-4"> <div> <p class="hero-tag mb-2">Administración Territorial</p> <h2 class="h3 fw-bold mb-2">Departamentos de Catamarca</h2> <p class="mb-0 text-muted">Gestiona los departamentos geográficos para asignar cursos y clases por territorio.</p> </div> </section> <?php if ($flashSuccess): ?> <div class="alert alert-success" role="alert"><?= e($flashSuccess) ?></div> <?php endif; ?> <?php if ($flashError): ?> <div class="alert alert-danger" role="alert"><?= e($flashError) ?></div> <?php endif; ?> <?php if (!empty($errors)): ?> <div class="alert alert-danger" role="alert"> <strong>Revisa el formulario:</strong> <ul class="mb-0 mt-2"> <?php foreach ($errors as $error): ?> <li><?= e($error) ?></li> <?php endforeach; ?> </ul> </div> <?php endif; ?> <div class="card card-campus mb-4"> <div class="card-header-campus"> <h3 class="h6 mb-0"><?= $isEditMode ? 'Editar departamento' : 'Nuevo departamento' ?></h3> <?php if ($isEditMode): ?> <a href="<?= e(base_url('admin/departments.php')) ?>" class="btn btn-sm btn-outline-success">Cancelar edición</a> <?php endif; ?> </div> <div class="card-body"> <form class="row g-3" method="post" novalidate> <input type="hidden" name="action" value="<?= $isEditMode ? 'update' : 'create' ?>"> <input type="hidden" name="id" value="<?= e($formData['id']) ?>"> <div class="col-md-5"> <label class="form-label">Nombre del departamento</label> <input type="text" class="form-control" name="name" maxlength="120" required value="<?= e($formData['name']) ?>" placeholder="Ej: Valle Viejo"> </div> <div class="col-md-3"> <label class="form-label">Código (opcional)</label> <input type="text" class="form-control" name="code" maxlength="30" value="<?= e($formData['code']) ?>" placeholder="Ej: VLV"> </div> <div class="col-md-4"> <label class="form-label">Estado</label> <select class="form-select" name="status" required> <option value="active" <?= $formData['status'] === 'active' ? 'selected' : '' ?>>Activo</option> <option value="inactive" <?= $formData['status'] === 'inactive' ? 'selected' : '' ?>>Inactivo</option> </select> </div> <div class="col-12 text-end"> <button type="submit" class="btn btn-campus"> <i class="fa-solid fa-floppy-disk me-1"></i><?= $isEditMode ? 'Actualizar departamento' : 'Crear departamento' ?> </button> </div> </form> </div> </div> <div class="card card-campus"> <div class="card-header-campus"> <h3 class="h6 mb-0">Listado de departamentos</h3> </div> <div class="card-body border-bottom"> <form method="get" class="row g-2 align-items-end"> <div class="col-12 col-md-7"> <label class="form-label mb-1">Buscar</label> <input type="text" class="form-control" name="q" value="<?= e($search) ?>" placeholder="Nombre o código"> </div> <div class="col-12 col-md-3"> <label class="form-label mb-1">Estado</label> <select class="form-select" name="status"> <option value="all" <?= $statusFilter === 'all' ? 'selected' : '' ?>>Todos</option> <option value="active" <?= $statusFilter === 'active' ? 'selected' : '' ?>>Activo</option> <option value="inactive" <?= $statusFilter === 'inactive' ? 'selected' : '' ?>>Inactivo</option> </select> </div> <div class="col-12 col-md-2 d-flex gap-2"> <button type="submit" class="btn btn-campus flex-grow-1">Filtrar</button> <a href="<?= e(base_url('admin/departments.php')) ?>" class="btn btn-outline-success">Limpiar</a> </div> </form> </div> <?php if ($listError !== null): ?> <div class="card-body"> <div class="alert alert-danger mb-0" role="alert"><?= e($listError) ?></div> </div> <?php elseif (empty($departmentRows)): ?> <div class="card-body text-center py-5"> <i class="fa-solid fa-inbox mb-3" style="font-size: 2rem; color: var(--campus-gray-500); opacity: 0.5"></i> <p class="mb-0 text-muted">No hay departamentos cargados para los filtros seleccionados.</p> </div> <?php else: ?> <div class="card-body"> <div class="row g-3"> <?php foreach ($departmentRows as $department): ?> <?php $statusBadge = geographic_department_status_badge((string) ($department['status'] ?? '')); ?> <div class="col-md-6 col-lg-4"> <div class="dept-card"> <h4 class="h6 mb-1"><?= e((string) ($department['name'] ?? '')) ?></h4> <p class="text-muted mb-2">Código: <strong><?= e((string) ($department['code'] ?? '—')) ?></strong></p> <p class="mb-3"> <span class="badge <?= e($statusBadge['class']) ?>"><?= e($statusBadge['label']) ?></span> </p> <a href="<?= e(base_url('admin/departments.php?edit=' . (int) ($department['id'] ?? 0))) ?>" class="btn btn-outline-success btn-sm"> <i class="fa-solid fa-pen-to-square me-1"></i>Editar </a> <form method="post" style="display: inline;" onsubmit="return confirm('¿Estás seguro de que deseas eliminar este departamento? Esta acción no se puede deshacer.');"> <input type="hidden" name="action" value="delete"> <input type="hidden" name="id" value="<?= (int) ($department['id'] ?? 0) ?>"> <button type="submit" class="btn btn-outline-danger btn-sm"> <i class="fa-solid fa-trash me-1"></i>Eliminar </button> </form> </div> </div> <?php endforeach; ?> </div> </div> <?php endif; ?> </div> <div class="card card-campus mt-4"> <div class="card-header-campus"> <h3 class="h6 mb-0">Asignar cursos por departamento de Catamarca</h3> </div> <?php if ($listError !== null): ?> <div class="card-body"> <div class="alert alert-danger mb-0" role="alert"><?= e($listError) ?></div> </div> <?php elseif (empty($courseAssignmentRows)): ?> <div class="card-body text-center py-4"> <p class="mb-0 text-muted">No hay cursos disponibles para asignar.</p> </div> <?php else: ?> <div class="table-responsive"> <table class="table align-middle mb-0"> <thead> <tr> <th>Curso</th> <th>Área académica</th> <th>Departamento Catamarca actual</th> <th class="text-end">Nueva asignación</th> </tr> </thead> <tbody> <?php foreach ($courseAssignmentRows as $courseRow): ?> <tr> <td><?= e((string) ($courseRow['title'] ?? '')) ?></td> <td><?= e((string) ($courseRow['academic_department_name'] ?? '')) ?></td> <td> <?php if ((string) ($courseRow['geographic_department_name'] ?? '') !== ''): ?> <span class="badge text-bg-info"><?= e((string) $courseRow['geographic_department_name']) ?></span> <?php else: ?> <span class="text-muted">Sin definir</span> <?php endif; ?> </td> <td class="text-end"> <form method="post" class="d-inline-flex gap-2 align-items-center"> <input type="hidden" name="action" value="assign_course_department"> <input type="hidden" name="course_id" value="<?= e((string) ($courseRow['id'] ?? 0)) ?>"> <select name="geographic_department_id" class="form-select form-select-sm" style="min-width: 240px"> <option value="">Sin definir</option> <?php foreach ($departmentRows as $departmentOption): ?> <option value="<?= e((string) ($departmentOption['id'] ?? 0)) ?>" <?= (string) ($courseRow['geographic_department_id'] ?? '') === (string) ($departmentOption['id'] ?? '') ? 'selected' : '' ?>> <?= e((string) ($departmentOption['name'] ?? '')) ?> </option> <?php endforeach; ?> </select> <button type="submit" class="btn btn-outline-success btn-sm">Guardar</button> </form> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php endif; ?> </div> </main> </div> <?php include ROOT_PATH . '/includes/layout/footer.php'; ?>
Simpan