155 lines
7.2 KiB
PHP
155 lines
7.2 KiB
PHP
<?php
|
|
/**
|
|
* Verificador de estado del Módulo Laboratorio
|
|
* Acceso: php lab_status.php (CLI) o browser con sesión admin
|
|
*/
|
|
$isCli = php_sapi_name() === 'cli';
|
|
|
|
if (!$isCli) {
|
|
require_once 'config/config.php';
|
|
if (!isUserLoggedIn()) {
|
|
header('Location: login.php'); exit;
|
|
}
|
|
}
|
|
|
|
require_once 'classes/Database.php';
|
|
|
|
$checks = [];
|
|
$allOk = true;
|
|
|
|
// ── 1. Tablas de base de datos ─────────────────────────────────────────────
|
|
$tables = [
|
|
'lab_pacientes', 'lab_enfermeras', 'lab_ordenes_medicas',
|
|
'lab_domicilios', 'lab_asignaciones', 'lab_autorizaciones', 'lab_actividad_admin',
|
|
];
|
|
|
|
$db = Database::getInstance();
|
|
foreach ($tables as $t) {
|
|
try {
|
|
$db->query("SELECT 1 FROM `{$t}` LIMIT 1", []);
|
|
$checks[] = ['ok' => true, 'msg' => "Tabla `$t` ✔"];
|
|
} catch (Exception $e) {
|
|
$checks[] = ['ok' => false, 'msg' => "Tabla `$t` ✘ — NO EXISTE (ejecuta migrations/20260302_lab_run_migrations.php)"];
|
|
$allOk = false;
|
|
}
|
|
}
|
|
|
|
// ── 2. Archivos de clases ──────────────────────────────────────────────────
|
|
$classFiles = [
|
|
'classes/lab/ActividadAdmin.php',
|
|
'classes/lab/Paciente.php',
|
|
'classes/lab/Enfermera.php',
|
|
'classes/lab/OrdenMedica.php',
|
|
'classes/lab/Domicilio.php',
|
|
'classes/lab/Asignacion.php',
|
|
];
|
|
foreach ($classFiles as $f) {
|
|
$ok = file_exists(__DIR__ . '/' . $f);
|
|
if (!$ok) $allOk = false;
|
|
$checks[] = ['ok' => $ok, 'msg' => "Clase $f " . ($ok ? '✔' : '✘ — FALTA')];
|
|
}
|
|
|
|
// ── 3. Endpoints API ──────────────────────────────────────────────────────
|
|
$apiFiles = [
|
|
'api/lab/_helpers.php', 'api/lab/get_pacientes.php', 'api/lab/save_paciente.php',
|
|
'api/lab/get_ordenes.php', 'api/lab/save_orden.php', 'api/lab/autorizar_orden.php',
|
|
'api/lab/get_domicilios.php', 'api/lab/save_domicilio.php', 'api/lab/get_enfermeras.php',
|
|
'api/lab/save_enfermera.php', 'api/lab/get_asignaciones.php', 'api/lab/save_asignacion.php',
|
|
'api/lab/get_actividad.php', 'api/lab/get_stats.php', 'api/lab/crear_desde_whatsapp.php',
|
|
];
|
|
foreach ($apiFiles as $f) {
|
|
$ok = file_exists(__DIR__ . '/' . $f);
|
|
if (!$ok) $allOk = false;
|
|
$checks[] = ['ok' => $ok, 'msg' => "API $f " . ($ok ? '✔' : '✘ — FALTA')];
|
|
}
|
|
|
|
// ── 4. Vistas (páginas PHP) ───────────────────────────────────────────────
|
|
$views = ['lab_dashboard.php','lab_ordenes.php','lab_pacientes.php','lab_domicilios.php','lab_enfermeras.php','lab_reportes.php'];
|
|
foreach ($views as $v) {
|
|
$ok = file_exists(__DIR__ . '/' . $v);
|
|
if (!$ok) $allOk = false;
|
|
$checks[] = ['ok' => $ok, 'msg' => "Vista $v " . ($ok ? '✔' : '✘ — FALTA')];
|
|
}
|
|
|
|
// ── 5. Directorio uploads ─────────────────────────────────────────────────
|
|
$uploadsOk = is_dir(__DIR__ . '/uploads/media') && is_writable(__DIR__ . '/uploads/media');
|
|
if (!$uploadsOk) $allOk = false;
|
|
$checks[] = ['ok' => $uploadsOk, 'msg' => 'Directorio uploads/media ' . ($uploadsOk ? '✔ (writable)' : '✘ — no existe o sin permisos de escritura')];
|
|
|
|
// ── Salida ─────────────────────────────────────────────────────────────────
|
|
if ($isCli) {
|
|
echo "\n=== Módulo Laboratorio — Estado del sistema ===\n\n";
|
|
foreach ($checks as $c) {
|
|
echo ($c['ok'] ? ' [OK] ' : ' [!!] ') . $c['msg'] . "\n";
|
|
}
|
|
echo "\n" . ($allOk ? "✔ Todo correcto." : "✘ Hay problemas — revisa los puntos marcados con [!!]") . "\n\n";
|
|
exit($allOk ? 0 : 1);
|
|
}
|
|
|
|
$adminNombre = $_SESSION['admin_user']['full_name'] ?? $_SESSION['admin_user']['username'] ?? 'Admin';
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="es">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Estado Módulo Lab</title>
|
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="./assets/css/styles.css?v=12" rel="stylesheet">
|
|
</head>
|
|
<body>
|
|
<nav class="sidebar">
|
|
<div class="sidebar-header"><h4><i class="fas fa-flask"></i> Módulo Lab</h4></div>
|
|
<ul class="sidebar-menu">
|
|
<li><a href="lab_dashboard.php" class="nav-link"><i class="fas fa-tachometer-alt"></i> Dashboard</a></li>
|
|
<li class="sidebar-divider"></li>
|
|
<li><a href="index.php" class="nav-link"><i class="fas fa-arrow-left"></i> Volver al Bot</a></li>
|
|
</ul>
|
|
</nav>
|
|
<main class="main-content">
|
|
<header class="content-header">
|
|
<h1><i class="fas fa-stethoscope text-primary"></i> Estado del Módulo Laboratorio</h1>
|
|
<small class="text-muted"><?= htmlspecialchars($adminNombre) ?></small>
|
|
</header>
|
|
<div class="container-fluid py-3">
|
|
<div class="alert alert-<?= $allOk ? 'success' : 'danger' ?> d-flex align-items-center gap-2 mb-3">
|
|
<i class="fas fa-<?= $allOk ? 'check-circle' : 'exclamation-triangle' ?> fs-4"></i>
|
|
<span class="fw-semibold"><?= $allOk ? 'Módulo instalado correctamente' : 'Se encontraron problemas — revisa los elementos marcados en rojo' ?></span>
|
|
</div>
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-body p-0">
|
|
<table class="table table-hover mb-0">
|
|
<thead class="table-light"><tr><th>Verificación</th><th>Estado</th></tr></thead>
|
|
<tbody>
|
|
<?php foreach ($checks as $c): ?>
|
|
<tr>
|
|
<td><?= htmlspecialchars($c['msg']) ?></td>
|
|
<td><span class="badge bg-<?= $c['ok'] ? 'success' : 'danger' ?>"><?= $c['ok'] ? 'OK' : 'ERROR' ?></span></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<?php if (!$allOk): ?>
|
|
<div class="alert alert-warning mt-3">
|
|
<h6 class="fw-semibold"><i class="fas fa-wrench me-2"></i>Pasos para solucionar:</h6>
|
|
<ol class="mb-0">
|
|
<li>Ejecuta las migraciones: <code>php migrations/20260302_lab_run_migrations.php</code></li>
|
|
<li>Verifica que todos los archivos de <code>classes/lab/</code> y <code>api/lab/</code> existen</li>
|
|
<li>Asegúrate de que <code>uploads/media/</code> tiene permisos 755 o 775</li>
|
|
</ol>
|
|
</div>
|
|
<?php endif; ?>
|
|
<?php if ($allOk): ?>
|
|
<div class="mt-3">
|
|
<a href="lab_dashboard.php" class="btn btn-success"><i class="fas fa-flask me-2"></i>Ir al Módulo Laboratorio</a>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</main>
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
</body>
|
|
</html>
|