diff --git a/clases/ClaseCategoria.php b/clases/ClaseCategoria.php index 8890ec6..43687b2 100644 --- a/clases/ClaseCategoria.php +++ b/clases/ClaseCategoria.php @@ -1,5 +1,6 @@ idPartida = $idPartida; $this->nombrePartida = $nombrePartida; $this->idUsuario = $idUsuario; - $this->estado = $estado; - $this->preguntaActual = $preguntaActual; } - - - public function insertar() { $conexion = conexionBD(); - if (is_array($conexion)) { return $conexion; } - try { - $consulta = $conexion->prepare(" INSERT INTO partida - ( - nombrePartida, - idUsuario, - estado, - preguntaActual - ) + (nombrePartida,idUsuario) VALUES - ( - :nombrePartida, - :idUsuario, - :estado, - :preguntaActual - ) + (:nombrePartida,:idUsuario) "); - - $consulta->bindParam( - ":nombrePartida", - $this->nombrePartida - ); - - $consulta->bindParam( - ":idUsuario", - $this->idUsuario - ); - - $consulta->bindParam( - ":estado", - $this->estado - ); - - $consulta->bindParam( - ":preguntaActual", - $this->preguntaActual, - PDO::PARAM_INT - ); - + $consulta->bindParam(":nombrePartida", $this->nombrePartida); + $consulta->bindParam(":idUsuario", $this->idUsuario); $consulta->execute(); - return [ "exito" => "La partida se creó correctamente.", "exito_tecnico" => $conexion->lastInsertId() ]; - } catch (PDOException $error) { - return [ "error" => "Ocurrió un error al guardar la partida.", - "error_tecnico" => $error->getMessage() + 'error_tecnico' => $error->getMessage() ]; } } - - - public function listar() { $conexion = conexionBD(); - if (is_array($conexion)) { return $conexion; } - try { - - $consulta = $conexion->prepare(" - SELECT * - FROM partida - "); - + $consulta = $conexion->prepare("SELECT * FROM partida"); $consulta->execute(); - return $consulta->fetchAll(PDO::FETCH_ASSOC); - } catch (PDOException $error) { - return [ "error" => "Ocurrió un error al obtener el listado.", - "error_tecnico" => $error->getMessage() + 'error_tecnico' => $error->getMessage() ]; } } - - - public function buscar() { $conexion = conexionBD(); - if (is_array($conexion)) { return $conexion; } - try { - $consulta = $conexion->prepare(" SELECT * FROM partida - WHERE idPartida = :idPartida + WHERE idPartida=:idPartida "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - + $consulta->bindParam(":idPartida", $this->idPartida); $consulta->execute(); - return $consulta->fetch(PDO::FETCH_ASSOC); - } catch (PDOException $error) { - return [ "error" => "Ocurrió un error al buscar la partida.", - "error_tecnico" => $error->getMessage() + 'error_tecnico' => $error->getMessage() ]; } } - - - public function editar() { $conexion = conexionBD(); - if (is_array($conexion)) { return $conexion; } - try { - $consulta = $conexion->prepare(" UPDATE partida SET - nombrePartida = :nombrePartida, - idUsuario = :idUsuario, - estado = :estado, - preguntaActual = :preguntaActual - WHERE idPartida = :idPartida + nombrePartida=:nombrePartida, + idUsuario=:idUsuario + WHERE idPartida=:idPartida "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->bindParam( - ":nombrePartida", - $this->nombrePartida - ); - - $consulta->bindParam( - ":idUsuario", - $this->idUsuario - ); - - $consulta->bindParam( - ":estado", - $this->estado - ); - - $consulta->bindParam( - ":preguntaActual", - $this->preguntaActual, - PDO::PARAM_INT - ); - + $consulta->bindParam(":idPartida", $this->idPartida); + $consulta->bindParam(":nombrePartida", $this->nombrePartida); + $consulta->bindParam(":idUsuario", $this->idUsuario); $consulta->execute(); - return [ "exito" => "La partida se editó correctamente.", "exito_tecnico" => $this->idPartida ]; - } catch (PDOException $error) { - return [ "error" => "Ocurrió un error al editar la partida.", - "error_tecnico" => $error->getMessage() + 'error_tecnico' => $error->getMessage() ]; } } - - - public function eliminar() { $conexion = conexionBD(); - if (is_array($conexion)) { return $conexion; } - try { - $consulta = $conexion->prepare(" DELETE FROM partida - WHERE idPartida = :idPartida + WHERE idPartida=:idPartida "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - + $consulta->bindParam(":idPartida", $this->idPartida); $consulta->execute(); - return [ "exito" => "La partida se eliminó correctamente.", "exito_tecnico" => $this->idPartida ]; - } catch (PDOException $error) { - return [ "error" => "No se pudo eliminar la partida.", - "error_tecnico" => $error->getMessage() + 'error_tecnico' => $error->getMessage() ]; } } - - - + /** + * Devuelve las preguntas asignadas a la partida, junto con el + * idPartidaxPregunta (necesario para guardar respuestas después). + */ public function getPreguntas() { $conexion = conexionBD(); - if (is_array($conexion)) { return $conexion; } - try { - $consulta = $conexion->prepare(" SELECT pxp.idPartidaxPregunta, p.* FROM partidaxpregunta pxp INNER JOIN pregunta p - ON pxp.idPregunta = p.idPregunta - WHERE pxp.idPartida = :idPartida + ON pxp.idPregunta=p.idPregunta + WHERE pxp.idPartida=:idPartida ORDER BY pxp.idPartidaxPregunta "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - + $consulta->bindParam(":idPartida", $this->idPartida); $consulta->execute(); - return $consulta->fetchAll(PDO::FETCH_ASSOC); - } catch (PDOException $error) { - return [ - "error" => - "Ocurrió un error al recuperar las preguntas de la partida.", - "error_tecnico" => $error->getMessage() + "error" => "Ocurrió un error al recuperar las preguntas de la partida.", + 'error_tecnico' => $error->getMessage() ]; } } - - - + /** + * Asocia una pregunta ya existente a esta partida. + */ public function asignarPregunta($idPregunta) { $conexion = conexionBD(); - if (is_array($conexion)) { return $conexion; } - try { - $consulta = $conexion->prepare(" INSERT INTO partidaxpregunta - (idPartida, idPregunta) + (idPartida,idPregunta) VALUES - (:idPartida, :idPregunta) + (:idPartida,:idPregunta) "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->bindParam( - ":idPregunta", - $idPregunta - ); - + $consulta->bindParam(":idPartida", $this->idPartida); + $consulta->bindParam(":idPregunta", $idPregunta); $consulta->execute(); - return [ - "exito" => - "La pregunta se asignó correctamente.", - "exito_tecnico" => - $conexion->lastInsertId() + "exito" => "La pregunta se asignó correctamente.", + "exito_tecnico" => $conexion->lastInsertId() ]; - } catch (PDOException $error) { - return [ - "error" => - "Ocurrió un error al asignar la pregunta.", - "error_tecnico" => - $error->getMessage() + "error" => "Ocurrió un error al asignar la pregunta.", + 'error_tecnico' => $error->getMessage() + ]; + } + } + //Cuenta cuántas preguntas tiene la partida en total. Es la primera mitad de la comprobación "¿ha terminado el usuario de jugar?". + public function contarPreguntasAsignadas() + { + $conexion = conexionBD(); + if (is_array($conexion)) { + return $conexion; + } + try { + $consulta = $conexion->prepare(" + SELECT COUNT(*) AS total + FROM partidaxpregunta + WHERE idPartida=:idPartida + "); + $consulta->bindParam(":idPartida", $this->idPartida); + $consulta->execute(); + $fila = $consulta->fetch(PDO::FETCH_ASSOC); + return (int)$fila["total"]; + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al contar las preguntas.", + 'error_tecnico' => $error->getMessage() ]; } } + public function contarRespuestasUsuario($idUsuario) + { + $conexion = conexionBD(); + if (is_array($conexion)) { + return $conexion; + } + try { + $consulta = $conexion->prepare(" + SELECT COUNT(*) AS total + FROM respuestaalmacenada ra + INNER JOIN partidaxpregunta pxp + ON ra.idPartidaxPregunta=pxp.idPartidaxPregunta + WHERE pxp.idPartida=:idPartida + AND ra.idUsuario=:idUsuario + "); + $consulta->bindParam(":idPartida", $this->idPartida); + $consulta->bindParam(":idUsuario", $idUsuario); + $consulta->execute(); + $fila = $consulta->fetch(PDO::FETCH_ASSOC); + return (int)$fila["total"]; + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al contar las respuestas del usuario.", + 'error_tecnico' => $error->getMessage() + ]; + } + } + /** + * Sustituye al antiguo campo `terminada`: compara cuántas preguntas + * tiene la partida contra cuántas ha respondido este usuario. + */ + public function estaFinalizadaParaUsuario($idUsuario) + { + $totalPreguntas = $this->contarPreguntasAsignadas(); + if (is_array($totalPreguntas)) { + return $totalPreguntas; + } + $totalRespondidas = $this->contarRespuestasUsuario($idUsuario); + if (is_array($totalRespondidas)) { + return $totalRespondidas; + } + return $totalPreguntas > 0 && $totalPreguntas === $totalRespondidas; + } + /** + * Partidas creadas por un usuario, de más reciente a más antigua. + */ + public function listarDelUsuario() + { + $conexion = conexionBD(); + if (is_array($conexion)) { + return $conexion; + } + try { + $consulta = $conexion->prepare(" + SELECT * + FROM partida + WHERE idUsuario=:idUsuario + ORDER BY idPartida DESC + "); + $consulta->bindParam(":idUsuario", $this->idUsuario); + $consulta->execute(); + return $consulta->fetchAll(PDO::FETCH_ASSOC); + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al recuperar las partidas del usuario.", + 'error_tecnico' => $error->getMessage() + ]; + } + } public function preguntaAsignada($idPregunta) { @@ -371,303 +310,117 @@ class Partida } try { - $consulta = $conexion->prepare(" SELECT COUNT(*) AS total FROM partidaxpregunta - WHERE idPartida = :idPartida - AND idPregunta = :idPregunta + WHERE idPartida=:idPartida + AND idPregunta=:idPregunta "); - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->bindParam( - ":idPregunta", - $idPregunta - ); - + $consulta->bindParam(":idPartida", $this->idPartida); + $consulta->bindParam(":idPregunta", $idPregunta); $consulta->execute(); $fila = $consulta->fetch(PDO::FETCH_ASSOC); return (int)$fila["total"] > 0; - } catch (PDOException $error) { return [ - "error" => - "Ocurrió un error al comprobar la pregunta.", - "error_tecnico" => - $error->getMessage() + "error" => "Ocurrió un error al comprobar la pregunta.", + 'error_tecnico' => $error->getMessage() ]; } } - - - - - public function contarPreguntasAsignadas() - { - $conexion = conexionBD(); - + /** + * Vincula un equipo a esta partida en la tabla intermedia 'equipoxpartida'. + * Permite registrar qué grupos están participando en este torneo. + */ + public function registrarEquipoEnPartida($idEquipo) { + $conexion = conexionBD(); // Obtenemos la conexión modular del proyecto + if (is_array($conexion)) { - return $conexion; + return $conexion; // Si hay error en la conexión, lo devuelve } - + try { - + // Preparamos la consulta para insertar la relación en la tabla intermedia real $consulta = $conexion->prepare(" - SELECT COUNT(*) AS total - FROM partidaxpregunta - WHERE idPartida = :idPartida - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->execute(); - - $fila = $consulta->fetch(PDO::FETCH_ASSOC); - - return (int)$fila["total"]; - - } catch (PDOException $error) { - - return [ - "error" => - "Ocurrió un error al contar las preguntas.", - "error_tecnico" => - $error->getMessage() - ]; - } - } - - - - - public function listarDelUsuario() - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $consulta = $conexion->prepare(" - SELECT * - FROM partida - WHERE idUsuario = :idUsuario - ORDER BY idPartida DESC - "); - - $consulta->bindParam( - ":idUsuario", - $this->idUsuario - ); - - $consulta->execute(); - - return $consulta->fetchAll(PDO::FETCH_ASSOC); - - } catch (PDOException $error) { - - return [ - "error" => - "Ocurrió un error al recuperar las partidas del usuario.", - "error_tecnico" => - $error->getMessage() - ]; - } - } - - - - public function contarRespuestasUsuario($idUsuario) - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $consulta = $conexion->prepare(" - SELECT COUNT(*) AS total - FROM respuestaalmacenada ra - INNER JOIN partidaxpregunta pxp - ON ra.idPartidaxPregunta = - pxp.idPartidaxPregunta - WHERE pxp.idPartida = :idPartida - AND ra.idUsuario = :idUsuario - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->bindParam( - ":idUsuario", - $idUsuario - ); - - $consulta->execute(); - - $fila = $consulta->fetch(PDO::FETCH_ASSOC); - - return (int)$fila["total"]; - - } catch (PDOException $error) { - - return [ - "error" => - "Ocurrió un error al contar las respuestas del usuario.", - "error_tecnico" => - $error->getMessage() - ]; - } - } - - - - - public function estaFinalizadaParaUsuario($idUsuario) - { - $totalPreguntas = - $this->contarPreguntasAsignadas(); - - if (is_array($totalPreguntas)) { - return $totalPreguntas; - } - - $totalRespondidas = - $this->contarRespuestasUsuario($idUsuario); - - if (is_array($totalRespondidas)) { - return $totalRespondidas; - } - - return - $totalPreguntas > 0 && - $totalPreguntas === $totalRespondidas; - } - - - - - public function registrarEquipoEnPartida($idEquipo) - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $consulta = $conexion->prepare(" - INSERT INTO equipoxpartida - (idPartida, idEquipo) - VALUES + INSERT INTO equipoxpartida + (idPartida, idEquipo) + VALUES (:idPartida, :idEquipo) "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->bindParam( - ":idEquipo", - $idEquipo - ); - + + // Vinculamos los parámetros con el objeto de la partida actual y el equipo recibido + $consulta->bindParam(":idPartida", $this->idPartida); + $consulta->bindParam(":idEquipo", $idEquipo); $consulta->execute(); - + return [ - "exito" => - "El equipo se vinculó a la partida correctamente.", - "exito_tecnico" => - $conexion->lastInsertId() + "exito" => "El equipo se vinculó a la partida correctamente.", + "exito_tecnico" => $conexion->lastInsertId() ]; - } catch (PDOException $error) { - + // Capturamos el error extrayendo solo el mensaje de texto limpio return [ - "error" => - "Ocurrió un error al asignar el equipo a la partida.", - "error_tecnico" => - $error->getMessage() + "error" => "Ocurrió un error al asignar el equipo a la partida.", + "error_tecnico" => $error->getMessage() ]; } } - - - - public function getEquiposParticipantes() - { + /** + * Obtiene todos los equipos que están compitiendo en esta partida. + * Es útil para mostrar la lista de rivales antes de empezar a responder. + */ + public function getEquiposParticipantes() { $conexion = conexionBD(); - + if (is_array($conexion)) { return $conexion; } - + try { - + // Hacemos un INNER JOIN para traer los nombres de los equipos desde la tabla intermedia $consulta = $conexion->prepare(" - SELECT + SELECT exp.idEquipoxPartida, e.idEquipo, e.nombreEquipo FROM equipoxpartida exp - INNER JOIN equipo e + INNER JOIN equipo e ON exp.idEquipo = e.idEquipo WHERE exp.idPartida = :idPartida ORDER BY e.nombreEquipo ASC "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - + + $consulta->bindParam(":idPartida", $this->idPartida); $consulta->execute(); - - return $consulta->fetchAll(PDO::FETCH_ASSOC); - + + return $consulta->fetchAll(PDO::FETCH_ASSOC); // Devuelve el array con los equipos rivales } catch (PDOException $error) { - return [ - "error" => - "Ocurrió un error al recuperar los equipos de la partida.", - "error_tecnico" => - $error->getMessage() + "error" => "Ocurrió un error al recuperar los equipos de la partida.", + "error_tecnico" => $error->getMessage() ]; } } - - - - public function getJugadoresDeLaPartida() - { + /** + * Obtiene todos los jugadores reales (Usuarios) que están jugando en esta partida. + * Utiliza la tabla 'equipoxusuario' en SQL para cruzar los datos. + */ + public function getJugadoresDeLaPartida() { $conexion = conexionBD(); - + if (is_array($conexion)) { return $conexion; } - + try { - + // Cruza la partida con los equipos, y luego los equipos con los usuarios + // para saber los nombres de todas las personas que están jugando el torneo. $consulta = $conexion->prepare(" SELECT DISTINCT u.idUsuario, @@ -675,588 +428,25 @@ class Partida u.email, e.nombreEquipo FROM equipoxpartida exp - INNER JOIN equipoxusuario exu + INNER JOIN equipoxusuario exu ON exp.idEquipo = exu.idEquipo - INNER JOIN usuario u + INNER JOIN usuario u ON exu.idUsuario = u.idUsuario - INNER JOIN equipo e + INNER JOIN equipo e ON exu.idEquipo = e.idEquipo WHERE exp.idPartida = :idPartida "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - + + $consulta->bindParam(":idPartida", $this->idPartida); $consulta->execute(); - + return $consulta->fetchAll(PDO::FETCH_ASSOC); - } catch (PDOException $error) { - return [ - "error" => - "Ocurrió un error al obtener la lista de jugadores.", - "error_tecnico" => - $error->getMessage() + "error" => "Ocurrió un error al obtener la lista de jugadores.", + "error_tecnico" => $error->getMessage() ]; } } - - - - public function iniciar() - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - // Comprobamos el estado actual. - - $consulta = $conexion->prepare(" - SELECT estado - FROM partida - WHERE idPartida = :idPartida - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->execute(); - - $partida = $consulta->fetch(PDO::FETCH_ASSOC); - - if (!$partida) { - return [ - "error" => "La partida no existe." - ]; - } - - - // Solo podemos iniciar una partida - // que esté esperando. - - if ($partida['estado'] !== 'esperando') { - return [ - "error" => - "La partida ya ha sido iniciada o finalizada." - ]; - } - - - // Comprobamos que tenga preguntas. - - $numeroPreguntas = - $this->contarPreguntasAsignadas(); - - if (is_array($numeroPreguntas)) { - return $numeroPreguntas; - } - - if ($numeroPreguntas <= 0) { - return [ - "error" => - "No se puede iniciar una partida sin preguntas." - ]; - } - - - // Ponemos la partida en estado "jugando" - // y empezamos por la primera pregunta. - - $consulta = $conexion->prepare(" - UPDATE partida - SET - estado = 'jugando', - preguntaActual = 1 - WHERE idPartida = :idPartida - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->execute(); - - return [ - "exito" => - "La partida se ha iniciado correctamente.", - "idPartida" => - $this->idPartida, - "preguntaActual" => - 1 - ]; - - } catch (PDOException $error) { - - return [ - "error" => - "Ocurrió un error al iniciar la partida.", - "error_tecnico" => - $error->getMessage() - ]; - } - } - - - - - public function getPreguntaActual() - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $consulta = $conexion->prepare(" - SELECT - preguntaActual, - estado - FROM partida - WHERE idPartida = :idPartida - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->execute(); - - $datosPartida = - $consulta->fetch(PDO::FETCH_ASSOC); - - if (!$datosPartida) { - return [ - "error" => "La partida no existe." - ]; - } - - - if ($datosPartida['estado'] === 'esperando') { - return [ - "estado" => "esperando", - "pregunta" => null - ]; - } - - - if ($datosPartida['estado'] === 'finalizada') { - return [ - "estado" => "finalizada", - "pregunta" => null - ]; - } - - - $numeroPregunta = - (int)$datosPartida['preguntaActual']; - - - $consulta = $conexion->prepare(" - SELECT - pxp.idPartidaxPregunta, - pxp.idPregunta, - p.* - FROM partidaxpregunta pxp - INNER JOIN pregunta p - ON pxp.idPregunta = p.idPregunta - WHERE pxp.idPartida = :idPartida - ORDER BY pxp.idPartidaxPregunta - LIMIT 1 OFFSET :offset - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - // SQL empieza a contar desde 0, - // mientras que preguntaActual empieza desde 1. - - $offset = $numeroPregunta - 1; - - $consulta->bindValue( - ":offset", - $offset, - PDO::PARAM_INT - ); - - $consulta->execute(); - - $pregunta = - $consulta->fetch(PDO::FETCH_ASSOC); - - if (!$pregunta) { - return [ - "error" => - "No se ha encontrado la pregunta actual." - ]; - } - - return [ - "estado" => "jugando", - "numeroPregunta" => $numeroPregunta, - "pregunta" => $pregunta - ]; - - } catch (PDOException $error) { - - return [ - "error" => - "Ocurrió un error al obtener la pregunta actual.", - "error_tecnico" => - $error->getMessage() - ]; - } - } - - - - - public function siguientePregunta() - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $consulta = $conexion->prepare(" - SELECT - estado, - preguntaActual - FROM partida - WHERE idPartida = :idPartida - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->execute(); - - $datos = - $consulta->fetch(PDO::FETCH_ASSOC); - - if (!$datos) { - return [ - "error" => "La partida no existe." - ]; - } - - if ($datos['estado'] !== 'jugando') { - return [ - "error" => - "La partida no está actualmente en juego." - ]; - } - - - $totalPreguntas = - $this->contarPreguntasAsignadas(); - - if (is_array($totalPreguntas)) { - return $totalPreguntas; - } - - - $siguiente = - (int)$datos['preguntaActual'] + 1; - - - if ($siguiente > $totalPreguntas) { - - $consulta = $conexion->prepare(" - UPDATE partida - SET - estado = 'finalizada' - WHERE idPartida = :idPartida - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->execute(); - - return [ - "exito" => - "La partida ha finalizado.", - "estado" => - "finalizada" - ]; - } - - - $consulta = $conexion->prepare(" - UPDATE partida - SET - preguntaActual = :preguntaActual - WHERE idPartida = :idPartida - "); - - $consulta->bindParam( - ":preguntaActual", - $siguiente, - PDO::PARAM_INT - ); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->execute(); - - return [ - "exito" => - "Se ha avanzado a la siguiente pregunta.", - "preguntaActual" => - $siguiente - ]; - - } catch (PDOException $error) { - - return [ - "error" => - "Ocurrió un error al pasar a la siguiente pregunta.", - "error_tecnico" => - $error->getMessage() - ]; - } - } - - - - - public function registrarRespuesta( - $idUsuario, - $idPregunta, - $idRespuesta - ) { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - // Comprobamos que la pregunta pertenezca - // a esta partida. - - $consulta = $conexion->prepare(" - SELECT idPartidaxPregunta - FROM partidaxpregunta - WHERE idPartida = :idPartida - AND idPregunta = :idPregunta - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->bindParam( - ":idPregunta", - $idPregunta - ); - - $consulta->execute(); - - $pregunta = - $consulta->fetch(PDO::FETCH_ASSOC); - - if (!$pregunta) { - return [ - "error" => - "La pregunta no pertenece a esta partida." - ]; - } - - $idPartidaxPregunta = - $pregunta['idPartidaxPregunta']; - - - // Comprobamos si el usuario ya ha respondido. - - $consulta = $conexion->prepare(" - SELECT idRespuestaAlmacenada - FROM respuestaalmacenada - WHERE idPartidaxPregunta = - :idPartidaxPregunta - AND idUsuario = :idUsuario - "); - - $consulta->bindParam( - ":idPartidaxPregunta", - $idPartidaxPregunta - ); - - $consulta->bindParam( - ":idUsuario", - $idUsuario - ); - - $consulta->execute(); - - $respuestaExistente = - $consulta->fetch(PDO::FETCH_ASSOC); - - if ($respuestaExistente) { - return [ - "error" => - "Ya has respondido esta pregunta." - ]; - } - - - // Comprobamos si existe ya alguien que haya - // respondido primero. - - $consulta = $conexion->prepare(" - SELECT COUNT(*) AS total - FROM respuestaalmacenada - WHERE idPartidaxPregunta = - :idPartidaxPregunta - AND primero = 1 - "); - - $consulta->bindParam( - ":idPartidaxPregunta", - $idPartidaxPregunta - ); - - $consulta->execute(); - - $fila = - $consulta->fetch(PDO::FETCH_ASSOC); - - $primero = - ((int)$fila['total'] === 0) ? 1 : 0; - - - // Guardamos la respuesta. - - $consulta = $conexion->prepare(" - INSERT INTO respuestaalmacenada - ( - idPartidaxPregunta, - idUsuario, - idRespuesta, - primero - ) - VALUES - ( - :idPartidaxPregunta, - :idUsuario, - :idRespuesta, - :primero - ) - "); - - $consulta->bindParam( - ":idPartidaxPregunta", - $idPartidaxPregunta - ); - - $consulta->bindParam( - ":idUsuario", - $idUsuario - ); - - $consulta->bindParam( - ":idRespuesta", - $idRespuesta - ); - - $consulta->bindParam( - ":primero", - $primero - ); - - $consulta->execute(); - - return [ - "exito" => - "La respuesta se ha registrado correctamente.", - "primero" => - $primero == 1 - ]; - - } catch (PDOException $error) { - - return [ - "error" => - "Ocurrió un error al registrar la respuesta.", - "error_tecnico" => - $error->getMessage() - ]; - } - } - - - - - public function finalizar() - { - $conexion = conexionBD(); - - if (is_array($conexion)) { - return $conexion; - } - - try { - - $consulta = $conexion->prepare(" - UPDATE partida - SET - estado = 'finalizada' - WHERE idPartida = :idPartida - "); - - $consulta->bindParam( - ":idPartida", - $this->idPartida - ); - - $consulta->execute(); - - return [ - "exito" => - "La partida ha finalizado correctamente.", - "estado" => - "finalizada" - ]; - - } catch (PDOException $error) { - - return [ - "error" => - "Ocurrió un error al finalizar la partida.", - "error_tecnico" => - $error->getMessage() - ]; - } - } } - -?> - diff --git a/clases/ClasePregunta.php b/clases/ClasePregunta.php index cfd2049..b9de2ac 100644 --- a/clases/ClasePregunta.php +++ b/clases/ClasePregunta.php @@ -1,5 +1,6 @@