control de usuarios

This commit is contained in:
victor.monge 2025-05-16 16:55:44 -06:00
parent 72885cff2c
commit 24d6a7f7ca
8 changed files with 199 additions and 12 deletions

View File

@ -97,6 +97,43 @@ CREATE TABLE usuario (
) ENGINE=InnoDB;
-- OAuth 2.0
CREATE TABLE oauth_clients (
client_id VARCHAR(80) NOT NULL,
client_secret VARCHAR(80) NOT NULL,
redirect_uri VARCHAR(2000) DEFAULT NULL,
grant_types VARCHAR(80) DEFAULT NULL,
scope VARCHAR(4000) DEFAULT NULL,
user_id VARCHAR(80) DEFAULT NULL,
PRIMARY KEY (client_id)
);
CREATE TABLE oauth_access_tokens (
access_token VARCHAR(255) NOT NULL,
client_id VARCHAR(80) NOT NULL,
user_id VARCHAR(80) DEFAULT NULL,
expires TIMESTAMP NOT NULL,
scope VARCHAR(4000) DEFAULT NULL,
PRIMARY KEY (access_token)
);
CREATE TABLE oauth_refresh_tokens (
refresh_token VARCHAR(40) NOT NULL,
client_id VARCHAR(80) NOT NULL,
user_id VARCHAR(80) DEFAULT NULL,
expires TIMESTAMP NOT NULL,
scope VARCHAR(4000) DEFAULT NULL,
PRIMARY KEY (refresh_token)
);
CREATE TABLE oauth_scopes (
scope VARCHAR(80) NOT NULL,
is_default BOOLEAN,
PRIMARY KEY (scope)
);
-- DML -------------------------------------------------------------------------------------
-- Inserción catalogo "genero":
@ -180,4 +217,10 @@ INSERT INTO candidato (nombres, primer_apellido, segundo_apellido, correo, telef
('Juan', 'Pérez', 'Gómez', 'correo@gmail.com', '1234567890', 1, 1, 2, 1);
INSERT INTO info_candidatos (id_candidato, id_pais, id_estado, id_municipio, id_colonia, id_nivel, id_giro, nombre_empresa_institucion, motivo_examen, calificacion_servicio, consentimiento_pub) VALUES
(1, 1, 1, 1001, 10011, 5, 1, 'Empresa de Prueba', 'Motivo de prueba', 5, 1);
(1, 1, 1, 1001, 10011, 5, 1, 'Empresa de Prueba', 'Motivo de prueba', 5, 1);
INSERT INTO oauth_clients (client_id, client_secret, redirect_uri, grant_types, scope, user_id)
VALUES ('testclient', 'testpass', NULL, 'client_credentials', 'basic', NULL);
INSERT INTO oauth_scopes (scope, is_default) VALUES ('basic', true);

View File

@ -40,13 +40,8 @@ class UsuarioController{
echo "Usuario: ${usuario} registrado exitosamente.";
}
public static function eliminarUsuario($usuario){
if (!self::existeUsuario($usuario)) {
echo "El usuario no existe.";
return;
}
self::$usuarioModel->eliminarUsuario($usuario);
echo "Usuario: ${usuario} eliminado exitosamente.";
public static function eliminarUsuario($id_usuario){
return self::$usuarioModel->eliminarUsuario($id_usuario);
}
}

View File

@ -0,0 +1,18 @@
<?php
header('Content-Type: application/json', 'charset=UTF-8');
require_once __DIR__ . '/UsuarioController.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['id_usuario'])) {
$id_usuario = $_POST['id_usuario'];
$resultado = UsuarioController::eliminarUsuario($id_usuario);
echo json_encode($resultado);
} else {
http_response_code(400);
echo json_encode([
'estado' => 'error',
'mensaje' => 'Método no permitido.'
]);
}
?>

34
js/control-usuario.js Normal file
View File

@ -0,0 +1,34 @@
document.addEventListener("DOMContentLoaded" , function() {
const tabla = document.querySelector('table');
tabla.addEventListener("click", function(evento) {
const botonEliminar = evento.target.closest(".boton-eliminar");
if (botonEliminar) {
const idUsuarioEliminar = botonEliminar.dataset.idUsuario;
const nombreUsuarioEliminar = botonEliminar.dataset.nombreUsuario;
// Mostrar un mensaje de confirmación antes de eliminar
if (!confirm("¿Desea eliminar al usuario " + nombreUsuarioEliminar + "?")) {
return;
}
const data = new FormData();
data.append("id_usuario", idUsuarioEliminar);
fetch('../controllers/eliminarUsuario.php', {
method: 'POST',
body: data
})
.then(response => response.json())
.then(data => {
alert(data.mensaje);
location.reload();
})
.catch((error) => {
console.error('Error:', error);
});
}
});
});

