Files
contenedor_ibiza/src/User.php
2026-01-19 15:20:36 -06:00

129 lines
4.1 KiB
PHP
Executable File

<?php
require_once __DIR__ . '/Database.php';
class User {
private $db;
public function __construct() {
$this->db = Database::getInstance()->getConnection();
}
public function getAll($includeInactive = false) {
$sql = "SELECT * FROM users";
if (!$includeInactive) {
$sql .= " WHERE activo = 1";
}
$sql .= " ORDER BY nombre";
$stmt = $this->db->query($sql);
return $stmt->fetchAll();
}
public function getById($id) {
$stmt = $this->db->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch();
}
public function getByEmail($email) {
$stmt = $this->db->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
return $stmt->fetch();
}
public function findByLogin($login) {
$login = trim($login);
$stmt = $this->db->prepare("SELECT * FROM users WHERE (email = ? OR username = ?) AND activo = 1");
$stmt->execute([$login, $login]);
return $stmt->fetch();
}
public function getByUsername($username) {
$stmt = $this->db->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
return $stmt->fetch();
}
public function usernameExists($username, $excludeId = null) {
$sql = "SELECT COUNT(*) as total FROM users WHERE username = ?";
$params = [$username];
if ($excludeId) {
$sql .= " AND id != ?";
$params[] = $excludeId;
}
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
return $stmt->fetch()['total'] > 0;
}
public function create($data) {
$username = !empty($data['username']) ? $data['username'] : strtolower(preg_replace('/[^a-zA-Z0-9]/', '', $data['nombre']));
$stmt = $this->db->prepare("
INSERT INTO users (username, nombre, email, password, rol)
VALUES (?, ?, ?, ?, ?)
");
$password = password_hash($data['password'], PASSWORD_DEFAULT);
$stmt->execute([
$username,
$data['nombre'],
$data['email'],
$password,
$data['rol'] ?? 'ayudante'
]);
$userId = $this->db->lastInsertId();
// Si es un ayudante, agregar automáticamente a rotacion_orden
if (isset($data['rol']) && $data['rol'] === 'ayudante') {
$this->agregarARotacion($userId);
}
return $userId;
}
private function agregarARotacion($userId) {
// Obtener el siguiente orden disponible
$stmt = $this->db->query("SELECT MAX(orden) as max_orden FROM rotacion_orden WHERE activo = 1");
$result = $stmt->fetch();
$nuevoOrden = ($result['max_orden'] ?? 0) + 1;
// Insertar en rotacion_orden
$stmt = $this->db->prepare("
INSERT INTO rotacion_orden (user_id, orden, activo)
VALUES (?, ?, 1)
");
$stmt->execute([$userId, $nuevoOrden]);
}
public function update($id, $data) {
$sql = "UPDATE users SET username = ?, nombre = ?, email = ?, rol = ?";
$params = [$data['username'] ?? '', $data['nombre'], $data['email'], $data['rol']];
if (!empty($data['password'])) {
$sql .= ", password = ?";
$params[] = password_hash($data['password'], PASSWORD_DEFAULT);
}
$sql .= " WHERE id = ?";
$params[] = $id;
$stmt = $this->db->prepare($sql);
return $stmt->execute($params);
}
public function deactivate($id) {
$stmt = $this->db->prepare("UPDATE users SET activo = 0 WHERE id = ?");
return $stmt->execute([$id]);
}
public function activate($id) {
$stmt = $this->db->prepare("UPDATE users SET activo = 1 WHERE id = ?");
return $stmt->execute([$id]);
}
public function getAyudantesActivos() {
$stmt = $this->db->query("SELECT * FROM users WHERE rol = 'ayudante' AND activo = 1 ORDER BY nombre");
return $stmt->fetchAll();
}
}