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); // El usuario no existe if (!($usuario instanceof Usuario)) { // Limpiamos posibles datos de sesión anteriores unset($_SESSION['idUsuario']); unset($_SESSION['email']); unset($_SESSION['nombreUsuario']); return null; } // Comprobamos la contraseña if (password_verify($contrasena, $usuario->getContrasena())) { // Usuario validado correctamente $_SESSION['idUsuario'] = $usuario->getIdUsuario(); $_SESSION['email'] = $usuario->getEmail(); $_SESSION['nombreUsuario'] = $usuario->getNombreUsuario(); // Devolvemos el usuario como hasta ahora return $usuario; } // Contraseña incorrecta unset($_SESSION['idUsuario']); unset($_SESSION['email']); unset($_SESSION['nombreUsuario']); return null; } }