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 ]; } } } ?>