Files
ByteCenter/app/controllers/pageController.php
T
2026-08-04 19:20:18 -03:00

324 lines
8.4 KiB
PHP

<?php
// Inicio de sesión
session_start();
// Generación de token (previene Cross-Site y Request Forgery)
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
// Evitar Back-Forward Cache en Chrome
header("Cache-Control: no-store");
// Funcion principal para obtener el body a mostrar
function getBodyContent() {
$opt = $_GET['opt'] ?? null; // Obtiene parámetro enviado desde URL (es el parámetro que maneja todas las acciones dentro del sistema)
/* ----- REDIRECCIONES ----- */
// USUARIO LOGUEADO SIN OPT (en caso de ingresar localhost/ en la barra de direcciones)
if (isset($_SESSION['user']) && $opt === null) {
if ($_SESSION['user']['rol'] === 'admin') {
header("Location: index.php?opt=inicio_admin"); // Redirección HTTP
} else {
header("Location: index.php?opt=inicio_operador");
}
exit;
}
// OPCIONES DE RECUPERACION DE CUENTA (lo maneja logInController)
$opcionesRecuperacion = [
'recuperar_cuenta',
'verificar_codigo',
'restablecer_contrasenia'
];
if (in_array($opt, $opcionesRecuperacion, true)) {
return require __DIR__ . '/../controllers/logInController.php';
}
// USUARIO NO LOGUEADO
if (!isset($_SESSION['user'])) {
if ($opt === 'login') {
return require __DIR__ . '/../controllers/logInController.php';
}
header("Location: index.php?opt=login"); // Envía cabeceras http al navegador, obliga a mostrar el login
exit; // Importante usar exit para cortar ejecución
}
// SETEA EL USUARIO EN $_SESSION EN CASO DE QUE EL ROL SE CAMBIÓ. ADEMÁS HACE LOGOUT SI FUÉ DESACTIVADO
if (isset($_SESSION['user'])) {
require_once __DIR__ . '/../models/logInModel.php';
$loginmodel = new logInModel();
$usuario = $loginmodel->buscarPorUsuario($_SESSION['user']['usuario']);
if (!$usuario || !(bool)$usuario['activo']) {
session_unset();
session_destroy();
setcookie(session_name(), '', time() - 3600, '/');
header("Location: index.php?opt=login");
exit;
}
$_SESSION['user'] = $usuario;
if ($_SESSION['user']['activo'] !== true) {
header("Location:index.php?opt=logout");
}
}
/* ----- OPCIONES DE ACCIONES EN SISTEMA ----- */
// USUARIO LOGUEADO (HOME / LOGOUT)
$opcioneslogueado = [
'inicio_admin',
'inicio_operador',
'home_operador',
'home_admin',
'logout',
'readme'
];
if (in_array($opt, $opcioneslogueado, true)) { // Parámetro $strict en true, PHP compara el valor y también el tipo de dato
return require __DIR__ . '/../controllers/logInController.php';
}
// OPCIONES DE USUARIO (PERFIL + ADMINISTRACION)
$opcionesusuarios = [
'datos_usuario',
'usuarios',
'crear_usuario',
'eliminar_usuario'
];
if (in_array($opt, $opcionesusuarios, true)) {
return require __DIR__ . '/../controllers/usuarioController.php';
}
// CLIENTES
$opcionesclientes = [
'clientes',
'crear_cliente',
'editar_cliente'
];
if (in_array($opt, $opcionesclientes, true)) {
return require __DIR__ . '/../controllers/clienteController.php';
}
// PROVEEDORES
$opcionesproveedores = [
'proveedores',
'crear_proveedor',
'editar_proveedor'
];
if (in_array($opt, $opcionesproveedores, true)) {
return require __DIR__ . '/../controllers/proveedorController.php';
}
// PRODUCTOS
$opcionesproductos = [
// Manejo de productos
'productos',
'productos_inactivos',
'crear_producto',
'editar_producto',
'cambiar_estado',
// Manejo de categoría de productos
'categorias',
'crear_categoria',
'editar_categoria'
];
if (in_array($opt, $opcionesproductos, true)) {
return require __DIR__ . '/../controllers/productoController.php';
}
// VENTAS
$opcionesventas = [
'listar_ventas',
'crear_venta',
'agregar_producto',
'seleccionar_cliente',
'eliminar_cliente',
'resumen_venta',
'guardar_datos_venta',
'generar_venta_pdf',
'continuar_sin_comprobante',
'confirmar_venta',
'detalle_venta'
];
if (in_array($opt, $opcionesventas, true)) {
return require __DIR__ . '/../controllers/ventaController.php';
}
// PEDIDOS
$opcionespedidos = [
'listar_pedidos',
'detalle_pedido',
'crear_pedido',
'agregar_producto_pedido',
'seleccionar_proveedor',
'eliminar_proveedor',
'generar_remito_pdf',
'continuar_sin_remito',
'confirmar_pedido'
];
if (in_array($opt, $opcionespedidos, true)) {
return require __DIR__ . '/../controllers/pedidoController.php';
}
// SERVICIOS
$opcionesservicios = [
'crear_servicio',
'guardar_servicio', // Guardado inicial del servicio (cuando viene el cliente al local)
'generar_servicio_pdf',
'seleccionar_cliente_servicio',
'eliminar_cliente_servicio',
'listar_servicios',
'actualizar_servicio', // Actualización del servicio (se cargan los datos a realizar e insumos a utilizar)
'agregar_insumo',
'finalizar_servicio', // Actualización del servicio (el cliente decidió llevar a cabo el servicio, al terminar se marca como finalizado en la base de datos)
'cancelar_servicio', // Según regla de negocio (caso en donde el cliente decide no realizar el servicio)
'detalle_servicio',
'detalle_insumos_servicio',
'resetear_datos_servicio', // Para resetar caja y datos en $_SESSION al ingresar a la vista de actualización
'agregar_mano_obra'
];
if (in_array($opt, $opcionesservicios, true)) {
return require __DIR__ . '/../controllers/servicioController.php';
}
// MANEJO GENERAL DE CAJA
$opcionescaja = [
// MANEJO DE VENTAS
'agregar_producto_caja',
'eliminar_producto',
'editar_cantidad',
'vaciar_caja_venta',
// MANEJO DE PEDIDOS
'agregar_producto_pedido_caja',
'eliminar_producto_pedido',
'editar_datos_producto',
'vaciar_caja_pedido',
// MANEJO DE SERVICIOS
'agregar_insumo_caja',
'vaciar_caja_servicio',
'eliminar_insumo',
'editar_cantidad_insumo'
];
if (in_array($opt, $opcionescaja, true)) {
return require __DIR__ . '/../controllers/cajaController.php';
}
// PRESUPUESTOS
$opcionespresupuestos = [
'crear_presupuesto',
'seleccionar_cliente_presupuesto',
'eliminar_cliente_presupuesto',
'agregar_producto_presupuesto',
'eliminar_producto_presupuesto',
'vaciar_caja_presupuesto',
'editar_cantidad_presupuesto',
'resumen_presupuesto',
'guardar_datos_presupuesto',
'generar_presupuesto_pdf'
];
if (in_array($opt, $opcionespresupuestos, true)) {
return require __DIR__ . '/../controllers/presupuestoController.php';
}
// INFORMES
$opcionesinformes = [
'generar_balance_anual',
'generar_cuentas_por_cobrar',
'informe'
];
if (in_array($opt, $opcionesinformes, true)) {
return require __DIR__ . '/../controllers/informeController.php';
}
// CONFIGURACIÓN DEL SISTEMA (controla configuración general y también backups)
$opcionesconfiguracion = [
'configuracion',
'actualizar_config',
'backups',
'generar_backup',
'descargar_backup',
'eliminar_backup',
'restaurar_backup'
];
if (in_array($opt, $opcionesconfiguracion, true)) {
return require __DIR__ . '/../controllers/configuracionController.php';
}
// CHATBOT
$opcioneschatbot = [
'chatbot'
];
if (in_array($opt, $opcioneschatbot, true)) {
ob_start();
require __DIR__ . '/../views/chatbot/chatbotView.php';
return ob_get_clean();
}
// DEFAULT (404)
ob_start(); // Inicia búfer de salida en PHP, lo guarda en memoria
require __DIR__ . '/../views/404View.php';
return ob_get_clean(); // Devuelve el contenido almacenado en el búfer como string
}