File "AdminController.php"

Full Path: C:/wamp64/www/Asistencia_Capacitacion/Controladores/AdminController.php
File size: 4.87 KB
MIME-type: text/x-php
Charset: utf-8

<?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>';
    }
}