diff --git a/clases/ClasePartida.php b/clases/ClasePartida.php index 84091fb..16f4dae 100644 --- a/clases/ClasePartida.php +++ b/clases/ClasePartida.php @@ -1,137 +1,143 @@ idPartida=$idPartida; - $this->nombrePartida=$nombrePartida; - $this->idUsuario=$idUsuario; + $idPartida = null, + $nombrePartida = null, + $idUsuario = null + ) { + $this->idPartida = $idPartida; + $this->nombrePartida = $nombrePartida; + $this->idUsuario = $idUsuario; } - public function insertar(){ - $conexion=conexionBD(); - if(is_array($conexion)){ + public function insertar() + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" INSERT INTO partida (nombrePartida,idUsuario) VALUES (:nombrePartida,:idUsuario) "); - $consulta->bindParam(":nombrePartida",$this->nombrePartida); - $consulta->bindParam(":idUsuario",$this->idUsuario); + $consulta->bindParam(":nombrePartida", $this->nombrePartida); + $consulta->bindParam(":idUsuario", $this->idUsuario); $consulta->execute(); - return[ - "exito"=>"La partida se creó correctamente.", - "exito_tecnico"=>$conexion->lastInsertId() + 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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al guardar la partida.", + "error_tecnico" => $error ]; } } - public function listar(){ - $conexion=conexionBD(); - if(is_array($conexion)){ + public function listar() + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare("SELECT * FROM partida"); + try { + $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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al obtener el listado.", + "error_tecnico" => $error ]; } } - public function buscar(){ - $conexion=conexionBD(); - if(is_array($conexion)){ + public function buscar() + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" SELECT * FROM partida 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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al buscar la partida.", + "error_tecnico" => $error ]; } } - public function editar(){ - $conexion=conexionBD(); - if(is_array($conexion)){ + public function editar() + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" UPDATE partida SET nombrePartida=:nombrePartida, idUsuario=:idUsuario WHERE idPartida=:idPartida "); - $consulta->bindParam(":idPartida",$this->idPartida); - $consulta->bindParam(":nombrePartida",$this->nombrePartida); - $consulta->bindParam(":idUsuario",$this->idUsuario); + $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 + 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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al editar la partida.", + "error_tecnico" => $error ]; } } - public function eliminar(){ - $conexion=conexionBD(); - if(is_array($conexion)){ + public function eliminar() + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" DELETE FROM partida 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 + 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 + } catch (PDOException $error) { + return [ + "error" => "No se pudo eliminar la partida.", + "error_tecnico" => $error ]; } } @@ -140,13 +146,14 @@ class Partida{ * 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)){ + public function getPreguntas() + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" SELECT pxp.idPartidaxPregunta, p.* @@ -156,13 +163,13 @@ class Partida{ 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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al recuperar las preguntas de la partida.", + "error_tecnico" => $error ]; } } @@ -170,66 +177,66 @@ class Partida{ /** * Asocia una pregunta ya existente a esta partida. */ - public function asignarPregunta($idPregunta){ - $conexion=conexionBD(); - if(is_array($conexion)){ + public function asignarPregunta($idPregunta) + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" INSERT INTO partidaxpregunta (idPartida,idPregunta) VALUES (: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() + return [ + "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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al asignar la pregunta.", + "error_tecnico" => $error ]; } } - - - //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)){ + public function contarPreguntasAsignadas() + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" SELECT COUNT(*) AS total FROM partidaxpregunta WHERE idPartida=:idPartida "); - $consulta->bindParam(":idPartida",$this->idPartida); + $consulta->bindParam(":idPartida", $this->idPartida); $consulta->execute(); - $fila=$consulta->fetch(PDO::FETCH_ASSOC); + $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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al contar las preguntas.", + "error_tecnico" => $error ]; } } - public function contarRespuestasUsuario($idUsuario){ - $conexion=conexionBD(); - if(is_array($conexion)){ + public function contarRespuestasUsuario($idUsuario) + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" SELECT COUNT(*) AS total FROM respuestaalmacenada ra INNER JOIN partidaxpregunta pxp @@ -237,15 +244,15 @@ class Partida{ WHERE pxp.idPartida=:idPartida AND ra.idUsuario=:idUsuario "); - $consulta->bindParam(":idPartida",$this->idPartida); - $consulta->bindParam(":idUsuario",$idUsuario); + $consulta->bindParam(":idPartida", $this->idPartida); + $consulta->bindParam(":idUsuario", $idUsuario); $consulta->execute(); - $fila=$consulta->fetch(PDO::FETCH_ASSOC); + $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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al contar las respuestas del usuario.", + "error_tecnico" => $error ]; } } @@ -254,79 +261,192 @@ class Partida{ * 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)){ + public function estaFinalizadaParaUsuario($idUsuario) + { + $totalPreguntas = $this->contarPreguntasAsignadas(); + if (is_array($totalPreguntas)) { return $totalPreguntas; } - $totalRespondidas=$this->contarRespuestasUsuario($idUsuario); - if(is_array($totalRespondidas)){ + $totalRespondidas = $this->contarRespuestasUsuario($idUsuario); + if (is_array($totalRespondidas)) { return $totalRespondidas; } - return $totalPreguntas>0 && $totalPreguntas===$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)){ + public function listarDelUsuario() + { + $conexion = conexionBD(); + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" SELECT * FROM partida WHERE idUsuario=:idUsuario ORDER BY idPartida DESC "); - $consulta->bindParam(":idUsuario",$this->idUsuario); + $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 + } catch (PDOException $error) { + return [ + "error" => "Ocurrió un error al recuperar las partidas del usuario.", + "error_tecnico" => $error ]; } } + public function preguntaAsignada($idPregunta) + { + $conexion = conexionBD(); - - - - public function preguntaAsignada($idPregunta){ - $conexion=conexionBD(); - - if(is_array($conexion)){ + if (is_array($conexion)) { return $conexion; } - try{ - $consulta=$conexion->prepare(" + try { + $consulta = $conexion->prepare(" SELECT COUNT(*) AS total FROM partidaxpregunta 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); + $fila = $consulta->fetch(PDO::FETCH_ASSOC); return (int)$fila["total"] > 0; + } catch (PDOException $error) { - }catch(PDOException $error){ + return [ + "error" => "Ocurrió un error al comprobar la pregunta.", + "error_tecnico" => $error + ]; + } + } + /** + * 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; // 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(" + INSERT INTO equipoxpartida + (idPartida, idEquipo) + VALUES + (:idPartida, :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() + ]; + } 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() + ]; + } + } - return[ - "error"=>"Ocurrió un error al comprobar la pregunta.", - "error_tecnico"=>$error + /** + * 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 + exp.idEquipoxPartida, + e.idEquipo, + e.nombreEquipo + FROM equipoxpartida exp + INNER JOIN equipo e + ON exp.idEquipo = e.idEquipo + WHERE exp.idPartida = :idPartida + ORDER BY e.nombreEquipo ASC + "); + + $consulta->bindParam(":idPartida", $this->idPartida); + $consulta->execute(); + + 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() + ]; + } + } + + /** + * 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, + u.nombreUsuario, + u.email, + e.nombreEquipo + FROM equipoxpartida exp + INNER JOIN equipoxusuario exu + ON exp.idEquipo = exu.idEquipo + INNER JOIN usuario u + ON exu.idUsuario = u.idUsuario + INNER JOIN equipo e + ON exu.idEquipo = e.idEquipo + WHERE exp.idPartida = :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() ]; } } } -?> \ No newline at end of file