<?php
// Controladores/UsuarioControlador.php
require_once 'Modelos/UsuarioModelo.php';
class UsuarioControlador {
private $modelo;
public function __construct($db, $db_externa = null) {
$this->modelo = new UsuarioModelo($db, $db_externa);
// Seguridad: Solo admin entra aquí
if (!esta_autenticado() || usuario_actual()['rol'] !== 'admin') {
$_SESSION['error'] = "No tienes permiso para acceder a esta sección.";
header("Location: index.php?r=dashboard");
exit;
}
}
/** Pantalla principal de gestión de usuarios */
public function index() {
// Capturar el término de búsqueda
$busqueda = $_GET['busqueda'] ?? '';
// Configuración de paginación
$por_pagina = 10;
$pagina_actual = isset($_GET['p']) ? (int)$_GET['p'] : 1;
if ($pagina_actual < 1) $pagina_actual = 1;
$inicio = ($pagina_actual - 1) * $por_pagina;
// Obtener datos con filtro de búsqueda
$total_usuarios = $this->modelo->contarTotal($busqueda);
$total_paginas = ceil($total_usuarios / $por_pagina);
$usuarios = $this->modelo->listarPaginado($inicio, $por_pagina, $busqueda);
// Cargar vistas pasando las variables de paginación y búsqueda
require_once 'Vistas/plantilla/encabezado.php';
require_once 'Vistas/admin/usuarios.php';
require_once 'Vistas/plantilla/pie.php';
}
/** Procesar el formulario de creación de usuario */
public function guardar() {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($this->modelo->guardarManual($_POST)) {
$_SESSION['mensaje'] = "Usuario creado con éxito.";
} else {
$_SESSION['error'] = "Error al crear el usuario.";
}
}
header("Location: index.php?r=admin/usuarios");
exit;
}
/** Mostrar formulario de edición (Botón Ver) */
public function ver() {
$id = $_GET['id'] ?? null;
$usuario = $this->modelo->obtenerPorId($id);
if (!$usuario) {
$_SESSION['error'] = "Usuario no encontrado.";
header("Location: index.php?r=admin/usuarios");
exit;
}
require_once 'Vistas/plantilla/encabezado.php';
require_once 'Vistas/admin/usuarios_editar.php';
require_once 'Vistas/plantilla/pie.php';
}
/** Procesar la actualización de datos */
public function actualizar() {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = $_POST['id'];
if ($this->modelo->actualizar($id, $_POST)) {
$_SESSION['mensaje'] = "Usuario actualizado correctamente.";
} else {
$_SESSION['error'] = "Error al actualizar el usuario.";
}
}
header("Location: index.php?r=admin/usuarios");
exit;
}
}