Primer subida completa
This commit is contained in:
128
src/User.php
Executable file
128
src/User.php
Executable file
@@ -0,0 +1,128 @@
|
||||
<?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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user