View File

@ -69,9 +69,12 @@ class UsuarioModel {
public function obtenerUsuarios() {
// Preparar la consulta mysql usando msqli
$stmt = $this->conn->prepare("SELECT usuario FROM usuario");
$stmt = $this->conn->prepare("SELECT id, usuario FROM usuario");
if (!$stmt->execute()) {
throw new Exception("Error al obtener nombres de usuarios: " . $stmt->error);
return [
'estado' => 'error',
'mensaje' => 'Error al obtener usuarios: ' . $stmt->error
];
}
// Obtener el resultado
@ -86,14 +89,21 @@ class UsuarioModel {
}
public function eliminarUsuario($id){
// Preparar la consulta mysql usando msqli
$stmt = $this->conn->prepare("DELETE FROM usuario WHERE id = ?");
$stmt->bind_param("i", $id);
if (!$stmt->execute()) {
throw new Exception("Error al eliminar usuario: " . $stmt->error);
return [
'estado' => 'error',
'mensaje' => 'Error al eliminar usuario: ' . $stmt->error
];
}
$stmt->close();
return [
'estado' => 'exitoso',
'mensaje' => 'Usuario eliminado exitosamente.'
];
}
}

View File

@ -39,6 +39,7 @@ if(isset($resultado['estado'])){
<li><a href="inicio.html"><i class='bx bxs-dashboard icon' ></i>Dashboard</a></li>
<li><a href="formulario-candidato.html" target="_blank"><i class='bx bxs-dashboard icon' ></i>Formulario de registro</a></li>
<li><a href="control-candidatos.php" class="active"><i class='bx bxs-dashboard icon' ></i>Control candidatos</a></li>
<li><a href="control-usuarios.php"><i class='bx bxs-dashboard icon' ></i>Control usuario</a></li>
</ul>

View File

@ -0,0 +1,82 @@
<?php
require_once __DIR__ . "/../controllers/UsuarioController.php";
$resultado = UsuarioController::obtenerUsuarios();
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css'>
<link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="../css/inicio.css">
<title>Control usuarios</title>
</head>
<body>
<!-- SIDEBAR -->
<section id="sidebar">
<a href="inicio.html" class="brand"><i class='bx bx-code-alt icon' ></i> LANIA</a>
<ul class="side-menu">
<li><a href="inicio.html"><i class='bx bxs-dashboard icon' ></i>Dashboard</a></li>
<li><a href="formulario-candidato.html" target="_blank"><i class='bx bxs-dashboard icon' ></i>Formulario de registro</a></li>
<li><a href="control-candidatos.php"><i class='bx bxs-dashboard icon' ></i>Control candidatos</a></li>
<li><a href="control-usuarios.php" class="active"><i class='bx bxs-dashboard icon' ></i>Control usuario</a></li>
</ul>
</section>
<!-- .SIDEBAR -->
<section id="content">
<!-- ========== MAIN ========== -->
<main>
<h1 class="title" style="margin: 2% 1%">Control</h1>
<!-- ------------------------------ div qué contiene la tabla ------------------------------------------ -->
<div style="margin: 1%">
<div class="table-responsive rounded-4" style="height: 100%;width: 100%;">
<table class="table table-hover table-bordered border-dark-subtle shadow-sm">
<thead>
<tr class="table-dark">
<th>Nombre</th>
<th>Acciones</th>
</tr>
</thead>
<tbody class="table-group-divider">
<?php foreach ($resultado as $usuario): ?>
<tr>
<td><?php echo $usuario['usuario'] ?></td>
<td>
<a class="btn border rounded-3 shadow" role="button" style="background-color: #35245b;color: white;" href="modificar-usuario.php?id_usuario=<?php echo $usuario['id'] ?>">Modificar</a>
<button class="boton-eliminar btn border rounded-3 shadow" role="button" style="background-color: #35245b;color: white;" data-id-usuario="<?php echo $usuario['id'] ?>" data-nombre-usuario="<?php echo $usuario['usuario'] ?>"><i class='bx bxs-trash-alt' style='color:#ffffff'></i>Eliminar</button>
</td>
<tr>
<?php endforeach; ?>
</tr>
</tbody>
</table>
</div>
</div>
<!-- ------------------------------ /div qué contiene la tabla ----------------------------------------- -->
</main>
<!-- .......... MAIN .......... -->
</section>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="../js/sidebar-navbar.js"></script>
<script src="../js/control-usuario.js"></script>
<script src="https://website-widgets.pages.dev/dist/sienna.min.js" defer></script>
</body>
</html>

View File

@ -0,0 +1,4 @@
<?php
echo 'Hola ' . $_GET['id_usuario'];
?>