<?php
// Archivo: Controladores/AdminController.php
require_once 'BaseController.php';
require_once 'Modelos/AdminModel.php';
class AdminController extends BaseController
{
private $adminModel;
public function __construct()
{
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
$this->adminModel = new AdminModel();
// Solo GRADO 1 puede acceder
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {
$this->redirect(BASE_URL . '/index.php?url=login/index');
}
if (($_SESSION['grado'] ?? 99) !== 1) {
$this->redirect(BASE_URL . '/index.php?url=menu/index');
}
}
/**
* GET/POST → index.php?url=admin/crearUsuario
* Muestra el formulario de creación y la tabla de usuarios.
* Detecta ?editar=USR para activar el modo edición.
*/
public function crearUsuario()
{
$mensaje = $_SESSION['feedback_message'] ?? '';
unset($_SESSION['feedback_message']);
$empresas = $this->adminModel->getEmpresas(); // Array de strings: ['Avicampo', 'Sanmarino', ...]
$usuarios = $this->adminModel->getUsuarios();
$editando = null;
// Modo edición: GET con ?editar=USR
if (!empty($_GET['editar'])) {
$registro = $this->adminModel->getUsuarioPorUsr(trim($_GET['editar']));
if ($registro) {
$editando = $registro;
}
}
// POST: crear nuevo usuario
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$usr = trim($_POST['USR'] ?? '');
$nombre = trim($_POST['NOMBRE'] ?? '');
$password = $_POST['PASSWORD'] ?? '';
$grado = (int)($_POST['GRADO'] ?? 0);
$empresa = trim($_POST['EMPRESA'] ?? '');
if (empty($usr) || empty($nombre) || empty($password) || !in_array($grado, [1,2,3]) || empty($empresa)) {
$mensaje = $this->formatAlert('Todos los campos son obligatorios y válidos.', 'danger');
} else {
$resultado = $this->adminModel->insertarUsuario($usr, $nombre, $password, $grado, $empresa);
if ($resultado['success']) {
$_SESSION['feedback_message'] = $this->formatAlert("Usuario '$usr' creado con éxito.", 'success');
$this->redirect(BASE_URL . '/index.php?url=admin/crearUsuario');
return;
}
$mensaje = $this->formatAlert($resultado['error'], 'danger');
}
}
$this->view('admin/crearUsuario', [
'empresas' => $empresas,
'usuarios' => $usuarios,
'mensaje' => $mensaje,
'editando' => $editando,
]);
}
/**
* POST → index.php?url=admin/actualizarUsuario
*/
public function actualizarUsuario()
{
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
$this->redirect(BASE_URL . '/index.php?url=admin/crearUsuario');
return;
}
$usr = trim($_POST['USR'] ?? '');
$nombre = trim($_POST['NOMBRE'] ?? '');
$password = $_POST['PASSWORD'] ?? '';
$grado = (int)($_POST['GRADO'] ?? 0);
$empresa = trim($_POST['EMPRESA'] ?? '');
$resultado = $this->adminModel->actualizarUsuario($usr, $nombre, $password, $grado, $empresa);
if ($resultado['success']) {
$_SESSION['feedback_message'] = $this->formatAlert("Usuario '$usr' actualizado con éxito.", 'success');
} else {
$_SESSION['feedback_message'] = $this->formatAlert($resultado['error'], 'danger');
}
$this->redirect(BASE_URL . '/index.php?url=admin/crearUsuario');
}
/**
* POST → index.php?url=admin/eliminarUsuario
*/
public function eliminarUsuario()
{
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
$this->redirect(BASE_URL . '/index.php?url=admin/crearUsuario');
return;
}
$usr = trim($_POST['USR'] ?? '');
$usuarioActual = $_SESSION['user'] ?? '';
$resultado = $this->adminModel->eliminarUsuario($usr, $usuarioActual);
if ($resultado['success']) {
$_SESSION['feedback_message'] = $this->formatAlert("Usuario '$usr' eliminado con éxito.", 'success');
} else {
$_SESSION['feedback_message'] = $this->formatAlert($resultado['error'], 'danger');
}
$this->redirect(BASE_URL . '/index.php?url=admin/crearUsuario');
}
private function formatAlert($message, $type)
{
return '<div class="alert alert-' . $type . ' alert-dismissible fade show" role="alert">'
. htmlspecialchars($message)
. '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>'
. '</div>';
}
}