From 467a8618730987f2b82274197846e506fb906373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor?= Date: Thu, 24 Sep 2026 10:05:39 +0200 Subject: [PATCH] claseVictorDiaz --- clasePartida.php | 332 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 clasePartida.php diff --git a/clasePartida.php b/clasePartida.php new file mode 100644 index 0000000..f1fa8e5 --- /dev/null +++ b/clasePartida.php @@ -0,0 +1,332 @@ +idPartida=$idPartida; + $this->nombrePartida=$nombrePartida; + $this->idUsuario=$idUsuario; + } + + public function insertar(){ + $conexion=conexionBD(); + if(is_array($conexion)){ + return $conexion; + } + try{ + $consulta=$conexion->prepare(" + INSERT INTO partida + (nombrePartida,idUsuario) + VALUES + (:nombrePartida,:idUsuario) + "); + $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 + ]; + } + } + + public function listar(){ + $conexion=conexionBD(); + if(is_array($conexion)){ + return $conexion; + } + 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 + ]; + } + } + + public function buscar(){ + $conexion=conexionBD(); + if(is_array($conexion)){ + return $conexion; + } + try{ + $consulta=$conexion->prepare(" + SELECT * + FROM partida + WHERE idPartida=: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 + ]; + } + } + + public function editar(){ + $conexion=conexionBD(); + if(is_array($conexion)){ + return $conexion; + } + 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->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 + ]; + } + } + + public function eliminar(){ + $conexion=conexionBD(); + if(is_array($conexion)){ + return $conexion; + } + try{ + $consulta=$conexion->prepare(" + DELETE FROM partida + WHERE idPartida=: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 + ]; + } + } + + /** + * 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 + ORDER BY pxp.idPartidaxPregunta + "); + $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 + ]; + } + } + + /** + * 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) + VALUES + (:idPartida,:idPregunta) + "); + $consulta->bindParam(":idPartida",$this->idPartida); + $consulta->bindParam(":idPregunta",$idPregunta); + $consulta->execute(); + 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 + ]; + } + } + + + + //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 + ]; + } + } + + 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 + ]; + } + } + + /** + * 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 + ]; + } + } + + + + + + public function preguntaAsignada($idPregunta){ + $conexion=conexionBD(); + + if(is_array($conexion)){ + return $conexion; + } + + 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->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 + ]; + } + } + +} +?> \ No newline at end of file