From 98b383d16fa6d1e6b832881a032017dded2cdaad Mon Sep 17 00:00:00 2001 From: profesor Date: Wed, 30 Sep 2026 09:08:23 +0200 Subject: [PATCH] Renombrar clases y controladores --- ...{ClaseCategoria.php => claseCategoria.php} | 0 clases/{ClaseEquipo.php => claseEquipo.php} | 0 ...poxPartida.php => claseEquipoxPartida.php} | 0 ...poxUsuario.php => claseEquipoxUsuario.php} | 538 ++-- clases/{ClaseJuego.php => claseJuego.php} | 0 clases/{ClasePartida.php => clasePartida.php} | 0 .../{ClasePregunta.php => clasePregunta.php} | 262 +- ...{ClaseRespuesta.php => claseRespuesta.php} | 0 ...enada.php => claseRespuestaAlmacenada.php} | 152 +- clases/{ClaseUsuario.php => claseUsuario.php} | 946 +++---- ...Categoria.php => controladorCategoria.php} | 110 +- ...oladorEquipo.php => controladorEquipo.php} | 108 +- ...ario.php => controladorEquipoxUsuario.php} | 0 ...troladorJuego.php => controladorJuego.php} | 0 ...adorPartida.php => controladorPartida.php} | 2298 ++++++++--------- ...orPregunta.php => controladorPregunta.php} | 306 +-- ...Respuesta.php => controladorRespuesta.php} | 142 +- ...php => controladorRespuestaAlmacenada.php} | 128 +- ...adorUsuario.php => controladorUsuario.php} | 0 19 files changed, 2495 insertions(+), 2495 deletions(-) rename clases/{ClaseCategoria.php => claseCategoria.php} (100%) rename clases/{ClaseEquipo.php => claseEquipo.php} (100%) rename clases/{ClaseEquipoxPartida.php => claseEquipoxPartida.php} (100%) rename clases/{ClaseEquipoxUsuario.php => claseEquipoxUsuario.php} (97%) rename clases/{ClaseJuego.php => claseJuego.php} (100%) rename clases/{ClasePartida.php => clasePartida.php} (100%) rename clases/{ClasePregunta.php => clasePregunta.php} (97%) rename clases/{ClaseRespuesta.php => claseRespuesta.php} (100%) rename clases/{ClaseRespuestaAlmacenada.php => claseRespuestaAlmacenada.php} (97%) rename clases/{ClaseUsuario.php => claseUsuario.php} (96%) rename controladores/{ControladorCategoria.php => controladorCategoria.php} (95%) rename controladores/{ControladorEquipo.php => controladorEquipo.php} (95%) rename controladores/{ControladorEquipoxUsuario.php => controladorEquipoxUsuario.php} (100%) rename controladores/{ControladorJuego.php => controladorJuego.php} (100%) rename controladores/{ControladorPartida.php => controladorPartida.php} (94%) rename controladores/{ControladorPregunta.php => controladorPregunta.php} (96%) rename controladores/{ControladorRespuesta.php => controladorRespuesta.php} (96%) rename controladores/{ControladorRespuestaAlmacenada.php => controladorRespuestaAlmacenada.php} (95%) rename controladores/{ControladorUsuario.php => controladorUsuario.php} (100%) diff --git a/clases/ClaseCategoria.php b/clases/claseCategoria.php similarity index 100% rename from clases/ClaseCategoria.php rename to clases/claseCategoria.php diff --git a/clases/ClaseEquipo.php b/clases/claseEquipo.php similarity index 100% rename from clases/ClaseEquipo.php rename to clases/claseEquipo.php diff --git a/clases/ClaseEquipoxPartida.php b/clases/claseEquipoxPartida.php similarity index 100% rename from clases/ClaseEquipoxPartida.php rename to clases/claseEquipoxPartida.php diff --git a/clases/ClaseEquipoxUsuario.php b/clases/claseEquipoxUsuario.php similarity index 97% rename from clases/ClaseEquipoxUsuario.php rename to clases/claseEquipoxUsuario.php index d419265..02821e5 100644 --- a/clases/ClaseEquipoxUsuario.php +++ b/clases/claseEquipoxUsuario.php @@ -1,269 +1,269 @@ -idEquipoxUsuario = $idEquipoxUsuario; - $this->idUsuario = $idUsuario; - $this->idEquipo = $idEquipo; - } - - public function registrarUsuarioEnEquipo() - { - $conexion = conexionBD(); - if (is_array($conexion)) return $conexion; - - try { - $sql = "INSERT INTO equipoxusuario (idUsuario, idEquipo) VALUES (:idUsuario, :idEquipo)"; - $consulta = $conexion->prepare($sql); - $consulta->bindParam(':idUsuario', $this->idUsuario); - $consulta->bindParam(':idEquipo', $this->idEquipo); - $consulta->execute(); - - return [ - 'exito' => 'Usuario vinculado al equipo correctamente.', - 'exito_tecnico' => $conexion->lastInsertId() - ]; - } catch (PDOException $error) { - return [ - 'error' => 'Ocurrió un error al unir al usuario con el equipo.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - public static function listarUsuariosPorEquipo($idEquipo) - { - $conexion = conexionBD(); - if (is_array($conexion)) return $conexion; - - try { - $sql = "SELECT u.* FROM equipoxusuario exu - INNER JOIN usuario u ON exu.idUsuario = u.idUsuario - WHERE exu.idEquipo = :idEquipo"; - $consulta = $conexion->prepare($sql); - $consulta->bindParam(':idEquipo', $idEquipo); - $consulta->execute(); - - return $consulta->fetchAll(PDO::FETCH_ASSOC); - } catch (PDOException $error) { - return [ - 'error' => 'Ocurrió un error al obtener los miembros del equipo.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - public function obtenerSalaUsuario($idUsuario) - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $sql = " - SELECT - exu.idEquipo, - exp.idPartida - FROM equipoxusuario exu - - INNER JOIN equipoxpartida exp - ON exu.idEquipo = exp.idEquipo - - WHERE exu.idUsuario = :idUsuario - - LIMIT 1 - "; - - $consulta = $conexion->prepare($sql); - - $consulta->bindParam( - ':idUsuario', - $idUsuario, - PDO::PARAM_INT - ); - - $consulta->execute(); - - $resultado = $consulta->fetch(PDO::FETCH_ASSOC); - - if (!$resultado) { - - return [ - 'asociado' => false - ]; - } - - return [ - 'asociado' => true, - 'idEquipo' => $resultado['idEquipo'], - 'idPartida' => $resultado['idPartida'] - ]; - } catch (PDOException $error) { - - return [ - 'error' => 'Ocurrió un error al obtener la sala del usuario.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - public static function salirDeSala($idUsuario) - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - // 1. Averiguamos el equipo y la partida del usuario - $sql = "SELECT exu.idEquipo, exp.idPartida, p.idUsuario AS idHost FROM equipoxusuario exu INNER JOIN equipoxpartida exp ON exu.idEquipo = exp.idEquipo INNER JOIN partida p ON exp.idPartida = p.idPartida WHERE exu.idUsuario = :idUsuario LIMIT 1"; - - $consulta = $conexion->prepare($sql); - $consulta->bindParam(':idUsuario',$idUsuario, PDO::PARAM_INT); - $consulta->execute(); - - $datosSala = $consulta->fetch(PDO::FETCH_ASSOC); - - // El usuario no pertenece a ninguna sala - if (!$datosSala) { - return [ - 'error' => 'No perteneces a ninguna sala.' - ]; - } - - $idEquipo = (int)$datosSala['idEquipo']; - $idPartida = (int)$datosSala['idPartida']; - $idHost = (int)$datosSala['idHost']; - - // Comenzamos una transacción - $conexion->beginTransaction(); - - /* - * 2. Comprobamos si quien abandona es el HOST - */ - if ($idUsuario === $idHost) { - - /* - * Obtenemos todos los equipos pertenecientes - * a esta partida. - */ - $sqlEquipos = "SELECT idEquipo FROM equipoxpartida WHERE idPartida = :idPartida"; - - $consultaEquipos = $conexion->prepare($sqlEquipos); - $consultaEquipos->bindParam(':idPartida', $idPartida, PDO::PARAM_INT); - $consultaEquipos->execute(); - - $equipos = $consultaEquipos->fetchAll(PDO::FETCH_COLUMN); - - /* - * 3. Eliminamos los jugadores de esos equipos - * de la tabla equipoxusuario. - */ - if (!empty($equipos)) { - - $placeholders = implode(',', array_fill(0, count($equipos), '?')); - - $sqlUsuarios = "DELETE FROM equipoxusuario WHERE idEquipo IN ($placeholders)"; - - $consultaUsuarios = $conexion->prepare($sqlUsuarios); - $consultaUsuarios->execute($equipos); - } - - /* - * 4. Eliminamos las relaciones - * entre equipos y partida. - */ - $sqlEquipoxPartida = "DELETE FROM equipoxpartida WHERE idPartida = :idPartida"; - - $consultaEquipoxPartida = $conexion->prepare($sqlEquipoxPartida); - $consultaEquipoxPartida->bindParam(':idPartida', $idPartida,PDO::PARAM_INT); - $consultaEquipoxPartida->execute(); - - /* - * 5. Eliminamos los equipos. - * - * Los equipos ya no tienen relaciones con - * usuarios ni con la partida. - */ - if (!empty($equipos)) { - - $placeholders = implode(',', array_fill(0, count($equipos), '?')); - - $sqlEliminarEquipos = "DELETE FROM equipo WHERE idEquipo IN ($placeholders)"; - $consultaEliminarEquipos = $conexion->prepare($sqlEliminarEquipos); - $consultaEliminarEquipos->execute($equipos); - } - - /* - * 6. Eliminamos las relaciones - * entre preguntas y partida. - */ - $sqlPartidaxPregunta = "DELETE FROM partidaxpregunta WHERE idPartida = :idPartida"; - - $consultaPartidaxPregunta = $conexion->prepare($sqlPartidaxPregunta); - $consultaPartidaxPregunta->bindParam(':idPartida', $idPartida, PDO::PARAM_INT); - $consultaPartidaxPregunta->execute(); - - /* - * 7. Finalmente eliminamos la partida. - */ - $sqlPartida = "DELETE FROM partida WHERE idPartida = :idPartida"; - - $consultaPartida = $conexion->prepare($sqlPartida); - $consultaPartida->bindParam(':idPartida', $idPartida, PDO::PARAM_INT); - $consultaPartida->execute(); - - // Todo ha ido correctamente - $conexion->commit(); - - return [ - 'exito' => true, - 'salaEliminada' => true, - 'mensaje' => 'La sala ha sido eliminada correctamente.' - ]; - } - - /* - * 7. Si NO es el host, simplemente abandona - * su relación con el equipo. - */ - $sqlSalir = "DELETE FROM equipoxusuario WHERE idUsuario = :idUsuario"; - - $consultaSalir = $conexion->prepare($sqlSalir); - $consultaSalir->bindParam(':idUsuario', $idUsuario, PDO::PARAM_INT); - $consultaSalir->execute(); - - $conexion->commit(); - - return [ - 'exito' => true, - 'salaEliminada' => false, - 'mensaje' => 'Has abandonado la sala correctamente.' - ]; - } catch (PDOException $error) { - - // Si había una transacción activa, la deshacemos - if ($conexion->inTransaction()) { - $conexion->rollBack(); - } - - return [ - 'error' => 'Ocurrió un error al abandonar la sala.', - 'error_tecnico' => $error->getMessage() - ]; - } - } -} +idEquipoxUsuario = $idEquipoxUsuario; + $this->idUsuario = $idUsuario; + $this->idEquipo = $idEquipo; + } + + public function registrarUsuarioEnEquipo() + { + $conexion = conexionBD(); + if (is_array($conexion)) return $conexion; + + try { + $sql = "INSERT INTO equipoxusuario (idUsuario, idEquipo) VALUES (:idUsuario, :idEquipo)"; + $consulta = $conexion->prepare($sql); + $consulta->bindParam(':idUsuario', $this->idUsuario); + $consulta->bindParam(':idEquipo', $this->idEquipo); + $consulta->execute(); + + return [ + 'exito' => 'Usuario vinculado al equipo correctamente.', + 'exito_tecnico' => $conexion->lastInsertId() + ]; + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al unir al usuario con el equipo.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + public static function listarUsuariosPorEquipo($idEquipo) + { + $conexion = conexionBD(); + if (is_array($conexion)) return $conexion; + + try { + $sql = "SELECT u.* FROM equipoxusuario exu + INNER JOIN usuario u ON exu.idUsuario = u.idUsuario + WHERE exu.idEquipo = :idEquipo"; + $consulta = $conexion->prepare($sql); + $consulta->bindParam(':idEquipo', $idEquipo); + $consulta->execute(); + + return $consulta->fetchAll(PDO::FETCH_ASSOC); + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al obtener los miembros del equipo.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + public function obtenerSalaUsuario($idUsuario) + { + $conexion = conexionBD(); + + if (is_array($conexion)) { + return $conexion; + } + + try { + + $sql = " + SELECT + exu.idEquipo, + exp.idPartida + FROM equipoxusuario exu + + INNER JOIN equipoxpartida exp + ON exu.idEquipo = exp.idEquipo + + WHERE exu.idUsuario = :idUsuario + + LIMIT 1 + "; + + $consulta = $conexion->prepare($sql); + + $consulta->bindParam( + ':idUsuario', + $idUsuario, + PDO::PARAM_INT + ); + + $consulta->execute(); + + $resultado = $consulta->fetch(PDO::FETCH_ASSOC); + + if (!$resultado) { + + return [ + 'asociado' => false + ]; + } + + return [ + 'asociado' => true, + 'idEquipo' => $resultado['idEquipo'], + 'idPartida' => $resultado['idPartida'] + ]; + } catch (PDOException $error) { + + return [ + 'error' => 'Ocurrió un error al obtener la sala del usuario.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + public static function salirDeSala($idUsuario) + { + $conexion = conexionBD(); + + if (is_array($conexion)) { + return $conexion; + } + + try { + + // 1. Averiguamos el equipo y la partida del usuario + $sql = "SELECT exu.idEquipo, exp.idPartida, p.idUsuario AS idHost FROM equipoxusuario exu INNER JOIN equipoxpartida exp ON exu.idEquipo = exp.idEquipo INNER JOIN partida p ON exp.idPartida = p.idPartida WHERE exu.idUsuario = :idUsuario LIMIT 1"; + + $consulta = $conexion->prepare($sql); + $consulta->bindParam(':idUsuario',$idUsuario, PDO::PARAM_INT); + $consulta->execute(); + + $datosSala = $consulta->fetch(PDO::FETCH_ASSOC); + + // El usuario no pertenece a ninguna sala + if (!$datosSala) { + return [ + 'error' => 'No perteneces a ninguna sala.' + ]; + } + + $idEquipo = (int)$datosSala['idEquipo']; + $idPartida = (int)$datosSala['idPartida']; + $idHost = (int)$datosSala['idHost']; + + // Comenzamos una transacción + $conexion->beginTransaction(); + + /* + * 2. Comprobamos si quien abandona es el HOST + */ + if ($idUsuario === $idHost) { + + /* + * Obtenemos todos los equipos pertenecientes + * a esta partida. + */ + $sqlEquipos = "SELECT idEquipo FROM equipoxpartida WHERE idPartida = :idPartida"; + + $consultaEquipos = $conexion->prepare($sqlEquipos); + $consultaEquipos->bindParam(':idPartida', $idPartida, PDO::PARAM_INT); + $consultaEquipos->execute(); + + $equipos = $consultaEquipos->fetchAll(PDO::FETCH_COLUMN); + + /* + * 3. Eliminamos los jugadores de esos equipos + * de la tabla equipoxusuario. + */ + if (!empty($equipos)) { + + $placeholders = implode(',', array_fill(0, count($equipos), '?')); + + $sqlUsuarios = "DELETE FROM equipoxusuario WHERE idEquipo IN ($placeholders)"; + + $consultaUsuarios = $conexion->prepare($sqlUsuarios); + $consultaUsuarios->execute($equipos); + } + + /* + * 4. Eliminamos las relaciones + * entre equipos y partida. + */ + $sqlEquipoxPartida = "DELETE FROM equipoxpartida WHERE idPartida = :idPartida"; + + $consultaEquipoxPartida = $conexion->prepare($sqlEquipoxPartida); + $consultaEquipoxPartida->bindParam(':idPartida', $idPartida,PDO::PARAM_INT); + $consultaEquipoxPartida->execute(); + + /* + * 5. Eliminamos los equipos. + * + * Los equipos ya no tienen relaciones con + * usuarios ni con la partida. + */ + if (!empty($equipos)) { + + $placeholders = implode(',', array_fill(0, count($equipos), '?')); + + $sqlEliminarEquipos = "DELETE FROM equipo WHERE idEquipo IN ($placeholders)"; + $consultaEliminarEquipos = $conexion->prepare($sqlEliminarEquipos); + $consultaEliminarEquipos->execute($equipos); + } + + /* + * 6. Eliminamos las relaciones + * entre preguntas y partida. + */ + $sqlPartidaxPregunta = "DELETE FROM partidaxpregunta WHERE idPartida = :idPartida"; + + $consultaPartidaxPregunta = $conexion->prepare($sqlPartidaxPregunta); + $consultaPartidaxPregunta->bindParam(':idPartida', $idPartida, PDO::PARAM_INT); + $consultaPartidaxPregunta->execute(); + + /* + * 7. Finalmente eliminamos la partida. + */ + $sqlPartida = "DELETE FROM partida WHERE idPartida = :idPartida"; + + $consultaPartida = $conexion->prepare($sqlPartida); + $consultaPartida->bindParam(':idPartida', $idPartida, PDO::PARAM_INT); + $consultaPartida->execute(); + + // Todo ha ido correctamente + $conexion->commit(); + + return [ + 'exito' => true, + 'salaEliminada' => true, + 'mensaje' => 'La sala ha sido eliminada correctamente.' + ]; + } + + /* + * 7. Si NO es el host, simplemente abandona + * su relación con el equipo. + */ + $sqlSalir = "DELETE FROM equipoxusuario WHERE idUsuario = :idUsuario"; + + $consultaSalir = $conexion->prepare($sqlSalir); + $consultaSalir->bindParam(':idUsuario', $idUsuario, PDO::PARAM_INT); + $consultaSalir->execute(); + + $conexion->commit(); + + return [ + 'exito' => true, + 'salaEliminada' => false, + 'mensaje' => 'Has abandonado la sala correctamente.' + ]; + } catch (PDOException $error) { + + // Si había una transacción activa, la deshacemos + if ($conexion->inTransaction()) { + $conexion->rollBack(); + } + + return [ + 'error' => 'Ocurrió un error al abandonar la sala.', + 'error_tecnico' => $error->getMessage() + ]; + } + } +} diff --git a/clases/ClaseJuego.php b/clases/claseJuego.php similarity index 100% rename from clases/ClaseJuego.php rename to clases/claseJuego.php diff --git a/clases/ClasePartida.php b/clases/clasePartida.php similarity index 100% rename from clases/ClasePartida.php rename to clases/clasePartida.php diff --git a/clases/ClasePregunta.php b/clases/clasePregunta.php similarity index 97% rename from clases/ClasePregunta.php rename to clases/clasePregunta.php index 6fca2d6..823c733 100644 --- a/clases/ClasePregunta.php +++ b/clases/clasePregunta.php @@ -1,132 +1,132 @@ - -idPregunta = $idPregunta; - $this->idCategoria = $idCategoria; - $this->nombrePregunta = $nombrePregunta; - $this->respuestas = []; - } - - public function getIdPregunta(): ?int { return $this->idPregunta; } - - public function getIdCategoria(): int { return $this->idCategoria; } - public function setIdCategoria(int $idCategoria): void { $this->idCategoria = $idCategoria; } - - public function getNombrePregunta(): string { return $this->nombrePregunta; } - public function setNombrePregunta(string $nombrePregunta): void { $this->nombrePregunta = $nombrePregunta; } - - public function getRespuestas(): array { return $this->respuestas; } - - public function guardar() { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - $sql = "INSERT INTO pregunta (idCategoria, nombrePregunta) VALUES (:idCat, :texto)"; - $stmt = $conexion->prepare($sql); - - $stmt->execute([ - ':idCat' => $this->idCategoria, - ':texto' => $this->nombrePregunta - ]); - - $this->idPregunta = (int)$conexion->lastInsertId(); - - return [ - 'exito' => 'Pregunta guardada correctamente', - 'exito_tecnico' => $this->idPregunta - ]; - - } catch (PDOException $error) { - return [ - 'error' => 'Ocurrió un error al guardar la pregunta.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - public function cargarRespuestas() { - if ($this->idPregunta === null) return; - - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - $sql = "SELECT idRespuesta, nombreRespuesta, correcta FROM respuesta WHERE idPregunta = :idPreg"; - $stmt = $conexion->prepare($sql); - $stmt->execute([':idPreg' => $this->idPregunta]); - - $this->respuestas = $stmt->fetchAll(PDO::FETCH_ASSOC); - - } catch (PDOException $error) { - return [ - 'error' => 'Ocurrió un error al cargar las respuestas.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - public static function obtenerPorCategoria(int $idCategoria, int $limite = 10) { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - $sql = "SELECT * FROM pregunta WHERE idCategoria = :idCat ORDER BY RAND() LIMIT :limite"; - $stmt = $conexion->prepare($sql); - - $stmt->bindValue(':idCat', $idCategoria, PDO::PARAM_INT); - $stmt->bindValue(':limite', $limite, PDO::PARAM_INT); - $stmt->execute(); - - $preguntas = []; - while ($datos = $stmt->fetch(PDO::FETCH_ASSOC)) { - $preg = new Pregunta((int)$datos['idCategoria'], $datos['nombrePregunta'], (int)$datos['idPregunta']); - $preg->cargarRespuestas(); - $preguntas[] = $preg; - } - return $preguntas; - - } catch (PDOException $error) { - return [ - 'error' => 'Ocurrió un error al obtener las preguntas aleatorias.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - public static function getTodosIds()//devuelve solamente los id de todas las preguntas - { - $conexion = conexionBD(); - if (is_array($conexion)) { - return $conexion; - } - try { - $consulta = $conexion->prepare("SELECT idPregunta FROM pregunta"); - $consulta->execute(); - return $consulta->fetchAll(PDO::FETCH_COLUMN); - } catch (PDOException $error) { - return [ - "error" => "Ocurrió un error al obtener el listado.", - 'error_tecnico' => $error->getMessage() - ]; - } - } + +idPregunta = $idPregunta; + $this->idCategoria = $idCategoria; + $this->nombrePregunta = $nombrePregunta; + $this->respuestas = []; + } + + public function getIdPregunta(): ?int { return $this->idPregunta; } + + public function getIdCategoria(): int { return $this->idCategoria; } + public function setIdCategoria(int $idCategoria): void { $this->idCategoria = $idCategoria; } + + public function getNombrePregunta(): string { return $this->nombrePregunta; } + public function setNombrePregunta(string $nombrePregunta): void { $this->nombrePregunta = $nombrePregunta; } + + public function getRespuestas(): array { return $this->respuestas; } + + public function guardar() { + $conexion = conexionBD(); + + if (is_array($conexion)) { + return $conexion; + } + + try { + $sql = "INSERT INTO pregunta (idCategoria, nombrePregunta) VALUES (:idCat, :texto)"; + $stmt = $conexion->prepare($sql); + + $stmt->execute([ + ':idCat' => $this->idCategoria, + ':texto' => $this->nombrePregunta + ]); + + $this->idPregunta = (int)$conexion->lastInsertId(); + + return [ + 'exito' => 'Pregunta guardada correctamente', + 'exito_tecnico' => $this->idPregunta + ]; + + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al guardar la pregunta.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + public function cargarRespuestas() { + if ($this->idPregunta === null) return; + + $conexion = conexionBD(); + + if (is_array($conexion)) { + return $conexion; + } + + try { + $sql = "SELECT idRespuesta, nombreRespuesta, correcta FROM respuesta WHERE idPregunta = :idPreg"; + $stmt = $conexion->prepare($sql); + $stmt->execute([':idPreg' => $this->idPregunta]); + + $this->respuestas = $stmt->fetchAll(PDO::FETCH_ASSOC); + + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al cargar las respuestas.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + public static function obtenerPorCategoria(int $idCategoria, int $limite = 10) { + $conexion = conexionBD(); + + if (is_array($conexion)) { + return $conexion; + } + + try { + $sql = "SELECT * FROM pregunta WHERE idCategoria = :idCat ORDER BY RAND() LIMIT :limite"; + $stmt = $conexion->prepare($sql); + + $stmt->bindValue(':idCat', $idCategoria, PDO::PARAM_INT); + $stmt->bindValue(':limite', $limite, PDO::PARAM_INT); + $stmt->execute(); + + $preguntas = []; + while ($datos = $stmt->fetch(PDO::FETCH_ASSOC)) { + $preg = new Pregunta((int)$datos['idCategoria'], $datos['nombrePregunta'], (int)$datos['idPregunta']); + $preg->cargarRespuestas(); + $preguntas[] = $preg; + } + return $preguntas; + + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al obtener las preguntas aleatorias.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + public static function getTodosIds()//devuelve solamente los id de todas las preguntas + { + $conexion = conexionBD(); + if (is_array($conexion)) { + return $conexion; + } + try { + $consulta = $conexion->prepare("SELECT idPregunta FROM pregunta"); + $consulta->execute(); + return $consulta->fetchAll(PDO::FETCH_COLUMN); + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al obtener el listado.", + 'error_tecnico' => $error->getMessage() + ]; + } + } } \ No newline at end of file diff --git a/clases/ClaseRespuesta.php b/clases/claseRespuesta.php similarity index 100% rename from clases/ClaseRespuesta.php rename to clases/claseRespuesta.php diff --git a/clases/ClaseRespuestaAlmacenada.php b/clases/claseRespuestaAlmacenada.php similarity index 97% rename from clases/ClaseRespuestaAlmacenada.php rename to clases/claseRespuestaAlmacenada.php index 8aa61a1..52c214a 100644 --- a/clases/ClaseRespuestaAlmacenada.php +++ b/clases/claseRespuestaAlmacenada.php @@ -1,76 +1,76 @@ -idRespuestaAlmacenada = $idRespuestaAlmacenada; - $this->idPartidaxPregunta = $idPartidaxPregunta; - $this->idUsuario = $idUsuario; - $this->idRespuesta = $idRespuesta; - } - - /** - * Guarda la respuesta que ha seleccionado un usuario en una pregunta de la partida. - */ - public function guardarRespuesta() { - $conexion = conexionBD(); - if (is_array($conexion)) return $conexion; - - try { - $sql = "INSERT INTO respuestaalmacenada (idPartidaxPregunta, idUsuario, idRespuesta) - VALUES (:idPartidaxPregunta, :idUsuario, :idRespuesta)"; - $consulta = $conexion->prepare($sql); - - $consulta->bindParam(':idPartidaxPregunta', $this->idPartidaxPregunta); - $consulta->bindParam(':idUsuario', $this->idUsuario); - $consulta->bindParam(':idRespuesta', $this->idRespuesta); - $consulta->execute(); - - return [ - 'exito' => 'Respuesta del usuario almacenada correctamente.', - 'exito_tecnico' => $conexion->lastInsertId() - ]; - } catch (PDOException $error) { - return [ - 'error' => 'Ocurrió un error al guardar la respuesta del jugador.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - /** - * Obtiene los aciertos totales de un usuario en una partida específica. - * Útil para calcular las estadísticas individuales al terminar el juego. - */ - public static function obtenerAciertosUsuarioEnPartida($idPartida, $idUsuario) { - $conexion = conexionBD(); - if (is_array($conexion)) return $conexion; - - try { - $sql = "SELECT COUNT(*) AS aciertos - FROM respuestaalmacenada ra - INNER JOIN partidaxpregunta pxp ON ra.idPartidaxPregunta = pxp.idPartidaxPregunta - INNER JOIN respuesta r ON ra.idRespuesta = r.idRespuesta - WHERE pxp.idPartida = :idPartida AND ra.idUsuario = :idUsuario AND r.correcta = 1"; - - $consulta = $conexion->prepare($sql); - $consulta->bindParam(':idPartida', $idPartida); - $consulta->bindParam(':idUsuario', $idUsuario); - $consulta->execute(); - - $resultado = $consulta->fetch(PDO::FETCH_ASSOC); - return (int)$resultado['aciertos']; - } catch (PDOException $error) { - return [ - 'error' => 'Ocurrió un error al calcular los aciertos.', - 'error_tecnico' => $error->getMessage() - ]; - } - } -} +idRespuestaAlmacenada = $idRespuestaAlmacenada; + $this->idPartidaxPregunta = $idPartidaxPregunta; + $this->idUsuario = $idUsuario; + $this->idRespuesta = $idRespuesta; + } + + /** + * Guarda la respuesta que ha seleccionado un usuario en una pregunta de la partida. + */ + public function guardarRespuesta() { + $conexion = conexionBD(); + if (is_array($conexion)) return $conexion; + + try { + $sql = "INSERT INTO respuestaalmacenada (idPartidaxPregunta, idUsuario, idRespuesta) + VALUES (:idPartidaxPregunta, :idUsuario, :idRespuesta)"; + $consulta = $conexion->prepare($sql); + + $consulta->bindParam(':idPartidaxPregunta', $this->idPartidaxPregunta); + $consulta->bindParam(':idUsuario', $this->idUsuario); + $consulta->bindParam(':idRespuesta', $this->idRespuesta); + $consulta->execute(); + + return [ + 'exito' => 'Respuesta del usuario almacenada correctamente.', + 'exito_tecnico' => $conexion->lastInsertId() + ]; + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al guardar la respuesta del jugador.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + /** + * Obtiene los aciertos totales de un usuario en una partida específica. + * Útil para calcular las estadísticas individuales al terminar el juego. + */ + public static function obtenerAciertosUsuarioEnPartida($idPartida, $idUsuario) { + $conexion = conexionBD(); + if (is_array($conexion)) return $conexion; + + try { + $sql = "SELECT COUNT(*) AS aciertos + FROM respuestaalmacenada ra + INNER JOIN partidaxpregunta pxp ON ra.idPartidaxPregunta = pxp.idPartidaxPregunta + INNER JOIN respuesta r ON ra.idRespuesta = r.idRespuesta + WHERE pxp.idPartida = :idPartida AND ra.idUsuario = :idUsuario AND r.correcta = 1"; + + $consulta = $conexion->prepare($sql); + $consulta->bindParam(':idPartida', $idPartida); + $consulta->bindParam(':idUsuario', $idUsuario); + $consulta->execute(); + + $resultado = $consulta->fetch(PDO::FETCH_ASSOC); + return (int)$resultado['aciertos']; + } catch (PDOException $error) { + return [ + 'error' => 'Ocurrió un error al calcular los aciertos.', + 'error_tecnico' => $error->getMessage() + ]; + } + } +} diff --git a/clases/ClaseUsuario.php b/clases/claseUsuario.php similarity index 96% rename from clases/ClaseUsuario.php rename to clases/claseUsuario.php index d3cf852..23b30ee 100644 --- a/clases/ClaseUsuario.php +++ b/clases/claseUsuario.php @@ -1,474 +1,474 @@ -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']); - unset($_SESSION['avatar']); - - 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(); - $_SESSION['avatar'] = $usuario->getAvatar(); - - // Devolvemos el usuario como hasta ahora - return $usuario; - } - - // Contraseña incorrecta - unset($_SESSION['idUsuario']); - unset($_SESSION['email']); - unset($_SESSION['nombreUsuario']); - unset($_SESSION['avatar']); - - return null; - } - - // Cookies - - public static function guardarCookieToken($idUsuario, $token) - { - $conexion = conexionBD(); - if (is_array($conexion)) return false; - - try { - $sql = "UPDATE usuario SET cookie = :token WHERE idUsuario = :id"; - $stmt = $conexion->prepare($sql); - return $stmt->execute([ - ':token' => $token, - ':id' => $idUsuario - ]); - } catch (PDOException $e) { - return false; - } - } - - public static function buscarPorCookie($token) - { - if (empty($token)) return null; - - $conexion = conexionBD(); - if (is_array($conexion)) return null; - - try { - $sql = "SELECT * FROM usuario WHERE cookie = :token AND cookie IS NOT NULL"; - $stmt = $conexion->prepare($sql); - $stmt->execute([':token' => $token]); - - $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; - } catch (PDOException $e) { - return null; - } - } - - - - public function cambiarNombre($nuevoNombre) - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $sql = "UPDATE usuario - SET nombreUsuario = :nombre - WHERE idUsuario = :id"; - - $stmt = $conexion->prepare($sql); - - $stmt->execute([ - ':nombre' => $nuevoNombre, - ':id' => $this->idUsuario - ]); - - // Actualizamos también el objeto actual - $this->nombreUsuario = $nuevoNombre; - - return [ - 'exito' => 'Nombre actualizado correctamente.' - ]; - } catch (PDOException $error) { - - return [ - 'error' => 'Ocurrió un error al actualizar el nombre.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - public function cambiarAvatar($archivo) - { - $carpeta = __DIR__ . '/../img/avatars/'; - - // Creamos la carpeta si no existe - if (!is_dir($carpeta)) { - mkdir($carpeta, 0755, true); - } - - // Obtenemos la extensión según el tipo MIME - $tipo = mime_content_type($archivo['tmp_name']); - - $extensiones = [ - 'image/jpeg' => 'jpg', - 'image/png' => 'png', - 'image/gif' => 'gif', - 'image/webp' => 'webp' - ]; - - if (!isset($extensiones[$tipo])) { - - return [ - 'error' => 'Formato de imagen no permitido.' - ]; - } - - $extension = $extensiones[$tipo]; - - // Nombre único para evitar conflictos - $nombreArchivo = 'avatar_' . $this->idUsuario . '.' . $extension; - - $rutaCompleta = $carpeta . $nombreArchivo; - - // Guardamos la imagen - if (!move_uploaded_file($archivo['tmp_name'], $rutaCompleta)) { - - return [ - 'error' => 'No se pudo guardar la imagen.' - ]; - } - - // Ruta que utilizará el HTML - $rutaAvatar = 'img/avatars/' . $nombreArchivo; - - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $sql = "UPDATE usuario - SET avatar = :avatar - WHERE idUsuario = :id"; - - $stmt = $conexion->prepare($sql); - - $stmt->execute([ - ':avatar' => $rutaAvatar, - ':id' => $this->idUsuario - ]); - - // Actualizamos también el objeto actual - $this->avatar = $rutaAvatar; - - return [ - 'exito' => 'Avatar actualizado correctamente.', - 'avatar' => $rutaAvatar - ]; - } catch (PDOException $error) { - - return [ - 'error' => 'Ocurrió un error al actualizar el avatar.', - 'error_tecnico' => $error->getMessage() - ]; - } - } - - public static function obtenerRanking($limite = 10) - { - try { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return []; - } - - - $sql = "SELECT - idUsuario, - nombreUsuario, - avatar, - aciertos, - victorias, - derrotas, - CASE - WHEN (victorias + derrotas) > 0 - THEN ROUND((victorias / (victorias + derrotas)) * 100, 0) - ELSE 0 - END AS porcentajeVictoria - FROM usuario - ORDER BY victorias DESC, aciertos DESC - LIMIT " . (int)$limite; - - $stmt = $conexion->prepare($sql); - $stmt->execute(); - return $stmt->fetchAll(PDO::FETCH_ASSOC); - } catch (PDOException $e) { - return []; - } - } +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']); + unset($_SESSION['avatar']); + + 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(); + $_SESSION['avatar'] = $usuario->getAvatar(); + + // Devolvemos el usuario como hasta ahora + return $usuario; + } + + // Contraseña incorrecta + unset($_SESSION['idUsuario']); + unset($_SESSION['email']); + unset($_SESSION['nombreUsuario']); + unset($_SESSION['avatar']); + + return null; + } + + // Cookies + + public static function guardarCookieToken($idUsuario, $token) + { + $conexion = conexionBD(); + if (is_array($conexion)) return false; + + try { + $sql = "UPDATE usuario SET cookie = :token WHERE idUsuario = :id"; + $stmt = $conexion->prepare($sql); + return $stmt->execute([ + ':token' => $token, + ':id' => $idUsuario + ]); + } catch (PDOException $e) { + return false; + } + } + + public static function buscarPorCookie($token) + { + if (empty($token)) return null; + + $conexion = conexionBD(); + if (is_array($conexion)) return null; + + try { + $sql = "SELECT * FROM usuario WHERE cookie = :token AND cookie IS NOT NULL"; + $stmt = $conexion->prepare($sql); + $stmt->execute([':token' => $token]); + + $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; + } catch (PDOException $e) { + return null; + } + } + + + + public function cambiarNombre($nuevoNombre) + { + $conexion = conexionBD(); + + if (is_array($conexion)) { + return $conexion; + } + + try { + + $sql = "UPDATE usuario + SET nombreUsuario = :nombre + WHERE idUsuario = :id"; + + $stmt = $conexion->prepare($sql); + + $stmt->execute([ + ':nombre' => $nuevoNombre, + ':id' => $this->idUsuario + ]); + + // Actualizamos también el objeto actual + $this->nombreUsuario = $nuevoNombre; + + return [ + 'exito' => 'Nombre actualizado correctamente.' + ]; + } catch (PDOException $error) { + + return [ + 'error' => 'Ocurrió un error al actualizar el nombre.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + public function cambiarAvatar($archivo) + { + $carpeta = __DIR__ . '/../img/avatars/'; + + // Creamos la carpeta si no existe + if (!is_dir($carpeta)) { + mkdir($carpeta, 0755, true); + } + + // Obtenemos la extensión según el tipo MIME + $tipo = mime_content_type($archivo['tmp_name']); + + $extensiones = [ + 'image/jpeg' => 'jpg', + 'image/png' => 'png', + 'image/gif' => 'gif', + 'image/webp' => 'webp' + ]; + + if (!isset($extensiones[$tipo])) { + + return [ + 'error' => 'Formato de imagen no permitido.' + ]; + } + + $extension = $extensiones[$tipo]; + + // Nombre único para evitar conflictos + $nombreArchivo = 'avatar_' . $this->idUsuario . '.' . $extension; + + $rutaCompleta = $carpeta . $nombreArchivo; + + // Guardamos la imagen + if (!move_uploaded_file($archivo['tmp_name'], $rutaCompleta)) { + + return [ + 'error' => 'No se pudo guardar la imagen.' + ]; + } + + // Ruta que utilizará el HTML + $rutaAvatar = 'img/avatars/' . $nombreArchivo; + + $conexion = conexionBD(); + + if (is_array($conexion)) { + return $conexion; + } + + try { + + $sql = "UPDATE usuario + SET avatar = :avatar + WHERE idUsuario = :id"; + + $stmt = $conexion->prepare($sql); + + $stmt->execute([ + ':avatar' => $rutaAvatar, + ':id' => $this->idUsuario + ]); + + // Actualizamos también el objeto actual + $this->avatar = $rutaAvatar; + + return [ + 'exito' => 'Avatar actualizado correctamente.', + 'avatar' => $rutaAvatar + ]; + } catch (PDOException $error) { + + return [ + 'error' => 'Ocurrió un error al actualizar el avatar.', + 'error_tecnico' => $error->getMessage() + ]; + } + } + + public static function obtenerRanking($limite = 10) + { + try { + $conexion = conexionBD(); + + if (is_array($conexion)) { + return []; + } + + + $sql = "SELECT + idUsuario, + nombreUsuario, + avatar, + aciertos, + victorias, + derrotas, + CASE + WHEN (victorias + derrotas) > 0 + THEN ROUND((victorias / (victorias + derrotas)) * 100, 0) + ELSE 0 + END AS porcentajeVictoria + FROM usuario + ORDER BY victorias DESC, aciertos DESC + LIMIT " . (int)$limite; + + $stmt = $conexion->prepare($sql); + $stmt->execute(); + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } catch (PDOException $e) { + return []; + } + } } \ No newline at end of file diff --git a/controladores/ControladorCategoria.php b/controladores/controladorCategoria.php similarity index 95% rename from controladores/ControladorCategoria.php rename to controladores/controladorCategoria.php index 11e839b..ac0b4d5 100644 --- a/controladores/ControladorCategoria.php +++ b/controladores/controladorCategoria.php @@ -1,55 +1,55 @@ - 'El nombre de la categoría es obligatorio']); - break; - } - - $categoria = new Categoria(null, $nombreCategoria); - $resultado = $categoria->crear(); - - echo json_encode($resultado); - break; - - - case 'listarCategorias': - - $categoria = new Categoria(); - $resultado = $categoria->listar(); - - echo json_encode($resultado); - break; - - - case 'buscarCategoria': - - $idCategoria = intval($_POST['idCategoria'] ?? 0); - - $categoria = new Categoria($idCategoria); - $resultado = $categoria->buscar(); - - echo json_encode($resultado); - break; - - - case 'borrarCategoria': - - $idCategoria = intval($_POST['idCategoria'] ?? 0); - - $categoria = new Categoria($idCategoria); - $resultado = $categoria->borrar(); - - echo json_encode($resultado); - break; - -} + 'El nombre de la categoría es obligatorio']); + break; + } + + $categoria = new Categoria(null, $nombreCategoria); + $resultado = $categoria->crear(); + + echo json_encode($resultado); + break; + + + case 'listarCategorias': + + $categoria = new Categoria(); + $resultado = $categoria->listar(); + + echo json_encode($resultado); + break; + + + case 'buscarCategoria': + + $idCategoria = intval($_POST['idCategoria'] ?? 0); + + $categoria = new Categoria($idCategoria); + $resultado = $categoria->buscar(); + + echo json_encode($resultado); + break; + + + case 'borrarCategoria': + + $idCategoria = intval($_POST['idCategoria'] ?? 0); + + $categoria = new Categoria($idCategoria); + $resultado = $categoria->borrar(); + + echo json_encode($resultado); + break; + +} diff --git a/controladores/ControladorEquipo.php b/controladores/controladorEquipo.php similarity index 95% rename from controladores/ControladorEquipo.php rename to controladores/controladorEquipo.php index a780e8e..72769f1 100644 --- a/controladores/ControladorEquipo.php +++ b/controladores/controladorEquipo.php @@ -1,55 +1,55 @@ - 'El nombre del equipo es obligatorio']); - break; - } - - $equipo = new Equipo(null, $nombreEquipo); - $resultado = $equipo->crear(); - - echo json_encode($resultado); - break; - - - case 'listarEquipos': - - $equipo = new Equipo(); - $resultado = $equipo->listar(); - - echo json_encode($resultado); - break; - - - case 'buscarEquipo': - - $idEquipo = intval($_POST['idEquipo'] ?? 0); - - $equipo = new Equipo($idEquipo); - $resultado = $equipo->buscar(); - - echo json_encode($resultado); - break; - - - case 'borrarEquipo': - - $idEquipo = intval($_POST['idEquipo'] ?? 0); - - $equipo = new Equipo($idEquipo); - $resultado = $equipo->borrar(); - - echo json_encode($resultado); - break; - + 'El nombre del equipo es obligatorio']); + break; + } + + $equipo = new Equipo(null, $nombreEquipo); + $resultado = $equipo->crear(); + + echo json_encode($resultado); + break; + + + case 'listarEquipos': + + $equipo = new Equipo(); + $resultado = $equipo->listar(); + + echo json_encode($resultado); + break; + + + case 'buscarEquipo': + + $idEquipo = intval($_POST['idEquipo'] ?? 0); + + $equipo = new Equipo($idEquipo); + $resultado = $equipo->buscar(); + + echo json_encode($resultado); + break; + + + case 'borrarEquipo': + + $idEquipo = intval($_POST['idEquipo'] ?? 0); + + $equipo = new Equipo($idEquipo); + $resultado = $equipo->borrar(); + + echo json_encode($resultado); + break; + } \ No newline at end of file diff --git a/controladores/ControladorEquipoxUsuario.php b/controladores/controladorEquipoxUsuario.php similarity index 100% rename from controladores/ControladorEquipoxUsuario.php rename to controladores/controladorEquipoxUsuario.php diff --git a/controladores/ControladorJuego.php b/controladores/controladorJuego.php similarity index 100% rename from controladores/ControladorJuego.php rename to controladores/controladorJuego.php diff --git a/controladores/ControladorPartida.php b/controladores/controladorPartida.php similarity index 94% rename from controladores/ControladorPartida.php rename to controladores/controladorPartida.php index 0ade6a2..2ffb9b3 100644 --- a/controladores/ControladorPartida.php +++ b/controladores/controladorPartida.php @@ -1,1149 +1,1149 @@ - -listar(); - - echo json_encode($listadoPartidas); - - break; - - - - - case 'buscar': - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - $partida = new Partida(); - - $partida->idPartida = intval($_POST['idPartida']); - - $resultado = $partida->buscar(); - - echo json_encode($resultado); - - break; - - - - - case 'crear': - - // Comprobamos que haya un usuario conectado - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión para crear una partida.' - ]); - - break; - } - - - // Comprobamos el nombre de la partida - - if ( - !isset($_POST['nombrePartida']) || - trim($_POST['nombrePartida']) === '' - ) { - - echo json_encode([ - 'error' => 'El nombre de la partida es obligatorio.' - ]); - - break; - } - - - // Comprobamos los nombres de los equipos - - if ( - !isset($_POST['nombreEquipo1']) || - trim($_POST['nombreEquipo1']) === '' || - !isset($_POST['nombreEquipo2']) || - trim($_POST['nombreEquipo2']) === '' - ) { - - echo json_encode([ - 'error' => 'Los nombres de los equipos son obligatorios.' - ]); - - break; - } - - - /* - * ========================================== - * 1. CREAMOS LA PARTIDA - * ========================================== - */ - - $partida = new Partida(); - - $partida->nombrePartida = trim($_POST['nombrePartida']); - - // El usuario conectado será el propietario - $partida->idUsuario = $_SESSION['idUsuario']; - - $resultadoPartida = $partida->insertar(); - - - if (isset($resultadoPartida['error'])) { - - echo json_encode($resultadoPartida); - - break; - } - - $idPartida = (int)$resultadoPartida['exito_tecnico']; - $partida->idPartida = $idPartida; - - - /* - * ========================================== - * 2. CREAMOS EL EQUIPO 1 - * ========================================== - */ - - $equipo1 = new Equipo(); - - $equipo1->nombreEquipo = trim($_POST['nombreEquipo1']); - - $resultadoEquipo1 = $equipo1->crear(); - - - if (isset($resultadoEquipo1['error'])) { - - echo json_encode($resultadoEquipo1); - - break; - } - - - /* - * ========================================== - * 3. CREAMOS EL EQUIPO 2 - * ========================================== - */ - - $equipo2 = new Equipo(); - - $equipo2->nombreEquipo = trim($_POST['nombreEquipo2']); - - $resultadoEquipo2 = $equipo2->crear(); - - - if (isset($resultadoEquipo2['error'])) { - - echo json_encode($resultadoEquipo2); - - break; - } - - /* - * ========================================== - * 3. INSERTAMOS LOS EQUIPOS CON SU PARTIDA EN EQUIPOXPARTIDA - * ========================================== - */ - - - $relacionEquipo1 = new EquipoxPartida( - null, - $equipo1->idEquipo, - $idPartida - ); - - $resultadoRelacion1 = $relacionEquipo1->insertar(); - - - $relacionEquipo2 = new EquipoxPartida( - null, - $equipo2->idEquipo, - $idPartida - ); - - $resultadoRelacion2 = $relacionEquipo2->insertar(); - - - /* - * ========================================== - * 4. ASIGNAMOS EL USUARIO AL EQUIPO 1 - * ========================================== - */ - - $usuarioEquipo = new EquipoxUsuario( - null, - $_SESSION['idUsuario'], - $equipo1->idEquipo - ); - - $resultadoUsuarioEquipo = - $usuarioEquipo->registrarUsuarioEnEquipo(); - - - if (isset($resultadoUsuarioEquipo['error'])) { - - echo json_encode($resultadoUsuarioEquipo); - - break; - } - - - - - /* - * ========================================== - * 5. ASIGNAMOS 10 PREGUNTAS ALEATORIAS A LA PARTIDA - * ========================================== - */ - - // Obtenemos todos los IDs de las preguntas - - $listaPreguntas = Pregunta::getTodosIds(); - - $totalPreguntas = count($listaPreguntas); - - // Guardamos las preguntas que ya hemos asignado - $preguntasAsignadas = []; - - // Generamos 10 posiciones aleatorias sin repetir - while (count($preguntasAsignadas) < 10) { - - // Generamos una posición aleatoria del array - $posicionAleatoria = rand(0, $totalPreguntas - 1); - - // Obtenemos el ID real de la pregunta - $idPreguntaAleatoria = $listaPreguntas[$posicionAleatoria]; - - // Comprobamos que esa pregunta no haya sido asignada ya - if (!in_array($idPreguntaAleatoria, $preguntasAsignadas)) { - $preguntasAsignadas[] = $idPreguntaAleatoria; - - // Asignamos el ID real de la pregunta a la partida - $partida->asignarPregunta($idPreguntaAleatoria); - } - }//fin shile - - - /* - * ========================================== - * TODO CORRECTO - * ========================================== - */ - - echo json_encode([ - 'exito' => 'Sala creada correctamente. Preguntas preparadas.', - 'idPartida' => $resultadoPartida['exito_tecnico'], - 'idEquipo1' => $equipo1->idEquipo, - 'idEquipo2' => $equipo2->idEquipo - ]); - - break; - - - - - - - case 'editar': - - /* - |-------------------------------------------------------------- - | Usuario conectado - |-------------------------------------------------------------- - */ - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - - //Comprobamos los datos - - - if ( - !isset($_POST['idPartida']) || - !isset($_POST['nombrePartida']) - ) { - - echo json_encode([ - 'error' => 'Faltan datos para editar la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = intval($_POST['idPartida']); - - $partida->nombrePartida = trim($_POST['nombrePartida']); - - - - //Buscamos la partida - - - $datosPartida = $partida->buscar(); - - - if (!$datosPartida || isset($datosPartida['error'])) { - - echo json_encode([ - 'error' => 'La partida indicada no existe.' - ]); - - break; - } - - - - //Comprobamos que el usuario sea el propietario - - - if ( - $datosPartida['idUsuario'] != - $_SESSION['idUsuario'] - ) { - - echo json_encode([ - 'error' => 'No tienes permiso para editar esta partida.' - ]); - - break; - } - - - $partida->idUsuario = $datosPartida['idUsuario']; - - $resultado = $partida->editar(); - - echo json_encode($resultado); - - break; - - - - - case 'eliminar': - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = intval($_POST['idPartida']); - - - - //Buscamos la partida - - - $datosPartida = $partida->buscar(); - - - if (!$datosPartida || isset($datosPartida['error'])) { - - echo json_encode([ - 'error' => 'La partida no existe.' - ]); - - break; - } - - - - //Solo el propietario puede eliminarla - - - if ( - $datosPartida['idUsuario'] != - $_SESSION['idUsuario'] - ) { - - echo json_encode([ - 'error' => 'No tienes permiso para eliminar esta partida.' - ]); - - break; - } - - - $resultado = $partida->eliminar(); - - echo json_encode($resultado); - - break; - - - - - case 'listarDelUsuario': - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idUsuario = $_SESSION['idUsuario']; - - $resultado = $partida->listarDelUsuario(); - - echo json_encode($resultado); - - break; - - - - - case 'getPreguntas': - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = intval($_POST['idPartida']); - - $resultado = $partida->getPreguntas(); - - echo json_encode($resultado); - - break; - - - - // ASIGNAR UNA PREGUNTA A UNA PARTIDA - - - case 'asignarPregunta': - - if ( - !isset($_POST['idPartida']) || - !isset($_POST['idPregunta']) - ) { - - echo json_encode([ - 'error' => 'Faltan datos.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = intval($_POST['idPartida']); - - $idPregunta = intval($_POST['idPregunta']); - - - - //Comprobamos que no esté ya asignada - - - if ($partida->preguntaAsignada($idPregunta)) { - - echo json_encode([ - 'error' => - 'La pregunta ya está asignada a esta partida.' - ]); - - break; - } - - - $resultado = - $partida->asignarPregunta($idPregunta); - - echo json_encode($resultado); - - break; - - - - // COMPROBAR SI UNA PREGUNTA ESTÁ ASIGNADA - - case 'preguntaAsignada': - - if ( - !isset($_POST['idPartida']) || - !isset($_POST['idPregunta']) - ) { - - echo json_encode([ - 'error' => 'Faltan datos.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - $resultado = - $partida->preguntaAsignada( - intval($_POST['idPregunta']) - ); - - - echo json_encode([ - 'asignada' => $resultado - ]); - - break; - - - - // CONTAR PREGUNTAS DE UNA PARTIDA - - - case 'contarPreguntas': - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - $resultado = - $partida->contarPreguntasAsignadas(); - - - echo json_encode([ - 'totalPreguntas' => $resultado - ]); - - break; - - - - // REGISTRAR EQUIPO EN UNA PARTIDA - - - case 'registrarEquipo': - - if ( - !isset($_POST['idPartida']) || - !isset($_POST['idEquipo']) - ) { - - echo json_encode([ - 'error' => 'Faltan datos.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - $resultado = - $partida->registrarEquipoEnPartida( - intval($_POST['idEquipo']) - ); - - - echo json_encode($resultado); - - break; - - - - // OBTENER EQUIPOS DE UNA PARTIDA - - - case 'getEquipos': - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - $resultado = - $partida->getEquiposParticipantes(); - - - echo json_encode($resultado); - - break; - - - - // OBTENER JUGADORES DE UNA PARTIDA - - - case 'getJugadores': - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - $resultado = - $partida->getJugadoresDeLaPartida(); - - - echo json_encode($resultado); - - break; - - - - - case 'iniciar': - - /* - |-------------------------------------------------------------- - | Debe haber un usuario conectado - |-------------------------------------------------------------- - */ - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - - //Comprobamos que se haya indicado la partida - - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - - //Buscamos la partida - - - $datosPartida = $partida->buscar(); - - - if (!$datosPartida || isset($datosPartida['error'])) { - - echo json_encode([ - 'error' => 'La partida no existe.' - ]); - - break; - } - - - - //Solo el creador puede iniciar la partida - - - if ( - $datosPartida['idUsuario'] != - $_SESSION['idUsuario'] - ) { - - echo json_encode([ - 'error' => - 'Solo el creador de la partida puede iniciarla.' - ]); - - break; - } - - - - //Comprobamos que haya preguntas - - - $numeroPreguntas = - $partida->contarPreguntasAsignadas(); - - - if ($numeroPreguntas <= 0) { - - echo json_encode([ - 'error' => - 'No puedes iniciar una partida sin preguntas.' - ]); - - break; - } - - - /* - - Iniciamos la partida - - - Este método deberá cambiar el estado de la partida - de "esperando" a "jugando". - - */ - - $resultado = $partida->iniciar(); - - - echo json_encode($resultado); - - break; - - - - // OBTENER LA PREGUNTA ACTUAL - - case 'getPreguntaActual': - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - - - //Obtenemos la pregunta actual - - $resultado = - $partida->getPreguntaActual(); - - - echo json_encode($resultado); - - break; - - - - - case 'siguientePregunta': - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - - //Comprobamos que el usuario sea el creador - - $datosPartida = $partida->buscar(); - - - if (!$datosPartida || isset($datosPartida['error'])) { - - echo json_encode([ - 'error' => 'La partida no existe.' - ]); - - break; - } - - - if ( - $datosPartida['idUsuario'] != - $_SESSION['idUsuario'] - ) { - - echo json_encode([ - 'error' => - 'Solo el creador puede pasar a la siguiente pregunta.' - ]); - - break; - } - - - - //Pasamos a la siguiente pregunta - - - $resultado = - $partida->siguientePregunta(); - - - echo json_encode($resultado); - - break; - - - - // REGISTRAR RESPUESTA - - - case 'responder': - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - if ( - !isset($_POST['idPartida']) || - !isset($_POST['idPregunta']) || - !isset($_POST['idRespuesta']) - ) { - - echo json_encode([ - 'error' => 'Faltan datos para registrar la respuesta.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - $idPregunta = - intval($_POST['idPregunta']); - - $idRespuesta = - intval($_POST['idRespuesta']); - - - - //Registramos la respuesta del usuario - - - $resultado = - $partida->registrarRespuesta( - $_SESSION['idUsuario'], - $idPregunta, - $idRespuesta - ); - - - echo json_encode($resultado); - - break; - - - - // COMPROBAR SI LA PARTIDA HA TERMINADO PARA EL USUARIO - - - case 'estaFinalizada': - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - $resultado = - $partida->estaFinalizadaParaUsuario( - $_SESSION['idUsuario'] - ); - - - echo json_encode([ - 'finalizada' => $resultado - ]); - - break; - - - - // CONTAR RESPUESTAS DEL USUARIO - - - case 'contarRespuestas': - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - $resultado = - $partida->contarRespuestasUsuario( - $_SESSION['idUsuario'] - ); - - - echo json_encode([ - 'totalRespondidas' => $resultado - ]); - - break; - - - - - case 'finalizar': - - if (!isset($_SESSION['idUsuario'])) { - - echo json_encode([ - 'error' => 'Debes iniciar sesión.' - ]); - - break; - } - - - if (!isset($_POST['idPartida'])) { - - echo json_encode([ - 'error' => 'No se ha indicado la partida.' - ]); - - break; - } - - - $partida = new Partida(); - - $partida->idPartida = - intval($_POST['idPartida']); - - - - //Buscamos la partida - - $datosPartida = $partida->buscar(); - - - if (!$datosPartida || isset($datosPartida['error'])) { - - echo json_encode([ - 'error' => 'La partida no existe.' - ]); - - break; - } - - - - //Solo el creador puede finalizarla - - if ( - $datosPartida['idUsuario'] != - $_SESSION['idUsuario'] - ) { - - echo json_encode([ - 'error' => - 'Solo el creador puede finalizar la partida.' - ]); - - break; - } - - - - - $resultado = - $partida->finalizar(); - - - echo json_encode($resultado); - - break; - - - - - default: - - echo json_encode([ - 'error' => 'La orden indicada no existe.' - ]); - - break; -} - -?> - + +listar(); + + echo json_encode($listadoPartidas); + + break; + + + + + case 'buscar': + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + $partida = new Partida(); + + $partida->idPartida = intval($_POST['idPartida']); + + $resultado = $partida->buscar(); + + echo json_encode($resultado); + + break; + + + + + case 'crear': + + // Comprobamos que haya un usuario conectado + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión para crear una partida.' + ]); + + break; + } + + + // Comprobamos el nombre de la partida + + if ( + !isset($_POST['nombrePartida']) || + trim($_POST['nombrePartida']) === '' + ) { + + echo json_encode([ + 'error' => 'El nombre de la partida es obligatorio.' + ]); + + break; + } + + + // Comprobamos los nombres de los equipos + + if ( + !isset($_POST['nombreEquipo1']) || + trim($_POST['nombreEquipo1']) === '' || + !isset($_POST['nombreEquipo2']) || + trim($_POST['nombreEquipo2']) === '' + ) { + + echo json_encode([ + 'error' => 'Los nombres de los equipos son obligatorios.' + ]); + + break; + } + + + /* + * ========================================== + * 1. CREAMOS LA PARTIDA + * ========================================== + */ + + $partida = new Partida(); + + $partida->nombrePartida = trim($_POST['nombrePartida']); + + // El usuario conectado será el propietario + $partida->idUsuario = $_SESSION['idUsuario']; + + $resultadoPartida = $partida->insertar(); + + + if (isset($resultadoPartida['error'])) { + + echo json_encode($resultadoPartida); + + break; + } + + $idPartida = (int)$resultadoPartida['exito_tecnico']; + $partida->idPartida = $idPartida; + + + /* + * ========================================== + * 2. CREAMOS EL EQUIPO 1 + * ========================================== + */ + + $equipo1 = new Equipo(); + + $equipo1->nombreEquipo = trim($_POST['nombreEquipo1']); + + $resultadoEquipo1 = $equipo1->crear(); + + + if (isset($resultadoEquipo1['error'])) { + + echo json_encode($resultadoEquipo1); + + break; + } + + + /* + * ========================================== + * 3. CREAMOS EL EQUIPO 2 + * ========================================== + */ + + $equipo2 = new Equipo(); + + $equipo2->nombreEquipo = trim($_POST['nombreEquipo2']); + + $resultadoEquipo2 = $equipo2->crear(); + + + if (isset($resultadoEquipo2['error'])) { + + echo json_encode($resultadoEquipo2); + + break; + } + + /* + * ========================================== + * 3. INSERTAMOS LOS EQUIPOS CON SU PARTIDA EN EQUIPOXPARTIDA + * ========================================== + */ + + + $relacionEquipo1 = new EquipoxPartida( + null, + $equipo1->idEquipo, + $idPartida + ); + + $resultadoRelacion1 = $relacionEquipo1->insertar(); + + + $relacionEquipo2 = new EquipoxPartida( + null, + $equipo2->idEquipo, + $idPartida + ); + + $resultadoRelacion2 = $relacionEquipo2->insertar(); + + + /* + * ========================================== + * 4. ASIGNAMOS EL USUARIO AL EQUIPO 1 + * ========================================== + */ + + $usuarioEquipo = new EquipoxUsuario( + null, + $_SESSION['idUsuario'], + $equipo1->idEquipo + ); + + $resultadoUsuarioEquipo = + $usuarioEquipo->registrarUsuarioEnEquipo(); + + + if (isset($resultadoUsuarioEquipo['error'])) { + + echo json_encode($resultadoUsuarioEquipo); + + break; + } + + + + + /* + * ========================================== + * 5. ASIGNAMOS 10 PREGUNTAS ALEATORIAS A LA PARTIDA + * ========================================== + */ + + // Obtenemos todos los IDs de las preguntas + + $listaPreguntas = Pregunta::getTodosIds(); + + $totalPreguntas = count($listaPreguntas); + + // Guardamos las preguntas que ya hemos asignado + $preguntasAsignadas = []; + + // Generamos 10 posiciones aleatorias sin repetir + while (count($preguntasAsignadas) < 10) { + + // Generamos una posición aleatoria del array + $posicionAleatoria = rand(0, $totalPreguntas - 1); + + // Obtenemos el ID real de la pregunta + $idPreguntaAleatoria = $listaPreguntas[$posicionAleatoria]; + + // Comprobamos que esa pregunta no haya sido asignada ya + if (!in_array($idPreguntaAleatoria, $preguntasAsignadas)) { + $preguntasAsignadas[] = $idPreguntaAleatoria; + + // Asignamos el ID real de la pregunta a la partida + $partida->asignarPregunta($idPreguntaAleatoria); + } + }//fin shile + + + /* + * ========================================== + * TODO CORRECTO + * ========================================== + */ + + echo json_encode([ + 'exito' => 'Sala creada correctamente. Preguntas preparadas.', + 'idPartida' => $resultadoPartida['exito_tecnico'], + 'idEquipo1' => $equipo1->idEquipo, + 'idEquipo2' => $equipo2->idEquipo + ]); + + break; + + + + + + + case 'editar': + + /* + |-------------------------------------------------------------- + | Usuario conectado + |-------------------------------------------------------------- + */ + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + + //Comprobamos los datos + + + if ( + !isset($_POST['idPartida']) || + !isset($_POST['nombrePartida']) + ) { + + echo json_encode([ + 'error' => 'Faltan datos para editar la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = intval($_POST['idPartida']); + + $partida->nombrePartida = trim($_POST['nombrePartida']); + + + + //Buscamos la partida + + + $datosPartida = $partida->buscar(); + + + if (!$datosPartida || isset($datosPartida['error'])) { + + echo json_encode([ + 'error' => 'La partida indicada no existe.' + ]); + + break; + } + + + + //Comprobamos que el usuario sea el propietario + + + if ( + $datosPartida['idUsuario'] != + $_SESSION['idUsuario'] + ) { + + echo json_encode([ + 'error' => 'No tienes permiso para editar esta partida.' + ]); + + break; + } + + + $partida->idUsuario = $datosPartida['idUsuario']; + + $resultado = $partida->editar(); + + echo json_encode($resultado); + + break; + + + + + case 'eliminar': + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = intval($_POST['idPartida']); + + + + //Buscamos la partida + + + $datosPartida = $partida->buscar(); + + + if (!$datosPartida || isset($datosPartida['error'])) { + + echo json_encode([ + 'error' => 'La partida no existe.' + ]); + + break; + } + + + + //Solo el propietario puede eliminarla + + + if ( + $datosPartida['idUsuario'] != + $_SESSION['idUsuario'] + ) { + + echo json_encode([ + 'error' => 'No tienes permiso para eliminar esta partida.' + ]); + + break; + } + + + $resultado = $partida->eliminar(); + + echo json_encode($resultado); + + break; + + + + + case 'listarDelUsuario': + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idUsuario = $_SESSION['idUsuario']; + + $resultado = $partida->listarDelUsuario(); + + echo json_encode($resultado); + + break; + + + + + case 'getPreguntas': + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = intval($_POST['idPartida']); + + $resultado = $partida->getPreguntas(); + + echo json_encode($resultado); + + break; + + + + // ASIGNAR UNA PREGUNTA A UNA PARTIDA + + + case 'asignarPregunta': + + if ( + !isset($_POST['idPartida']) || + !isset($_POST['idPregunta']) + ) { + + echo json_encode([ + 'error' => 'Faltan datos.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = intval($_POST['idPartida']); + + $idPregunta = intval($_POST['idPregunta']); + + + + //Comprobamos que no esté ya asignada + + + if ($partida->preguntaAsignada($idPregunta)) { + + echo json_encode([ + 'error' => + 'La pregunta ya está asignada a esta partida.' + ]); + + break; + } + + + $resultado = + $partida->asignarPregunta($idPregunta); + + echo json_encode($resultado); + + break; + + + + // COMPROBAR SI UNA PREGUNTA ESTÁ ASIGNADA + + case 'preguntaAsignada': + + if ( + !isset($_POST['idPartida']) || + !isset($_POST['idPregunta']) + ) { + + echo json_encode([ + 'error' => 'Faltan datos.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + $resultado = + $partida->preguntaAsignada( + intval($_POST['idPregunta']) + ); + + + echo json_encode([ + 'asignada' => $resultado + ]); + + break; + + + + // CONTAR PREGUNTAS DE UNA PARTIDA + + + case 'contarPreguntas': + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + $resultado = + $partida->contarPreguntasAsignadas(); + + + echo json_encode([ + 'totalPreguntas' => $resultado + ]); + + break; + + + + // REGISTRAR EQUIPO EN UNA PARTIDA + + + case 'registrarEquipo': + + if ( + !isset($_POST['idPartida']) || + !isset($_POST['idEquipo']) + ) { + + echo json_encode([ + 'error' => 'Faltan datos.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + $resultado = + $partida->registrarEquipoEnPartida( + intval($_POST['idEquipo']) + ); + + + echo json_encode($resultado); + + break; + + + + // OBTENER EQUIPOS DE UNA PARTIDA + + + case 'getEquipos': + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + $resultado = + $partida->getEquiposParticipantes(); + + + echo json_encode($resultado); + + break; + + + + // OBTENER JUGADORES DE UNA PARTIDA + + + case 'getJugadores': + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + $resultado = + $partida->getJugadoresDeLaPartida(); + + + echo json_encode($resultado); + + break; + + + + + case 'iniciar': + + /* + |-------------------------------------------------------------- + | Debe haber un usuario conectado + |-------------------------------------------------------------- + */ + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + + //Comprobamos que se haya indicado la partida + + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + + //Buscamos la partida + + + $datosPartida = $partida->buscar(); + + + if (!$datosPartida || isset($datosPartida['error'])) { + + echo json_encode([ + 'error' => 'La partida no existe.' + ]); + + break; + } + + + + //Solo el creador puede iniciar la partida + + + if ( + $datosPartida['idUsuario'] != + $_SESSION['idUsuario'] + ) { + + echo json_encode([ + 'error' => + 'Solo el creador de la partida puede iniciarla.' + ]); + + break; + } + + + + //Comprobamos que haya preguntas + + + $numeroPreguntas = + $partida->contarPreguntasAsignadas(); + + + if ($numeroPreguntas <= 0) { + + echo json_encode([ + 'error' => + 'No puedes iniciar una partida sin preguntas.' + ]); + + break; + } + + + /* + + Iniciamos la partida + + + Este método deberá cambiar el estado de la partida + de "esperando" a "jugando". + + */ + + $resultado = $partida->iniciar(); + + + echo json_encode($resultado); + + break; + + + + // OBTENER LA PREGUNTA ACTUAL + + case 'getPreguntaActual': + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + + + //Obtenemos la pregunta actual + + $resultado = + $partida->getPreguntaActual(); + + + echo json_encode($resultado); + + break; + + + + + case 'siguientePregunta': + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + + //Comprobamos que el usuario sea el creador + + $datosPartida = $partida->buscar(); + + + if (!$datosPartida || isset($datosPartida['error'])) { + + echo json_encode([ + 'error' => 'La partida no existe.' + ]); + + break; + } + + + if ( + $datosPartida['idUsuario'] != + $_SESSION['idUsuario'] + ) { + + echo json_encode([ + 'error' => + 'Solo el creador puede pasar a la siguiente pregunta.' + ]); + + break; + } + + + + //Pasamos a la siguiente pregunta + + + $resultado = + $partida->siguientePregunta(); + + + echo json_encode($resultado); + + break; + + + + // REGISTRAR RESPUESTA + + + case 'responder': + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + if ( + !isset($_POST['idPartida']) || + !isset($_POST['idPregunta']) || + !isset($_POST['idRespuesta']) + ) { + + echo json_encode([ + 'error' => 'Faltan datos para registrar la respuesta.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + $idPregunta = + intval($_POST['idPregunta']); + + $idRespuesta = + intval($_POST['idRespuesta']); + + + + //Registramos la respuesta del usuario + + + $resultado = + $partida->registrarRespuesta( + $_SESSION['idUsuario'], + $idPregunta, + $idRespuesta + ); + + + echo json_encode($resultado); + + break; + + + + // COMPROBAR SI LA PARTIDA HA TERMINADO PARA EL USUARIO + + + case 'estaFinalizada': + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + $resultado = + $partida->estaFinalizadaParaUsuario( + $_SESSION['idUsuario'] + ); + + + echo json_encode([ + 'finalizada' => $resultado + ]); + + break; + + + + // CONTAR RESPUESTAS DEL USUARIO + + + case 'contarRespuestas': + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + $resultado = + $partida->contarRespuestasUsuario( + $_SESSION['idUsuario'] + ); + + + echo json_encode([ + 'totalRespondidas' => $resultado + ]); + + break; + + + + + case 'finalizar': + + if (!isset($_SESSION['idUsuario'])) { + + echo json_encode([ + 'error' => 'Debes iniciar sesión.' + ]); + + break; + } + + + if (!isset($_POST['idPartida'])) { + + echo json_encode([ + 'error' => 'No se ha indicado la partida.' + ]); + + break; + } + + + $partida = new Partida(); + + $partida->idPartida = + intval($_POST['idPartida']); + + + + //Buscamos la partida + + $datosPartida = $partida->buscar(); + + + if (!$datosPartida || isset($datosPartida['error'])) { + + echo json_encode([ + 'error' => 'La partida no existe.' + ]); + + break; + } + + + + //Solo el creador puede finalizarla + + if ( + $datosPartida['idUsuario'] != + $_SESSION['idUsuario'] + ) { + + echo json_encode([ + 'error' => + 'Solo el creador puede finalizar la partida.' + ]); + + break; + } + + + + + $resultado = + $partida->finalizar(); + + + echo json_encode($resultado); + + break; + + + + + default: + + echo json_encode([ + 'error' => 'La orden indicada no existe.' + ]); + + break; +} + +?> + diff --git a/controladores/ControladorPregunta.php b/controladores/controladorPregunta.php similarity index 96% rename from controladores/ControladorPregunta.php rename to controladores/controladorPregunta.php index 8bc367c..87a2a0c 100644 --- a/controladores/ControladorPregunta.php +++ b/controladores/controladorPregunta.php @@ -1,153 +1,153 @@ - 'La categoría, la pregunta y todas las respuestas son obligatorias.' - ]); - - break; - } - - - /* - * ========================================== - * 1. CREAMOS LA PREGUNTA - * ========================================== - */ - - $pregunta = new Pregunta( - $idCategoria, - $nombrePregunta - ); - - $resultadoPregunta = $pregunta->guardar(); - - - if (isset($resultadoPregunta['error'])) { - - echo json_encode($resultadoPregunta); - - break; - } - - - // Obtenemos el ID de la pregunta creada - $idPregunta = (int)$resultadoPregunta['exito_tecnico']; - - - /* - * ========================================== - * 2. CREAMOS LAS RESPUESTAS - * ========================================== - */ - - $respuestas = [ - [ - 'texto' => $respuestaCorrecta, - 'correcta' => 1 - ], - [ - 'texto' => $respuestaIncorrecta1, - 'correcta' => 0 - ], - [ - 'texto' => $respuestaIncorrecta2, - 'correcta' => 0 - ], - [ - 'texto' => $respuestaIncorrecta3, - 'correcta' => 0 - ] - ]; - - - foreach ($respuestas as $respuesta) { - - $objRespuesta = new Respuesta( - null, - $idPregunta, - $respuesta['texto'], - $respuesta['correcta'] - ); - - - $resultadoRespuesta = $objRespuesta->insertar(); - - - if (isset($resultadoRespuesta['error'])) { - - echo json_encode($resultadoRespuesta); - - break 2; - } - } - - - /* - * ========================================== - * 3. TODO CORRECTO - * ========================================== - */ - - echo json_encode([ - 'exito' => 'Pregunta creada correctamente.', - 'idPregunta' => $idPregunta - ]); - - break; - - - - case 'obtenerPreguntasPorCategoria': - - $idCategoria = intval($_POST['idCategoria'] ?? 0); - $limite = intval($_POST['limite'] ?? 10); - - $preguntas = Pregunta::obtenerPorCategoria($idCategoria, $limite); - - // Si ha devuelto un array de errores (formato ['error'=>...]) lo mandamos tal cual - if (isset($preguntas['error'])) { - echo json_encode($preguntas); - break; - } - - // Convertimos cada objeto Pregunta en un array simple para poder mandarlo en JSON - $listado = []; - foreach ($preguntas as $p) { - $listado[] = [ - 'idPregunta' => $p->getIdPregunta(), - 'idCategoria' => $p->getIdCategoria(), - 'nombrePregunta' => $p->getNombrePregunta(), - 'respuestas' => $p->getRespuestas() - ]; - } - - echo json_encode($listado); - break; -} + 'La categoría, la pregunta y todas las respuestas son obligatorias.' + ]); + + break; + } + + + /* + * ========================================== + * 1. CREAMOS LA PREGUNTA + * ========================================== + */ + + $pregunta = new Pregunta( + $idCategoria, + $nombrePregunta + ); + + $resultadoPregunta = $pregunta->guardar(); + + + if (isset($resultadoPregunta['error'])) { + + echo json_encode($resultadoPregunta); + + break; + } + + + // Obtenemos el ID de la pregunta creada + $idPregunta = (int)$resultadoPregunta['exito_tecnico']; + + + /* + * ========================================== + * 2. CREAMOS LAS RESPUESTAS + * ========================================== + */ + + $respuestas = [ + [ + 'texto' => $respuestaCorrecta, + 'correcta' => 1 + ], + [ + 'texto' => $respuestaIncorrecta1, + 'correcta' => 0 + ], + [ + 'texto' => $respuestaIncorrecta2, + 'correcta' => 0 + ], + [ + 'texto' => $respuestaIncorrecta3, + 'correcta' => 0 + ] + ]; + + + foreach ($respuestas as $respuesta) { + + $objRespuesta = new Respuesta( + null, + $idPregunta, + $respuesta['texto'], + $respuesta['correcta'] + ); + + + $resultadoRespuesta = $objRespuesta->insertar(); + + + if (isset($resultadoRespuesta['error'])) { + + echo json_encode($resultadoRespuesta); + + break 2; + } + } + + + /* + * ========================================== + * 3. TODO CORRECTO + * ========================================== + */ + + echo json_encode([ + 'exito' => 'Pregunta creada correctamente.', + 'idPregunta' => $idPregunta + ]); + + break; + + + + case 'obtenerPreguntasPorCategoria': + + $idCategoria = intval($_POST['idCategoria'] ?? 0); + $limite = intval($_POST['limite'] ?? 10); + + $preguntas = Pregunta::obtenerPorCategoria($idCategoria, $limite); + + // Si ha devuelto un array de errores (formato ['error'=>...]) lo mandamos tal cual + if (isset($preguntas['error'])) { + echo json_encode($preguntas); + break; + } + + // Convertimos cada objeto Pregunta en un array simple para poder mandarlo en JSON + $listado = []; + foreach ($preguntas as $p) { + $listado[] = [ + 'idPregunta' => $p->getIdPregunta(), + 'idCategoria' => $p->getIdCategoria(), + 'nombrePregunta' => $p->getNombrePregunta(), + 'respuestas' => $p->getRespuestas() + ]; + } + + echo json_encode($listado); + break; +} diff --git a/controladores/ControladorRespuesta.php b/controladores/controladorRespuesta.php similarity index 96% rename from controladores/ControladorRespuesta.php rename to controladores/controladorRespuesta.php index e9b592b..a33cef0 100644 --- a/controladores/ControladorRespuesta.php +++ b/controladores/controladorRespuesta.php @@ -1,71 +1,71 @@ - 'La pregunta y el texto de la respuesta son obligatorios']); - break; - } - - $respuesta = new Respuesta(null, $idPregunta, $nombreRespuesta, $correcta); - $resultado = $respuesta->insertar(); - - echo json_encode($resultado); - break; - - - case 'listarRespuestas': - - $respuesta = new Respuesta(); - $resultado = $respuesta->listar(); - - echo json_encode($resultado); - break; - - - case 'listarRespuestasPorPregunta': - - $idPregunta = intval($_POST['idPregunta'] ?? 0); - - $respuesta = new Respuesta(null, $idPregunta); - $resultado = $respuesta->listarPorPregunta(); - - echo json_encode($resultado); - break; - - - case 'editarRespuesta': - - $idRespuesta = intval($_POST['idRespuesta'] ?? 0); - $idPregunta = intval($_POST['idPregunta'] ?? 0); - $nombreRespuesta = trim($_POST['nombreRespuesta'] ?? ''); - $correcta = intval($_POST['correcta'] ?? 0); - - $respuesta = new Respuesta($idRespuesta, $idPregunta, $nombreRespuesta, $correcta); - $resultado = $respuesta->editar(); - - echo json_encode($resultado); - break; - - - case 'borrarRespuesta': - - $idRespuesta = intval($_POST['idRespuesta'] ?? 0); - - $respuesta = new Respuesta($idRespuesta); - $resultado = $respuesta->eliminar(); - - echo json_encode($resultado); - break; - -} + 'La pregunta y el texto de la respuesta son obligatorios']); + break; + } + + $respuesta = new Respuesta(null, $idPregunta, $nombreRespuesta, $correcta); + $resultado = $respuesta->insertar(); + + echo json_encode($resultado); + break; + + + case 'listarRespuestas': + + $respuesta = new Respuesta(); + $resultado = $respuesta->listar(); + + echo json_encode($resultado); + break; + + + case 'listarRespuestasPorPregunta': + + $idPregunta = intval($_POST['idPregunta'] ?? 0); + + $respuesta = new Respuesta(null, $idPregunta); + $resultado = $respuesta->listarPorPregunta(); + + echo json_encode($resultado); + break; + + + case 'editarRespuesta': + + $idRespuesta = intval($_POST['idRespuesta'] ?? 0); + $idPregunta = intval($_POST['idPregunta'] ?? 0); + $nombreRespuesta = trim($_POST['nombreRespuesta'] ?? ''); + $correcta = intval($_POST['correcta'] ?? 0); + + $respuesta = new Respuesta($idRespuesta, $idPregunta, $nombreRespuesta, $correcta); + $resultado = $respuesta->editar(); + + echo json_encode($resultado); + break; + + + case 'borrarRespuesta': + + $idRespuesta = intval($_POST['idRespuesta'] ?? 0); + + $respuesta = new Respuesta($idRespuesta); + $resultado = $respuesta->eliminar(); + + echo json_encode($resultado); + break; + +} diff --git a/controladores/ControladorRespuestaAlmacenada.php b/controladores/controladorRespuestaAlmacenada.php similarity index 95% rename from controladores/ControladorRespuestaAlmacenada.php rename to controladores/controladorRespuestaAlmacenada.php index 138a5e0..6fc44d2 100644 --- a/controladores/ControladorRespuestaAlmacenada.php +++ b/controladores/controladorRespuestaAlmacenada.php @@ -1,65 +1,65 @@ -idPartidaxPregunta = $_POST['idPartidaxPregunta']; - $respuestaAlmacenada->idUsuario = $_SESSION['idUsuario']; - $respuestaAlmacenada->idRespuesta = $_POST['idRespuesta']; - - // Guardamos la respuesta - $respuesta = $respuestaAlmacenada->guardarRespuesta(); - - } else { - - $respuesta = [ - 'error' => 'No hay ninguna sesión iniciada.' - ]; - - } - - echo json_encode($respuesta); - - break; - - - case 'obtenerAciertosUsuarioEnPartida': - - // Comprobamos que haya una sesión iniciada - if (isset($_SESSION['idUsuario'])) { - - $idPartida = $_POST['idPartida']; - $idUsuario = $_SESSION['idUsuario']; - - // Obtenemos los aciertos del usuario en esa partida - $respuesta = RespuestaAlmacenada::obtenerAciertosUsuarioEnPartida( - $idPartida, - $idUsuario - ); - - } else { - - $respuesta = [ - 'error' => 'No hay ninguna sesión iniciada.' - ]; - - } - - echo json_encode($respuesta); - - break; - -}//fin switch - +idPartidaxPregunta = $_POST['idPartidaxPregunta']; + $respuestaAlmacenada->idUsuario = $_SESSION['idUsuario']; + $respuestaAlmacenada->idRespuesta = $_POST['idRespuesta']; + + // Guardamos la respuesta + $respuesta = $respuestaAlmacenada->guardarRespuesta(); + + } else { + + $respuesta = [ + 'error' => 'No hay ninguna sesión iniciada.' + ]; + + } + + echo json_encode($respuesta); + + break; + + + case 'obtenerAciertosUsuarioEnPartida': + + // Comprobamos que haya una sesión iniciada + if (isset($_SESSION['idUsuario'])) { + + $idPartida = $_POST['idPartida']; + $idUsuario = $_SESSION['idUsuario']; + + // Obtenemos los aciertos del usuario en esa partida + $respuesta = RespuestaAlmacenada::obtenerAciertosUsuarioEnPartida( + $idPartida, + $idUsuario + ); + + } else { + + $respuesta = [ + 'error' => 'No hay ninguna sesión iniciada.' + ]; + + } + + echo json_encode($respuesta); + + break; + +}//fin switch + ?> \ No newline at end of file diff --git a/controladores/ControladorUsuario.php b/controladores/controladorUsuario.php similarity index 100% rename from controladores/ControladorUsuario.php rename to controladores/controladorUsuario.php