332 lines
10 KiB
PHP
332 lines
10 KiB
PHP
<?php
|
|
require_once '../includes/conexionBD.php';
|
|
|
|
class Partida{
|
|
|
|
public $idPartida;
|
|
public $nombrePartida;
|
|
public $idUsuario;
|
|
|
|
public function __construct(
|
|
$idPartida=null,
|
|
$nombrePartida=null,
|
|
$idUsuario=null
|
|
){
|
|
$this->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
|
|
];
|
|
}
|
|
}
|
|
|
|
}
|
|
?>
|