Subir archivos a "clases"

This commit is contained in:
2026-09-24 12:37:28 +02:00
parent b9dea2a3ca
commit 9bcb06a651
+272 -152
View File
@@ -1,137 +1,143 @@
<?php <?php
require_once '../includes/conexionBD.php'; require_once '../includes/conexionBD.php';
class Partida{ class Partida
{
public $idPartida; public $idPartida;
public $nombrePartida; public $nombrePartida;
public $idUsuario; public $idUsuario;
public function __construct( public function __construct(
$idPartida=null, $idPartida = null,
$nombrePartida=null, $nombrePartida = null,
$idUsuario=null $idUsuario = null
){ ) {
$this->idPartida=$idPartida; $this->idPartida = $idPartida;
$this->nombrePartida=$nombrePartida; $this->nombrePartida = $nombrePartida;
$this->idUsuario=$idUsuario; $this->idUsuario = $idUsuario;
} }
public function insertar(){ public function insertar()
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
INSERT INTO partida INSERT INTO partida
(nombrePartida,idUsuario) (nombrePartida,idUsuario)
VALUES VALUES
(:nombrePartida,:idUsuario) (:nombrePartida,:idUsuario)
"); ");
$consulta->bindParam(":nombrePartida",$this->nombrePartida); $consulta->bindParam(":nombrePartida", $this->nombrePartida);
$consulta->bindParam(":idUsuario",$this->idUsuario); $consulta->bindParam(":idUsuario", $this->idUsuario);
$consulta->execute(); $consulta->execute();
return[ return [
"exito"=>"La partida se creó correctamente.", "exito" => "La partida se creó correctamente.",
"exito_tecnico"=>$conexion->lastInsertId() "exito_tecnico" => $conexion->lastInsertId()
]; ];
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al guardar la partida.", "error" => "Ocurrió un error al guardar la partida.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
public function listar(){ public function listar()
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare("SELECT * FROM partida"); $consulta = $conexion->prepare("SELECT * FROM partida");
$consulta->execute(); $consulta->execute();
return $consulta->fetchAll(PDO::FETCH_ASSOC); return $consulta->fetchAll(PDO::FETCH_ASSOC);
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al obtener el listado.", "error" => "Ocurrió un error al obtener el listado.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
public function buscar(){ public function buscar()
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
SELECT * SELECT *
FROM partida FROM partida
WHERE idPartida=:idPartida WHERE idPartida=:idPartida
"); ");
$consulta->bindParam(":idPartida",$this->idPartida); $consulta->bindParam(":idPartida", $this->idPartida);
$consulta->execute(); $consulta->execute();
return $consulta->fetch(PDO::FETCH_ASSOC); return $consulta->fetch(PDO::FETCH_ASSOC);
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al buscar la partida.", "error" => "Ocurrió un error al buscar la partida.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
public function editar(){ public function editar()
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
UPDATE partida UPDATE partida
SET SET
nombrePartida=:nombrePartida, nombrePartida=:nombrePartida,
idUsuario=:idUsuario idUsuario=:idUsuario
WHERE idPartida=:idPartida WHERE idPartida=:idPartida
"); ");
$consulta->bindParam(":idPartida",$this->idPartida); $consulta->bindParam(":idPartida", $this->idPartida);
$consulta->bindParam(":nombrePartida",$this->nombrePartida); $consulta->bindParam(":nombrePartida", $this->nombrePartida);
$consulta->bindParam(":idUsuario",$this->idUsuario); $consulta->bindParam(":idUsuario", $this->idUsuario);
$consulta->execute(); $consulta->execute();
return[ return [
"exito"=>"La partida se editó correctamente.", "exito" => "La partida se editó correctamente.",
"exito_tecnico"=>$this->idPartida "exito_tecnico" => $this->idPartida
]; ];
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al editar la partida.", "error" => "Ocurrió un error al editar la partida.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
public function eliminar(){ public function eliminar()
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
DELETE FROM partida DELETE FROM partida
WHERE idPartida=:idPartida WHERE idPartida=:idPartida
"); ");
$consulta->bindParam(":idPartida",$this->idPartida); $consulta->bindParam(":idPartida", $this->idPartida);
$consulta->execute(); $consulta->execute();
return[ return [
"exito"=>"La partida se eliminó correctamente.", "exito" => "La partida se eliminó correctamente.",
"exito_tecnico"=>$this->idPartida "exito_tecnico" => $this->idPartida
]; ];
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"No se pudo eliminar la partida.", "error" => "No se pudo eliminar la partida.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
@@ -140,13 +146,14 @@ class Partida{
* Devuelve las preguntas asignadas a la partida, junto con el * Devuelve las preguntas asignadas a la partida, junto con el
* idPartidaxPregunta (necesario para guardar respuestas después). * idPartidaxPregunta (necesario para guardar respuestas después).
*/ */
public function getPreguntas(){ public function getPreguntas()
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
SELECT SELECT
pxp.idPartidaxPregunta, pxp.idPartidaxPregunta,
p.* p.*
@@ -156,13 +163,13 @@ class Partida{
WHERE pxp.idPartida=:idPartida WHERE pxp.idPartida=:idPartida
ORDER BY pxp.idPartidaxPregunta ORDER BY pxp.idPartidaxPregunta
"); ");
$consulta->bindParam(":idPartida",$this->idPartida); $consulta->bindParam(":idPartida", $this->idPartida);
$consulta->execute(); $consulta->execute();
return $consulta->fetchAll(PDO::FETCH_ASSOC); return $consulta->fetchAll(PDO::FETCH_ASSOC);
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al recuperar las preguntas de la partida.", "error" => "Ocurrió un error al recuperar las preguntas de la partida.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
@@ -170,66 +177,66 @@ class Partida{
/** /**
* Asocia una pregunta ya existente a esta partida. * Asocia una pregunta ya existente a esta partida.
*/ */
public function asignarPregunta($idPregunta){ public function asignarPregunta($idPregunta)
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
INSERT INTO partidaxpregunta INSERT INTO partidaxpregunta
(idPartida,idPregunta) (idPartida,idPregunta)
VALUES VALUES
(:idPartida,:idPregunta) (:idPartida,:idPregunta)
"); ");
$consulta->bindParam(":idPartida",$this->idPartida); $consulta->bindParam(":idPartida", $this->idPartida);
$consulta->bindParam(":idPregunta",$idPregunta); $consulta->bindParam(":idPregunta", $idPregunta);
$consulta->execute(); $consulta->execute();
return[ return [
"exito"=>"La pregunta se asignó correctamente.", "exito" => "La pregunta se asignó correctamente.",
"exito_tecnico"=>$conexion->lastInsertId() "exito_tecnico" => $conexion->lastInsertId()
]; ];
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al asignar la pregunta.", "error" => "Ocurrió un error al asignar la pregunta.",
"error_tecnico"=>$error "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?". //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(){ public function contarPreguntasAsignadas()
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
SELECT COUNT(*) AS total SELECT COUNT(*) AS total
FROM partidaxpregunta FROM partidaxpregunta
WHERE idPartida=:idPartida WHERE idPartida=:idPartida
"); ");
$consulta->bindParam(":idPartida",$this->idPartida); $consulta->bindParam(":idPartida", $this->idPartida);
$consulta->execute(); $consulta->execute();
$fila=$consulta->fetch(PDO::FETCH_ASSOC); $fila = $consulta->fetch(PDO::FETCH_ASSOC);
return (int)$fila["total"]; return (int)$fila["total"];
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al contar las preguntas.", "error" => "Ocurrió un error al contar las preguntas.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
public function contarRespuestasUsuario($idUsuario){ public function contarRespuestasUsuario($idUsuario)
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
SELECT COUNT(*) AS total SELECT COUNT(*) AS total
FROM respuestaalmacenada ra FROM respuestaalmacenada ra
INNER JOIN partidaxpregunta pxp INNER JOIN partidaxpregunta pxp
@@ -237,15 +244,15 @@ class Partida{
WHERE pxp.idPartida=:idPartida WHERE pxp.idPartida=:idPartida
AND ra.idUsuario=:idUsuario AND ra.idUsuario=:idUsuario
"); ");
$consulta->bindParam(":idPartida",$this->idPartida); $consulta->bindParam(":idPartida", $this->idPartida);
$consulta->bindParam(":idUsuario",$idUsuario); $consulta->bindParam(":idUsuario", $idUsuario);
$consulta->execute(); $consulta->execute();
$fila=$consulta->fetch(PDO::FETCH_ASSOC); $fila = $consulta->fetch(PDO::FETCH_ASSOC);
return (int)$fila["total"]; return (int)$fila["total"];
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al contar las respuestas del usuario.", "error" => "Ocurrió un error al contar las respuestas del usuario.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
@@ -254,79 +261,192 @@ class Partida{
* Sustituye al antiguo campo `terminada`: compara cuántas preguntas * Sustituye al antiguo campo `terminada`: compara cuántas preguntas
* tiene la partida contra cuántas ha respondido este usuario. * tiene la partida contra cuántas ha respondido este usuario.
*/ */
public function estaFinalizadaParaUsuario($idUsuario){ public function estaFinalizadaParaUsuario($idUsuario)
$totalPreguntas=$this->contarPreguntasAsignadas(); {
if(is_array($totalPreguntas)){ $totalPreguntas = $this->contarPreguntasAsignadas();
if (is_array($totalPreguntas)) {
return $totalPreguntas; return $totalPreguntas;
} }
$totalRespondidas=$this->contarRespuestasUsuario($idUsuario); $totalRespondidas = $this->contarRespuestasUsuario($idUsuario);
if(is_array($totalRespondidas)){ if (is_array($totalRespondidas)) {
return $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. * Partidas creadas por un usuario, de más reciente a más antigua.
*/ */
public function listarDelUsuario(){ public function listarDelUsuario()
$conexion=conexionBD(); {
if(is_array($conexion)){ $conexion = conexionBD();
if (is_array($conexion)) {
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
SELECT * SELECT *
FROM partida FROM partida
WHERE idUsuario=:idUsuario WHERE idUsuario=:idUsuario
ORDER BY idPartida DESC ORDER BY idPartida DESC
"); ");
$consulta->bindParam(":idUsuario",$this->idUsuario); $consulta->bindParam(":idUsuario", $this->idUsuario);
$consulta->execute(); $consulta->execute();
return $consulta->fetchAll(PDO::FETCH_ASSOC); return $consulta->fetchAll(PDO::FETCH_ASSOC);
}catch(PDOException $error){ } catch (PDOException $error) {
return[ return [
"error"=>"Ocurrió un error al recuperar las partidas del usuario.", "error" => "Ocurrió un error al recuperar las partidas del usuario.",
"error_tecnico"=>$error "error_tecnico" => $error
]; ];
} }
} }
public function preguntaAsignada($idPregunta)
{
$conexion = conexionBD();
if (is_array($conexion)) {
public function preguntaAsignada($idPregunta){
$conexion=conexionBD();
if(is_array($conexion)){
return $conexion; return $conexion;
} }
try{ try {
$consulta=$conexion->prepare(" $consulta = $conexion->prepare("
SELECT COUNT(*) AS total SELECT COUNT(*) AS total
FROM partidaxpregunta FROM partidaxpregunta
WHERE idPartida=:idPartida WHERE idPartida=:idPartida
AND idPregunta=:idPregunta AND idPregunta=:idPregunta
"); ");
$consulta->bindParam(":idPartida",$this->idPartida); $consulta->bindParam(":idPartida", $this->idPartida);
$consulta->bindParam(":idPregunta",$idPregunta); $consulta->bindParam(":idPregunta", $idPregunta);
$consulta->execute(); $consulta->execute();
$fila=$consulta->fetch(PDO::FETCH_ASSOC); $fila = $consulta->fetch(PDO::FETCH_ASSOC);
return (int)$fila["total"] > 0; 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.", * Obtiene todos los equipos que están compitiendo en esta partida.
"error_tecnico"=>$error * 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()
]; ];
} }
} }
} }
?>