'Todos los campos son obligatorios' ]); break; } $usuarioExistente = Usuario::buscarPorEmail($email); if ($usuarioExistente instanceof Usuario) { echo json_encode([ 'error' => 'Ya existe una cuenta con ese correo electrónico' ]); break; } $usuario = new Usuario( $nombreUsuario, $contrasena, $email, 'img/avatars/defaultProfile.jpeg' ); $resultado = $usuario->registrar(); echo json_encode($resultado); break; case 'comprobarUsuario': $email = trim($_POST['email'] ?? ''); $contrasena = $_POST['contrasena'] ?? ''; $recuerdame = isset($_POST['recuerdame']) && ($_POST['recuerdame'] === 'true' || $_POST['recuerdame'] === true); $resultado = Usuario::login($email, $contrasena); if ($resultado instanceof Usuario) { // Guardamos la sesión $_SESSION['idUsuario'] = $resultado->getIdUsuario(); $_SESSION['nombreUsuario'] = $resultado->getNombreUsuario(); $_SESSION['email'] = $resultado->getEmail(); $_SESSION['avatar'] = $resultado->getAvatar(); // Si ha marcado "Recuérdame durante 10 días" if ($recuerdame) { $token = bin2hex(random_bytes(32)); // Token único de 64 caracteres $duracion = time() + (10 * 24 * 60 * 60); // 10 días setcookie('recuerdame_token', $token, $duracion, "/"); Usuario::guardarCookieToken($resultado->getIdUsuario(), $token); } else { // Si entra sin marcar recuérdame, limpiamos la cookie if (isset($_COOKIE['recuerdame_token'])) { setcookie('recuerdame_token', '', time() - 3600, "/"); } Usuario::guardarCookieToken($resultado->getIdUsuario(), null); } echo json_encode([ 'exito' => 'Login correcto', 'idUsuario' => $resultado->getIdUsuario(), 'nombreUsuario' => $resultado->getNombreUsuario(), 'avatar' => $resultado->getAvatar() ]); } else { echo json_encode([ 'error' => 'Usuario o contraseña incorrectos' ]); } break; case 'cerrarSesion': // Si el usuario tenía token en la BD, lo eliminamos if (isset($_SESSION['idUsuario'])) { Usuario::guardarCookieToken($_SESSION['idUsuario'], null); } // Borramos la cookie del navegador if (isset($_COOKIE['recuerdame_token'])) { setcookie('recuerdame_token', '', time() - 3600, "/"); } // Limpiamos las variables de sesión unset($_SESSION['idUsuario']); unset($_SESSION['email']); unset($_SESSION['nombreUsuario']); unset($_SESSION['avatar']); // Destruimos la sesión session_destroy(); echo json_encode([ 'exito' => 'Sesión cerrada' ]); break; case 'mostrarEstadisticas': $usuario = Usuario::buscarPorId($_SESSION['idUsuario']); if ($usuario instanceof Usuario) { echo json_encode([ 'victorias' => $usuario->getVictorias(), 'derrotas' => $usuario->getDerrotas(), 'aciertos' => $usuario->getAciertos() ]); } else { echo json_encode($usuario); } break; case 'cambiarNombre': if (!isset($_SESSION['idUsuario'])) { echo json_encode([ 'error' => 'No hay ningún usuario conectado.' ]); break; } $nuevoNombre = trim($_POST['nombreUsuario'] ?? ''); if ($nuevoNombre === '') { echo json_encode([ 'error' => 'El nombre no puede estar vacío.' ]); break; } $usuario = Usuario::buscarPorId($_SESSION['idUsuario']); if (!($usuario instanceof Usuario)) { echo json_encode([ 'error' => 'No se encontró el usuario.' ]); break; } $resultado = $usuario->cambiarNombre($nuevoNombre); if (isset($resultado['error'])) { echo json_encode($resultado); } else { // Actualizamos también la sesión $_SESSION['nombreUsuario'] = $nuevoNombre; echo json_encode([ 'exito' => 'Nombre actualizado correctamente.', 'nombreUsuario' => $nuevoNombre ]); } break; case 'cambiarAvatar': if (!isset($_SESSION['idUsuario'])) { echo json_encode([ 'error' => 'No hay ningún usuario conectado.' ]); break; } if (!isset($_FILES['avatar']) || $_FILES['avatar']['error'] !== UPLOAD_ERR_OK) { echo json_encode([ 'error' => 'No se ha recibido ninguna imagen.' ]); break; } $archivo = $_FILES['avatar']; $tipo = mime_content_type($archivo['tmp_name']); $tiposPermitidos = [ 'image/jpeg', 'image/png', 'image/gif', 'image/webp' ]; if (!in_array($tipo, $tiposPermitidos)) { echo json_encode([ 'error' => 'El formato de imagen no es válido.' ]); break; } $usuario = Usuario::buscarPorId($_SESSION['idUsuario']); if (!($usuario instanceof Usuario)) { echo json_encode([ 'error' => 'No se encontró el usuario.' ]); break; } $resultado = $usuario->cambiarAvatar($archivo); if (isset($resultado['error'])) { echo json_encode($resultado); } else { // Actualizamos también la sesión $_SESSION['avatar'] = $resultado['avatar']; echo json_encode($resultado); } break; case 'obtenerRanking': $ranking = Usuario::obtenerRanking(5); //Cambiar para mostrar X jugadores en index echo json_encode([ 'exito' => true, 'ranking' => $ranking ]); break; case 'comprobarSesion': //Si hay sesión: if (isset($_SESSION['idUsuario']) && !empty($_SESSION['idUsuario'])) { echo json_encode([ 'activa' => true, 'usuario' => [ 'idUsuario' => $_SESSION['idUsuario'], 'nombreUsuario' => $_SESSION['nombreUsuario'] ?? '', 'avatar' => $_SESSION['avatar'] ?? '' ] ]); break; } // Si no hay sesión, comprobamos si hay cookie: if (isset($_COOKIE['recuerdame_token'])) { $usuarioCookie = Usuario::buscarPorCookie($_COOKIE['recuerdame_token']); if ($usuarioCookie instanceof Usuario) { $_SESSION['idUsuario'] = $usuarioCookie->getIdUsuario(); $_SESSION['email'] = $usuarioCookie->getEmail(); $_SESSION['nombreUsuario'] = $usuarioCookie->getNombreUsuario(); $_SESSION['avatar'] = $usuarioCookie->getAvatar(); echo json_encode([ 'activa' => true, 'usuario' => [ 'idUsuario' => $usuarioCookie->getIdUsuario(), 'nombreUsuario' => $usuarioCookie->getNombreUsuario(), 'avatar' => $usuarioCookie->getAvatar() ] ]); break; } } //No hay sesión ni hay cookie: echo json_encode(['activa' => false]); break; }