129 lines
4.1 KiB
PHP
Executable File
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();
|
|
}
|
|
}
|