File "index.php"
Full Path: C:/wamp64/www/Seleccion/index.php
File size: 6.44 KB
MIME-type: text/x-php
Charset: utf-8
<?php
// index.php
session_start();
// Configuración de errores para desarrollo
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Router simple
$controller = $_GET['controller'] ?? 'auth';
$action = $_GET['action'] ?? 'index';
// VALIDACIÓN DE AUTENTICACIÓN
// Rutas públicas que no requieren autenticación
$publicRoutes = [
'auth' => ['index', 'login']
];
// Verificar si la ruta actual es pública
$isPublicRoute = isset($publicRoutes[$controller]) &&
in_array($action, $publicRoutes[$controller]);
// Si NO es ruta pública y el usuario NO está autenticado, redirigir al login
if (!$isPublicRoute && !isset($_SESSION['user_id'])) {
header('Location: index.php?controller=auth&action=index');
exit;
}
// Si está autenticado e intenta acceder al login, redirigir al panel
if ($controller === 'auth' && $action === 'index' && isset($_SESSION['user_id'])) {
header('Location: index.php?controller=requisicion&action=panel');
exit;
}
// Determinar si es una vista HTML o una petición API
$isHTMLView = in_array($action, ['formulario', 'panel', 'gestion', 'detalle', 'index', 'detalleCandidato']);
// Solo configurar headers JSON si NO es una vista HTML
if(!$isHTMLView) {
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Content-Type');
}
// Autoload de clases
spl_autoload_register(function ($class) {
// Mapeo de nombres de clases a archivos
$classMap = [
'RequisicionController' => 'controllers/RequisicionController.php',
'CandidatoController' => 'controllers/CandidatoController.php',
'AuthController' => 'controllers/AuthController.php',
'Requisicion' => 'models/requisicionModel.php',
'Candidato' => 'models/candidatoModel.php',
'Entrevista' => 'models/entrevistaModel.php',
'Examen' => 'models/examenModel.php',
'Usuario' => 'models/UsuarioModel.php',
'Database' => 'config/Database.php'
];
if (isset($classMap[$class])) {
$file = __DIR__ . '/' . $classMap[$class];
if (file_exists($file)) {
require_once $file;
return;
}
}
// Fallback: buscar en las carpetas estándar
$paths = [
'controllers/',
'models/',
'config/'
];
foreach ($paths as $path) {
$file = __DIR__ . '/' . $path . $class . '.php';
if (file_exists($file)) {
require_once $file;
return;
}
}
});
try {
switch($controller) {
// CONTROLADOR DE AUTENTICACIÓN
case 'auth':
$ctrl = new AuthController();
switch($action) {
case 'index':
$ctrl->index();
break;
case 'login':
$ctrl->login();
break;
case 'logout':
$ctrl->logout();
break;
default:
echo json_encode(['success' => false, 'message' => 'Acción no válida']);
}
break;
// CONTROLADOR DE REQUISICIONES
case 'requisicion':
$ctrl = new RequisicionController();
switch($action) {
case 'formulario':
// ✅ Llamar al método del controlador que carga las áreas
$ctrl->formulario();
break;
case 'panel':
require_once 'views/requisicion/panel.php';
break;
case 'crear':
$ctrl->crear();
break;
case 'listar':
$ctrl->listar();
break;
case 'obtener':
$ctrl->obtener($_GET['id']);
break;
case 'actualizarEstado':
$ctrl->actualizarEstado();
break;
case 'estadisticas':
$ctrl->estadisticas();
break;
case 'detalle':
$ctrl->detalle();
break;
default:
echo json_encode(['success' => false, 'message' => 'Acción no válida']);
}
break;
// ========================================
// CONTROLADOR DE CANDIDATOS
// ========================================
case 'candidato':
$ctrl = new CandidatoController();
switch($action) {
case 'gestion':
require_once 'views/candidato/gestion.php';
break;
case 'crearFase1':
$ctrl->crearFase1();
break;
case 'crearFase2':
$ctrl->crearFase2();
break;
case 'crearFase3':
$ctrl->crearFase3();
break;
case 'listarPorFase':
$ctrl->listarPorFase();
break;
case 'obtenerCompleto':
$ctrl->obtenerCompleto($_GET['id']);
break;
case 'obtenerAlertas':
$ctrl->obtenerAlertas();
break;
case 'actualizarFase2':
$ctrl->actualizarFase2();
break;
case 'actualizarFase3':
$ctrl->actualizarFase3();
break;
case 'buscarPorCedulas':
$ctrl->buscarPorCedulas();
break;
case 'detalleCandidato':
$ctrl->detalleCandidato();
break;
default:
echo json_encode(['success' => false, 'message' => 'Acción no válida']);
}
break;
default:
// Si el controlador no existe, redirigir al login
header('Location: index.php?controller=auth&action=index');
exit;
}
} catch(Exception $e) {
if($isHTMLView) {
echo '<h1>Error</h1><p>' . $e->getMessage() . '</p>';
} else {
echo json_encode([
'success' => false,
'message' => 'Error del servidor: ' . $e->getMessage()
]);
}
}
?>