Compare commits
27 Commits
db6e1304bf
...
c52fab2d6c
| Author | SHA1 | Date | |
|---|---|---|---|
| c52fab2d6c | |||
| 22f86c2d6d | |||
| cb3b00fba3 | |||
| 9df7bd9d45 | |||
| fdd0712cd5 | |||
| 52a97dfd01 | |||
| 63e9c3ceab | |||
| 87fdf7285f | |||
| 9bcb06a651 | |||
| b9dea2a3ca | |||
| cab040aaa1 | |||
| a3cd770956 | |||
| b2f8a6c8d5 | |||
| 3348188d44 | |||
| e102298961 | |||
| d1c381d7ac | |||
| ee781cb1e7 | |||
| f784c7bfff | |||
| 29a11a8514 | |||
| a62d888953 | |||
| 93ac0e9ec2 | |||
| 467a861873 | |||
| 39d0ef51be | |||
| e257527321 | |||
| 42c4785d98 | |||
| dd810ed2cb | |||
| 8d767e61e8 |
@@ -52,4 +52,11 @@ Equipos de Backend y Frontend.
|
|||||||
|
|
||||||
# Notas sueltas
|
# Notas sueltas
|
||||||
|
|
||||||
|
## Publicación en el servidor
|
||||||
|
Here are information to log into the database:
|
||||||
|
|
||||||
|
- Type: mysql
|
||||||
|
- Database user: my_webapp
|
||||||
|
- Database name: my_webapp
|
||||||
|
- Password: 07tCqBO3B6Q3cncKMF2FHcpgsLjFTx
|
||||||
|
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../includes/conexionBD.php';
|
||||||
|
|
||||||
|
class Categoria{
|
||||||
|
|
||||||
|
public $idCategoria;
|
||||||
|
public $nombreCategoria;
|
||||||
|
|
||||||
|
function __construct($idCategoria=null, $nombreCategoria=null){
|
||||||
|
$this->idCategoria = $idCategoria;
|
||||||
|
$this->nombreCategoria = $nombreCategoria;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function crear(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("INSERT INTO categoria (nombreCategoria) VALUES (:nombreCategoria)");
|
||||||
|
|
||||||
|
$consulta->bindParam(':nombreCategoria', $this->nombreCategoria);
|
||||||
|
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
$respuesta = [
|
||||||
|
'exito' => 'Categoría creada correctamente',
|
||||||
|
'exito_tecnico' => $this->nombreCategoria
|
||||||
|
];
|
||||||
|
|
||||||
|
return $respuesta;
|
||||||
|
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al guardar la categoría.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function listar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$sql = 'SELECT * FROM categoria';
|
||||||
|
|
||||||
|
$consulta = $conexion->prepare($sql);
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
$resultado = $consulta->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
return $resultado;
|
||||||
|
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al obtener el listado de categorías.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function buscar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("SELECT * FROM categoria WHERE idCategoria = :idCategoria");
|
||||||
|
|
||||||
|
$consulta->bindParam(':idCategoria', $this->idCategoria);
|
||||||
|
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
$resultado = $consulta->fetch(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
return $resultado;
|
||||||
|
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al buscar la categoría.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function borrar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("DELETE FROM categoria WHERE idCategoria = :idCategoria");
|
||||||
|
|
||||||
|
$consulta->bindParam(':idCategoria', $this->idCategoria);
|
||||||
|
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
if($consulta->rowCount() > 0){
|
||||||
|
$respuesta = [
|
||||||
|
'exito' => 'Se eliminó correctamente la categoría',
|
||||||
|
'exito_tecnico' => $this->idCategoria
|
||||||
|
];
|
||||||
|
}else{
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'No existe ninguna categoría con ese ID.',
|
||||||
|
'error_tecnico' => $this->idCategoria
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $respuesta;
|
||||||
|
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al eliminar la categoría.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../includes/conexionBD.php';
|
||||||
|
|
||||||
|
class Equipo{
|
||||||
|
|
||||||
|
public $idEquipo;
|
||||||
|
public $nombreEquipo;
|
||||||
|
|
||||||
|
function __construct($idEquipo=null, $nombreEquipo=null){
|
||||||
|
$this->idEquipo = $idEquipo;
|
||||||
|
$this->nombreEquipo = $nombreEquipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function crear(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("INSERT INTO equipo (nombreEquipo) VALUES (:nombreEquipo)");
|
||||||
|
|
||||||
|
$consulta->bindParam(':nombreEquipo', $this->nombreEquipo);
|
||||||
|
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
$respuesta = [
|
||||||
|
'exito' => 'Equipo creado correctamente',
|
||||||
|
'exito_tecnico' => $this->nombreEquipo
|
||||||
|
];
|
||||||
|
|
||||||
|
return $respuesta;
|
||||||
|
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al guardar el equipo.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function listar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$sql = 'SELECT * FROM equipo';
|
||||||
|
|
||||||
|
$consulta = $conexion->prepare($sql);
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
$resultado = $consulta->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
return $resultado;
|
||||||
|
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al obtener el listado de equipos.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function buscar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("SELECT * FROM equipo WHERE idEquipo = :idEquipo");
|
||||||
|
|
||||||
|
$consulta->bindParam(':idEquipo', $this->idEquipo);
|
||||||
|
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
$resultado = $consulta->fetch(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
return $resultado;
|
||||||
|
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al buscar el equipo.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function borrar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("DELETE FROM equipo WHERE idEquipo = :idEquipo");
|
||||||
|
|
||||||
|
$consulta->bindParam(':idEquipo', $this->idEquipo);
|
||||||
|
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
if($consulta->rowCount() > 0){
|
||||||
|
$respuesta = [
|
||||||
|
'exito' => 'Se eliminó correctamente el equipo',
|
||||||
|
'exito_tecnico' => $this->idEquipo
|
||||||
|
];
|
||||||
|
}else{
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'No existe ningún equipo con ese ID.',
|
||||||
|
'error_tecnico' => $this->idEquipo
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $respuesta;
|
||||||
|
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al eliminar el equipo.',
|
||||||
|
'error_tecnico' => $error
|
||||||
|
];
|
||||||
|
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../includes/conexionBD.php';
|
||||||
|
|
||||||
|
class EquipoxUsuario {
|
||||||
|
public $idEquipoxUsuario;
|
||||||
|
public $idUsuario;
|
||||||
|
public $idEquipo;
|
||||||
|
|
||||||
|
public function __construct($idEquipoxUsuario = null, $idUsuario = null, $idEquipo = null) {
|
||||||
|
$this->idEquipoxUsuario = $idEquipoxUsuario;
|
||||||
|
$this->idUsuario = $idUsuario;
|
||||||
|
$this->idEquipo = $idEquipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registrarUsuarioEnEquipo() {
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if (is_array($conexion)) return $conexion;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "INSERT INTO equipoxusuario (idUsuario, idEquipo) VALUES (:idUsuario, :idEquipo)";
|
||||||
|
$consulta = $conexion->prepare($sql);
|
||||||
|
$consulta->bindParam(':idUsuario', $this->idUsuario);
|
||||||
|
$consulta->bindParam(':idEquipo', $this->idEquipo);
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'exito' => 'Usuario vinculado al equipo correctamente.',
|
||||||
|
'exito_tecnico' => $conexion->lastInsertId()
|
||||||
|
];
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al unir al usuario con el equipo.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function listarUsuariosPorEquipo($idEquipo) {
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if (is_array($conexion)) return $conexion;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "SELECT u.* FROM equipoxusuario exu
|
||||||
|
INNER JOIN usuario u ON exu.idUsuario = u.idUsuario
|
||||||
|
WHERE exu.idEquipo = :idEquipo";
|
||||||
|
$consulta = $conexion->prepare($sql);
|
||||||
|
$consulta->bindParam(':idEquipo', $idEquipo);
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
return $consulta->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al obtener los miembros del equipo.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,452 @@
|
|||||||
|
<?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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 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()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../includes/conexionBD.php';
|
||||||
|
|
||||||
|
class Pregunta {
|
||||||
|
private ?int $idPregunta;
|
||||||
|
private int $idCategoria;
|
||||||
|
private string $nombrePregunta;
|
||||||
|
private array $respuestas;
|
||||||
|
|
||||||
|
public function __construct(int $idCategoria = 0, string $nombrePregunta = "", ?int $idPregunta = null) {
|
||||||
|
$this->idPregunta = $idPregunta;
|
||||||
|
$this->idCategoria = $idCategoria;
|
||||||
|
$this->nombrePregunta = $nombrePregunta;
|
||||||
|
$this->respuestas = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIdPregunta(): ?int { return $this->idPregunta; }
|
||||||
|
|
||||||
|
public function getIdCategoria(): int { return $this->idCategoria; }
|
||||||
|
public function setIdCategoria(int $idCategoria): void { $this->idCategoria = $idCategoria; }
|
||||||
|
|
||||||
|
public function getNombrePregunta(): string { return $this->nombrePregunta; }
|
||||||
|
public function setNombrePregunta(string $nombrePregunta): void { $this->nombrePregunta = $nombrePregunta; }
|
||||||
|
|
||||||
|
public function getRespuestas(): array { return $this->respuestas; }
|
||||||
|
|
||||||
|
public function guardar() {
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if (is_array($conexion)) {
|
||||||
|
return $conexion;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "INSERT INTO pregunta (idCategoria, nombrePregunta) VALUES (:idCat, :texto)";
|
||||||
|
$stmt = $conexion->prepare($sql);
|
||||||
|
|
||||||
|
$stmt->execute([
|
||||||
|
':idCat' => $this->idCategoria,
|
||||||
|
':texto' => $this->nombrePregunta
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->idPregunta = (int)$conexion->lastInsertId();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'exito' => 'Pregunta guardada correctamente',
|
||||||
|
'exito_tecnico' => $this->idPregunta
|
||||||
|
];
|
||||||
|
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al guardar la pregunta.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function cargarRespuestas() {
|
||||||
|
if ($this->idPregunta === null) return;
|
||||||
|
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if (is_array($conexion)) {
|
||||||
|
return $conexion;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "SELECT idRespuesta, nombreRespuesta, correcta FROM respuesta WHERE idPregunta = :idPreg";
|
||||||
|
$stmt = $conexion->prepare($sql);
|
||||||
|
$stmt->execute([':idPreg' => $this->idPregunta]);
|
||||||
|
|
||||||
|
$this->respuestas = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al cargar las respuestas.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function obtenerPorCategoria(int $idCategoria, int $limite = 10) {
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if (is_array($conexion)) {
|
||||||
|
return $conexion;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "SELECT * FROM pregunta WHERE idCategoria = :idCat ORDER BY RAND() LIMIT :limite";
|
||||||
|
$stmt = $conexion->prepare($sql);
|
||||||
|
|
||||||
|
$stmt->bindValue(':idCat', $idCategoria, PDO::PARAM_INT);
|
||||||
|
$stmt->bindValue(':limite', $limite, PDO::PARAM_INT);
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
$preguntas = [];
|
||||||
|
while ($datos = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||||
|
$preg = new Pregunta((int)$datos['idCategoria'], $datos['nombrePregunta'], (int)$datos['idPregunta']);
|
||||||
|
$preg->cargarRespuestas();
|
||||||
|
$preguntas[] = $preg;
|
||||||
|
}
|
||||||
|
return $preguntas;
|
||||||
|
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al obtener las preguntas aleatorias.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,168 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../includes/conexionBD.php';
|
||||||
|
class Respuesta{
|
||||||
|
public $idRespuesta;
|
||||||
|
public $idPregunta;
|
||||||
|
public $nombreRespuesta;
|
||||||
|
public $correcta;
|
||||||
|
|
||||||
|
public function __construct($idRespuesta=null, $idPregunta=null, $nombreRespuesta=null, $correcta=null){
|
||||||
|
$this->idRespuesta=$idRespuesta;
|
||||||
|
$this->idPregunta=$idPregunta;
|
||||||
|
$this->nombreRespuesta=$nombreRespuesta;
|
||||||
|
$this->correcta=$correcta;
|
||||||
|
}//fin constructor
|
||||||
|
|
||||||
|
public function insertar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("INSERT INTO respuesta (idPregunta, nombreRespuesta, correcta) VALUES (:idPregunta, :nombreRespuesta, :correcta)");
|
||||||
|
$consulta->bindParam(':idPregunta', $this->idPregunta);
|
||||||
|
$consulta->bindParam(':nombreRespuesta', $this->nombreRespuesta);
|
||||||
|
$consulta->bindParam(':correcta', $this->correcta);
|
||||||
|
$consulta->execute();
|
||||||
|
$respuesta = [
|
||||||
|
'exito' => 'La respuesta se guardó correctamente.',
|
||||||
|
'exito_tecnico' => $conexion->lastInsertId()
|
||||||
|
];
|
||||||
|
return $respuesta;
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al guardar la respuesta.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//fin método insertar
|
||||||
|
|
||||||
|
public function listar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("SELECT * FROM respuesta");
|
||||||
|
$consulta->execute();
|
||||||
|
return $consulta->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al obtener el listado.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//fin método listar
|
||||||
|
|
||||||
|
public function eliminar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("DELETE FROM respuesta WHERE idRespuesta=:idRespuesta");
|
||||||
|
$consulta->bindParam(':idRespuesta', $this->idRespuesta);
|
||||||
|
$consulta->execute();
|
||||||
|
$respuesta = [
|
||||||
|
'exito' => 'La respuesta se eliminó correctamente.',
|
||||||
|
'exito_tecnico' => $this->idRespuesta
|
||||||
|
];
|
||||||
|
return $respuesta;
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'No se pudo eliminar la respuesta.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//fin método eliminar
|
||||||
|
|
||||||
|
public function editar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("UPDATE respuesta SET idPregunta=:idPregunta, nombreRespuesta=:nombreRespuesta, correcta=:correcta WHERE idRespuesta=:idRespuesta");
|
||||||
|
$consulta->bindParam(':idRespuesta', $this->idRespuesta);
|
||||||
|
$consulta->bindParam(':idPregunta', $this->idPregunta);
|
||||||
|
$consulta->bindParam(':nombreRespuesta', $this->nombreRespuesta);
|
||||||
|
$consulta->bindParam(':correcta', $this->correcta);
|
||||||
|
$consulta->execute();
|
||||||
|
$respuesta = [
|
||||||
|
'exito' => 'La respuesta se editó correctamente.',
|
||||||
|
'exito_tecnico' => $this->idRespuesta
|
||||||
|
];
|
||||||
|
return $respuesta;
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al editar la respuesta.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//fin método editar
|
||||||
|
|
||||||
|
public function buscar(){
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("SELECT * FROM respuesta WHERE idRespuesta=:idRespuesta");
|
||||||
|
$consulta->bindParam(':idRespuesta', $this->idRespuesta);
|
||||||
|
$consulta->execute();
|
||||||
|
return $consulta->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al buscar la respuesta.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//fin método buscar
|
||||||
|
|
||||||
|
public function listarPorPregunta(){//trae todas las respuestas posibles de una pregunta
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if(is_array($conexion)){
|
||||||
|
return $conexion;
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
$consulta = $conexion->prepare("SELECT * FROM respuesta WHERE idPregunta=:idPregunta");
|
||||||
|
$consulta->bindParam(':idPregunta', $this->idPregunta);
|
||||||
|
$consulta->execute();
|
||||||
|
$resultado = $consulta->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
if(!isset($resultado[0])){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'La pregunta no tiene respuestas.'
|
||||||
|
];
|
||||||
|
return $respuesta;
|
||||||
|
}else{
|
||||||
|
return $resultado;
|
||||||
|
}
|
||||||
|
}catch(PDOException $error){
|
||||||
|
$respuesta = [
|
||||||
|
'error' => 'Ocurrió un error al obtener las respuestas de la pregunta.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
$conexion = null;
|
||||||
|
return $respuesta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//fin método listarPorPregunta
|
||||||
|
|
||||||
|
}//fin clase
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../includes/conexionBD.php';
|
||||||
|
|
||||||
|
// Clase encargada de registrar las respuestas de los jugadores en tiempo real durante la partida
|
||||||
|
class RespuestaAlmacenada {
|
||||||
|
public $idRespuestaAlmacenada;
|
||||||
|
public $idPartidaxPregunta;
|
||||||
|
public $idUsuario;
|
||||||
|
public $idRespuesta;
|
||||||
|
public $primero; // Indica con 1 o 0 si fue el más rápido en responder correctamente
|
||||||
|
|
||||||
|
public function __construct($idRespuestaAlmacenada = null, $idPartidaxPregunta = null, $idUsuario = null, $idRespuesta = null, $primero = 0) {
|
||||||
|
$this->idRespuestaAlmacenada = $idRespuestaAlmacenada;
|
||||||
|
$this->idPartidaxPregunta = $idPartidaxPregunta;
|
||||||
|
$this->idUsuario = $idUsuario;
|
||||||
|
$this->idRespuesta = $idRespuesta;
|
||||||
|
$this->primero = $primero;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guarda la respuesta que ha seleccionado un usuario en una pregunta de la partida.
|
||||||
|
*/
|
||||||
|
public function guardarRespuesta() {
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if (is_array($conexion)) return $conexion;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "INSERT INTO respuestaalmacenada (idPartidaxPregunta, idUsuario, idRespuesta, primero)
|
||||||
|
VALUES (:idPartidaxPregunta, :idUsuario, :idRespuesta, :primero)";
|
||||||
|
$consulta = $conexion->prepare($sql);
|
||||||
|
|
||||||
|
$consulta->bindParam(':idPartidaxPregunta', $this->idPartidaxPregunta);
|
||||||
|
$consulta->bindParam(':idUsuario', $this->idUsuario);
|
||||||
|
$consulta->bindParam(':idRespuesta', $this->idRespuesta);
|
||||||
|
$consulta->bindParam(':primero', $this->primero, PDO::PARAM_INT);
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'exito' => 'Respuesta del usuario almacenada correctamente.',
|
||||||
|
'exito_tecnico' => $conexion->lastInsertId()
|
||||||
|
];
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al guardar la respuesta del jugador.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtiene los aciertos totales de un usuario en una partida específica.
|
||||||
|
* Útil para calcular las estadísticas individuales al terminar el juego.
|
||||||
|
*/
|
||||||
|
public static function obtenerAciertosUsuarioEnPartida($idPartida, $idUsuario) {
|
||||||
|
$conexion = conexionBD();
|
||||||
|
if (is_array($conexion)) return $conexion;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "SELECT COUNT(*) AS aciertos
|
||||||
|
FROM respuestaalmacenada ra
|
||||||
|
INNER JOIN partidaxpregunta pxp ON ra.idPartidaxPregunta = pxp.idPartidaxPregunta
|
||||||
|
INNER JOIN respuesta r ON ra.idRespuesta = r.idRespuesta
|
||||||
|
WHERE pxp.idPartida = :idPartida AND ra.idUsuario = :idUsuario AND r.correcta = 1";
|
||||||
|
|
||||||
|
$consulta = $conexion->prepare($sql);
|
||||||
|
$consulta->bindParam(':idPartida', $idPartida);
|
||||||
|
$consulta->bindParam(':idUsuario', $idUsuario);
|
||||||
|
$consulta->execute();
|
||||||
|
|
||||||
|
$resultado = $consulta->fetch(PDO::FETCH_ASSOC);
|
||||||
|
return (int)$resultado['aciertos'];
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al calcular los aciertos.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
<?php
|
||||||
|
require_once '../includes/conexionBD.php';
|
||||||
|
|
||||||
|
class Usuario {
|
||||||
|
private ?int $idUsuario;
|
||||||
|
private string $nombreUsuario;
|
||||||
|
private string $contrasena;
|
||||||
|
private string $email;
|
||||||
|
private ?string $avatar;
|
||||||
|
private ?string $cookie;
|
||||||
|
private int $aciertos;
|
||||||
|
private int $victorias;
|
||||||
|
private int $derrotas;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
string $nombreUsuario = "",
|
||||||
|
string $contrasena = "",
|
||||||
|
string $email = "",
|
||||||
|
?string $avatar = null,
|
||||||
|
?string $cookie = null,
|
||||||
|
int $aciertos = 0,
|
||||||
|
int $victorias = 0,
|
||||||
|
int $derrotas = 0,
|
||||||
|
?int $idUsuario = null
|
||||||
|
) {
|
||||||
|
$this->idUsuario = $idUsuario;
|
||||||
|
$this->nombreUsuario = $nombreUsuario;
|
||||||
|
$this->contrasena = $contrasena;
|
||||||
|
$this->email = $email;
|
||||||
|
$this->avatar = $avatar;
|
||||||
|
$this->cookie = $cookie;
|
||||||
|
$this->aciertos = $aciertos;
|
||||||
|
$this->victorias = $victorias;
|
||||||
|
$this->derrotas = $derrotas;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIdUsuario(): ?int { return $this->idUsuario; }
|
||||||
|
|
||||||
|
public function getNombreUsuario(): string { return $this->nombreUsuario; }
|
||||||
|
public function setNombreUsuario(string $nombreUsuario): void { $this->nombreUsuario = $nombreUsuario; }
|
||||||
|
|
||||||
|
public function getContrasena(): string { return $this->contrasena; }
|
||||||
|
public function setContrasena(string $contrasena): void { $this->contrasena = $contrasena; }
|
||||||
|
|
||||||
|
public function getEmail(): string { return $this->email; }
|
||||||
|
public function setEmail(string $email): void { $this->email = $email; }
|
||||||
|
|
||||||
|
public function getAvatar(): ?string { return $this->avatar; }
|
||||||
|
public function setAvatar(?string $avatar): void { $this->avatar = $avatar; }
|
||||||
|
|
||||||
|
public function getCookie(): ?string { return $this->cookie; }
|
||||||
|
public function setCookie(?string $cookie): void { $this->cookie = $cookie; }
|
||||||
|
|
||||||
|
public function getAciertos(): int { return $this->aciertos; }
|
||||||
|
public function setAciertos(int $aciertos): void { $this->aciertos = $aciertos; }
|
||||||
|
|
||||||
|
public function getVictorias(): int { return $this->victorias; }
|
||||||
|
public function setVictorias(int $victorias): void { $this->victorias = $victorias; }
|
||||||
|
|
||||||
|
public function getDerrotas(): int { return $this->derrotas; }
|
||||||
|
public function setDerrotas(int $derrotas): void { $this->derrotas = $derrotas; }
|
||||||
|
|
||||||
|
public function registrar() {
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if (is_array($conexion)) {
|
||||||
|
return $conexion;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "INSERT INTO usuario (nombreUsuario, contrasena, email, avatar, cookie, aciertos, victorias, derrotas)
|
||||||
|
VALUES (:nombre, :pass, :email, :avatar, :cookie, :aciertos, :victorias, :derrotas)";
|
||||||
|
$stmt = $conexion->prepare($sql);
|
||||||
|
|
||||||
|
$passHash = password_hash($this->contrasena, PASSWORD_BCRYPT);
|
||||||
|
|
||||||
|
$stmt->execute([
|
||||||
|
':nombre' => $this->nombreUsuario,
|
||||||
|
':pass' => $passHash,
|
||||||
|
':email' => $this->email,
|
||||||
|
':avatar' => $this->avatar,
|
||||||
|
':cookie' => $this->cookie,
|
||||||
|
':aciertos' => $this->aciertos,
|
||||||
|
':victorias' => $this->victorias,
|
||||||
|
':derrotas' => $this->derrotas
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->idUsuario = (int)$conexion->lastInsertId();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'exito' => 'Usuario registrado correctamente',
|
||||||
|
'exito_tecnico' => $this->idUsuario
|
||||||
|
];
|
||||||
|
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al registrar el usuario.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function buscarPorId($id) {
|
||||||
|
$conexion = conexionBD();
|
||||||
|
|
||||||
|
if (is_array($conexion)) {
|
||||||
|
return $conexion;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "SELECT * FROM usuario WHERE idUsuario = :id";
|
||||||
|
$stmt = $conexion->prepare($sql);
|
||||||
|
$stmt->execute([':id' => $id]);
|
||||||
|
|
||||||
|
$datos = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
if ($datos) {
|
||||||
|
return new Usuario(
|
||||||
|
$datos['nombreUsuario'],
|
||||||
|
$datos['contrasena'],
|
||||||
|
$datos['email'],
|
||||||
|
$datos['avatar'],
|
||||||
|
$datos['cookie'],
|
||||||
|
(int)$datos['aciertos'],
|
||||||
|
(int)$datos['victorias'],
|
||||||
|
(int)$datos['derrotas'],
|
||||||
|
(int)$datos['idUsuario']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'error' => 'No se encontró ningún usuario con ese ID.'
|
||||||
|
];
|
||||||
|
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'Ocurrió un error al buscar el usuario.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
require_once '../clases/ClaseEquipoxUsuario.php';
|
||||||
|
|
||||||
|
switch($_POST['orden']){
|
||||||
|
|
||||||
|
case 'registrarUsuarioEnEquipo':
|
||||||
|
if (!isset($_SESSION['idUsuario'])) {
|
||||||
|
echo json_encode([
|
||||||
|
'error' => 'No hay una sesión activa de usuario. Por favor, inicie sesión.'
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$idUsuario = $_SESSION['idUsuario'];
|
||||||
|
$idEquipo = intval($_POST['idEquipo'] ?? 0);
|
||||||
|
break;
|
||||||
|
if ($idEquipo <= 0) {
|
||||||
|
echo json_encode([
|
||||||
|
'error' => 'El ID del equipo proporcionado no es válido.'
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$equipoxusuario = new EquipoxUsuario();
|
||||||
|
$resultado = $equipoxusuario->registrarUsuarioEnEquipo($idEquipo, $idUsuario);
|
||||||
|
echo json_encode($resultado);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'listarUsuariosPorEquipo':
|
||||||
|
$idEquipo = intval($_POST['idEquipo'] ?? 0);
|
||||||
|
|
||||||
|
if ($idEquipo <= 0) {
|
||||||
|
echo json_encode(['error' => 'ID de equipo no válido']);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$equipoxusuario = new EquipoxUsuario();
|
||||||
|
$listado = $equipoxusuario->listarUsuariosPorEquipo($idEquipo);
|
||||||
|
break;
|
||||||
|
echo json_encode($listado);
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
require_once '../clases/Usuario.php';
|
||||||
|
|
||||||
|
switch ($_POST['orden']) {
|
||||||
|
|
||||||
|
case 'registrarUsuario':
|
||||||
|
|
||||||
|
$nombreUsuario = trim($_POST['nombreUsuario'] ?? '');
|
||||||
|
$email = trim($_POST['email'] ?? '');
|
||||||
|
$contrasena = $_POST['contrasena'] ?? '';
|
||||||
|
|
||||||
|
if ($nombreUsuario == '' || $email == '' || $contrasena == '') {
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'error' => 'Todos los campos son obligatorios'
|
||||||
|
]);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$usuarioExistente = Usuario::buscarPorEmail($email);
|
||||||
|
|
||||||
|
if ($usuarioExistente instanceof Usuario) {
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'error' => 'Ya existe una cuenta con ese correo electrónico'
|
||||||
|
]);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$usuario = new Usuario(
|
||||||
|
$nombreUsuario,
|
||||||
|
$contrasena,
|
||||||
|
$email
|
||||||
|
);
|
||||||
|
|
||||||
|
$resultado = $usuario->registrar();
|
||||||
|
|
||||||
|
echo json_encode($resultado);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case 'comprobarUsuario':
|
||||||
|
|
||||||
|
$email = trim($_POST['email'] ?? '');
|
||||||
|
$contrasena = $_POST['contrasena'] ?? '';
|
||||||
|
|
||||||
|
$resultado = Usuario::login($email, $contrasena);
|
||||||
|
|
||||||
|
if ($resultado instanceof Usuario) {
|
||||||
|
|
||||||
|
$_SESSION['idUsuario'] = $resultado->getIdUsuario();
|
||||||
|
$_SESSION['email'] = $resultado->getEmail();
|
||||||
|
$_SESSION['nombreUsuario'] = $resultado->getNombreUsuario();
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'exito' => 'Login correcto',
|
||||||
|
'idUsuario' => $resultado->getIdUsuario(),
|
||||||
|
'nombreUsuario' => $resultado->getNombreUsuario()
|
||||||
|
]);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'error' => 'Usuario o contraseña incorrectos'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case 'cerrarSesion':
|
||||||
|
|
||||||
|
session_destroy();
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'exito' => 'Sesión cerrada'
|
||||||
|
]);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function conexionBD() {
|
||||||
|
// Configuración para Laragon
|
||||||
|
$servidor = "localhost";
|
||||||
|
$bd = "triviagmatico"; // Asegúrate de que este sea el nombre de tu BD en HeidiSQL / phpMyAdmin
|
||||||
|
$usuario = "root";
|
||||||
|
$pass = ""; // Laragon deja la contraseña de root vacía por defecto
|
||||||
|
$puerto = "3306";
|
||||||
|
|
||||||
|
try {
|
||||||
|
$dsn = "mysql:host=$servidor;port=$puerto;dbname=$bd;charset=utf8mb4";
|
||||||
|
|
||||||
|
$opciones = [
|
||||||
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
|
PDO::ATTR_EMULATE_PREPARES => false,
|
||||||
|
];
|
||||||
|
|
||||||
|
return new PDO($dsn, $usuario, $pass, $opciones);
|
||||||
|
|
||||||
|
} catch (PDOException $error) {
|
||||||
|
return [
|
||||||
|
'error' => 'No se pudo conectar a la base de datos.',
|
||||||
|
'error_tecnico' => $error->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
+6
-4
@@ -1,29 +1,31 @@
|
|||||||
REQUISITOS CONTROLADORES
|
REQUISITOS CONTROLADORES
|
||||||
|
|
||||||
|
Orden “RegistrarUsuario“
|
||||||
registrarUsuario(nombre, email, password) inserta un usuario en la bbdd, hay que comprobar que en la tabla usuario no hay una cuenta con el correo electronico
|
registrarUsuario(nombre, email, password) inserta un usuario en la bbdd, hay que comprobar que en la tabla usuario no hay una cuenta con el correo electronico
|
||||||
|
|
||||||
|
Orden “ComprobarUsuario“
|
||||||
comprobarUsuario(email, password) comprueba si el usuario introducido se encuentra en la bbdd para poder iniciar sesion, hay que actualizar las variables de sesion para guardar su email y su id de la bbdd.
|
comprobarUsuario(email, password) comprueba si el usuario introducido se encuentra en la bbdd para poder iniciar sesion, hay que actualizar las variables de sesion para guardar su email y su id de la bbdd.
|
||||||
|
|
||||||
Orden “RankingGlobal“
|
Orden “RankingGlobal“
|
||||||
|
|
||||||
rankingGlobal() recupera los 5 usuarios con mas puntos ordenados por el maximo de puntos
|
rankingGlobal() recupera los 5 usuarios con mas puntos ordenados por el maximo de puntos
|
||||||
|
|
||||||
|
Orden "CrearSala"
|
||||||
crearSala(nombreSala, nombreEquipo1, nombreEquipo2) inserta en la bbdd una sala y asigna al usuario que la crea a equipo 1
|
crearSala(nombreSala, nombreEquipo1, nombreEquipo2) inserta en la bbdd una sala y asigna al usuario que la crea a equipo 1
|
||||||
|
|
||||||
Orden “BuscarSalas“
|
Orden “BuscarSalas“
|
||||||
|
|
||||||
buscarSala() recupera todas las salas activas a las que el usuario se puede unir, devuelve nombre de sala, nombre de equipo, **id equipo**(todos los equipos), nombre usuarios.
|
buscarSala() recupera todas las salas activas a las que el usuario se puede unir, devuelve nombre de sala, nombre de equipo, **id equipo**(todos los equipos), nombre usuarios.
|
||||||
|
|
||||||
Orden “AsignarUsuario“
|
Orden “AsignarUsuario“
|
||||||
|
|
||||||
asignarUsuario(**id equipo**, id usuario(variable de sesion)) cuando el usuario pulsa el boton de unirse asigna al equipo dicho usuario
|
asignarUsuario(**id equipo**, id usuario(variable de sesion)) cuando el usuario pulsa el boton de unirse asigna al equipo dicho usuario
|
||||||
|
|
||||||
|
Orden “BuscarSalaUsuarioActivo“
|
||||||
buscarSalaUsuarioActivo(**id equipo)** recarga la pagina para solo mostrar la sala en la que se encuentra el usuario
|
buscarSalaUsuarioActivo(**id equipo)** recarga la pagina para solo mostrar la sala en la que se encuentra el usuario
|
||||||
|
|
||||||
|
Orden “CargarPreguntasyRespuestas“
|
||||||
cargarPreguntasyRespuestas() recupera todas las preguntas de la partida (10 preguntas por partida), devuelve un json con las preguntas, las 4 respuestas
|
cargarPreguntasyRespuestas() recupera todas las preguntas de la partida (10 preguntas por partida), devuelve un json con las preguntas, las 4 respuestas
|
||||||
|
|
||||||
Orden ”ComprobarRespuesta”
|
Orden ”ComprobarRespuesta”
|
||||||
|
|
||||||
comprobarRespuesta(idRespuesta, idUsuario, tiempo) comprueba si el usuario ha pulsado sobre la respuesta correcta o incorrecta, devuelve si es correcta o incorrecta
|
comprobarRespuesta(idRespuesta, idUsuario, tiempo) comprueba si el usuario ha pulsado sobre la respuesta correcta o incorrecta, devuelve si es correcta o incorrecta
|
||||||
|
|
||||||
|
Orden "ComprobarEquipoGanador"
|
||||||
comprobarEquipoGanador() comprueba cual de los dos equipos gana, devuelve un json con la puntuacion global, nombre de equipos, nombre de usuarios y puntuacion de cada usuario, actualiza el ranking global de usuarios
|
comprobarEquipoGanador() comprueba cual de los dos equipos gana, devuelve un json con la puntuacion global, nombre de equipos, nombre de usuarios y puntuacion de cada usuario, actualiza el ranking global de usuarios
|
||||||
Reference in New Issue
Block a user