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()
        ]);
    }
}
?>