195 lines
6.5 KiB
PHP
195 lines
6.5 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../includes/conexionBD.php';
|
|
|
|
class Usuario {
|
|
private ?int $idUsuario;
|
|
private string $nombreUsuario;
|
|
private string $contrasena;
|
|
private string $email;
|
|
private ?string $avatar;
|
|
private ?string $cookie;
|
|
private int $aciertos;
|
|
private int $victorias;
|
|
private int $derrotas;
|
|
|
|
public function __construct(
|
|
string $nombreUsuario = "",
|
|
string $contrasena = "",
|
|
string $email = "",
|
|
?string $avatar = null,
|
|
?string $cookie = null,
|
|
int $aciertos = 0,
|
|
int $victorias = 0,
|
|
int $derrotas = 0,
|
|
?int $idUsuario = null
|
|
) {
|
|
$this->idUsuario = $idUsuario;
|
|
$this->nombreUsuario = $nombreUsuario;
|
|
$this->contrasena = $contrasena;
|
|
$this->email = $email;
|
|
$this->avatar = $avatar;
|
|
$this->cookie = $cookie;
|
|
$this->aciertos = $aciertos;
|
|
$this->victorias = $victorias;
|
|
$this->derrotas = $derrotas;
|
|
}
|
|
|
|
public function getIdUsuario(): ?int { return $this->idUsuario; }
|
|
|
|
public function getNombreUsuario(): string { return $this->nombreUsuario; }
|
|
public function setNombreUsuario(string $nombreUsuario): void { $this->nombreUsuario = $nombreUsuario; }
|
|
|
|
public function getContrasena(): string { return $this->contrasena; }
|
|
public function setContrasena(string $contrasena): void { $this->contrasena = $contrasena; }
|
|
|
|
public function getEmail(): string { return $this->email; }
|
|
public function setEmail(string $email): void { $this->email = $email; }
|
|
|
|
public function getAvatar(): ?string { return $this->avatar; }
|
|
public function setAvatar(?string $avatar): void { $this->avatar = $avatar; }
|
|
|
|
public function getCookie(): ?string { return $this->cookie; }
|
|
public function setCookie(?string $cookie): void { $this->cookie = $cookie; }
|
|
|
|
public function getAciertos(): int { return $this->aciertos; }
|
|
public function setAciertos(int $aciertos): void { $this->aciertos = $aciertos; }
|
|
|
|
public function getVictorias(): int { return $this->victorias; }
|
|
public function setVictorias(int $victorias): void { $this->victorias = $victorias; }
|
|
|
|
public function getDerrotas(): int { return $this->derrotas; }
|
|
public function setDerrotas(int $derrotas): void { $this->derrotas = $derrotas; }
|
|
|
|
public function registrar() {
|
|
$conexion = conexionBD();
|
|
|
|
if (is_array($conexion)) {
|
|
return $conexion;
|
|
}
|
|
|
|
try {
|
|
$sql = "INSERT INTO usuario (nombreUsuario, contrasena, email, avatar, cookie, aciertos, victorias, derrotas)
|
|
VALUES (:nombre, :pass, :email, :avatar, :cookie, :aciertos, :victorias, :derrotas)";
|
|
$stmt = $conexion->prepare($sql);
|
|
|
|
$passHash = password_hash($this->contrasena, PASSWORD_BCRYPT);
|
|
|
|
$stmt->execute([
|
|
':nombre' => $this->nombreUsuario,
|
|
':pass' => $passHash,
|
|
':email' => $this->email,
|
|
':avatar' => $this->avatar,
|
|
':cookie' => $this->cookie,
|
|
':aciertos' => $this->aciertos,
|
|
':victorias' => $this->victorias,
|
|
':derrotas' => $this->derrotas
|
|
]);
|
|
|
|
$this->idUsuario = (int)$conexion->lastInsertId();
|
|
|
|
return [
|
|
'exito' => 'Usuario registrado correctamente',
|
|
'exito_tecnico' => $this->idUsuario
|
|
];
|
|
|
|
} catch (PDOException $error) {
|
|
return [
|
|
'error' => 'Ocurrió un error al registrar el usuario.',
|
|
'error_tecnico' => $error->getMessage()
|
|
];
|
|
}
|
|
}
|
|
|
|
public static function buscarPorId($id) {
|
|
$conexion = conexionBD();
|
|
|
|
if (is_array($conexion)) {
|
|
return $conexion;
|
|
}
|
|
|
|
try {
|
|
$sql = "SELECT * FROM usuario WHERE idUsuario = :id";
|
|
$stmt = $conexion->prepare($sql);
|
|
$stmt->execute([':id' => $id]);
|
|
|
|
$datos = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if ($datos) {
|
|
return new Usuario(
|
|
$datos['nombreUsuario'],
|
|
$datos['contrasena'],
|
|
$datos['email'],
|
|
$datos['avatar'],
|
|
$datos['cookie'],
|
|
(int)$datos['aciertos'],
|
|
(int)$datos['victorias'],
|
|
(int)$datos['derrotas'],
|
|
(int)$datos['idUsuario']
|
|
);
|
|
}
|
|
|
|
return [
|
|
'error' => 'No se encontró ningún usuario con ese ID.'
|
|
];
|
|
|
|
} catch (PDOException $error) {
|
|
return [
|
|
'error' => 'Ocurrió un error al buscar el usuario.',
|
|
'error_tecnico' => $error->getMessage()
|
|
];
|
|
}
|
|
}
|
|
|
|
public static function buscarPorEmail($email) {
|
|
$conexion = conexionBD();
|
|
|
|
if (is_array($conexion)) {
|
|
return $conexion;
|
|
}
|
|
|
|
try {
|
|
$sql = "SELECT * FROM usuario WHERE email = :email";
|
|
$stmt = $conexion->prepare($sql);
|
|
$stmt->execute([':email' => $email]);
|
|
|
|
$datos = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if ($datos) {
|
|
return new Usuario(
|
|
$datos['nombreUsuario'],
|
|
$datos['contrasena'],
|
|
$datos['email'],
|
|
$datos['avatar'],
|
|
$datos['cookie'],
|
|
(int)$datos['aciertos'],
|
|
(int)$datos['victorias'],
|
|
(int)$datos['derrotas'],
|
|
(int)$datos['idUsuario']
|
|
);
|
|
}
|
|
|
|
return null; // No existe usuario con ese email
|
|
|
|
} catch (PDOException $error) {
|
|
return [
|
|
'error' => 'Ocurrió un error al buscar el usuario por email.',
|
|
'error_tecnico' => $error->getMessage()
|
|
];
|
|
}
|
|
}
|
|
|
|
public static function login($email, $contrasena) {
|
|
$usuario = self::buscarPorEmail($email);
|
|
|
|
if (!($usuario instanceof Usuario)) {
|
|
return null;
|
|
}
|
|
|
|
if (password_verify($contrasena, $usuario->getContrasena())) {
|
|
return $usuario;
|
|
}
|
|
|
|
return null; // Contraseña incorrecta
|
|
}
|
|
}
|