Files
triviagmatico/controladores/ControladorPartida.php
profesor e97586b033 Se asignan 10 preguntas a la partida al crearse
La clase Pregunta tiene un nuevo método getTodosIds() que devuelve un array con todos los id de las preguntas
2026-09-29 09:42:57 +02:00

1150 lines
22 KiB
PHP

<?php
session_start();
require_once '../clases/ClasePartida.php';
require_once '../clases/ClaseEquipo.php';
require_once '../clases/ClaseEquipoxUsuario.php';
require_once '../clases/ClaseEquipoxPartida.php';
require_once '../clases/ClasePregunta.php';
switch ($_POST['orden']) {
case 'listar':
$partida = new Partida();
$listadoPartidas = $partida->listar();
echo json_encode($listadoPartidas);
break;
case 'buscar':
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida = intval($_POST['idPartida']);
$resultado = $partida->buscar();
echo json_encode($resultado);
break;
case 'crear':
// Comprobamos que haya un usuario conectado
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión para crear una partida.'
]);
break;
}
// Comprobamos el nombre de la partida
if (
!isset($_POST['nombrePartida']) ||
trim($_POST['nombrePartida']) === ''
) {
echo json_encode([
'error' => 'El nombre de la partida es obligatorio.'
]);
break;
}
// Comprobamos los nombres de los equipos
if (
!isset($_POST['nombreEquipo1']) ||
trim($_POST['nombreEquipo1']) === '' ||
!isset($_POST['nombreEquipo2']) ||
trim($_POST['nombreEquipo2']) === ''
) {
echo json_encode([
'error' => 'Los nombres de los equipos son obligatorios.'
]);
break;
}
/*
* ==========================================
* 1. CREAMOS LA PARTIDA
* ==========================================
*/
$partida = new Partida();
$partida->nombrePartida = trim($_POST['nombrePartida']);
// El usuario conectado será el propietario
$partida->idUsuario = $_SESSION['idUsuario'];
$resultadoPartida = $partida->insertar();
if (isset($resultadoPartida['error'])) {
echo json_encode($resultadoPartida);
break;
}
$idPartida = (int)$resultadoPartida['exito_tecnico'];
$partida->idPartida = $idPartida;
/*
* ==========================================
* 2. CREAMOS EL EQUIPO 1
* ==========================================
*/
$equipo1 = new Equipo();
$equipo1->nombreEquipo = trim($_POST['nombreEquipo1']);
$resultadoEquipo1 = $equipo1->crear();
if (isset($resultadoEquipo1['error'])) {
echo json_encode($resultadoEquipo1);
break;
}
/*
* ==========================================
* 3. CREAMOS EL EQUIPO 2
* ==========================================
*/
$equipo2 = new Equipo();
$equipo2->nombreEquipo = trim($_POST['nombreEquipo2']);
$resultadoEquipo2 = $equipo2->crear();
if (isset($resultadoEquipo2['error'])) {
echo json_encode($resultadoEquipo2);
break;
}
/*
* ==========================================
* 3. INSERTAMOS LOS EQUIPOS CON SU PARTIDA EN EQUIPOXPARTIDA
* ==========================================
*/
$relacionEquipo1 = new EquipoxPartida(
null,
$equipo1->idEquipo,
$idPartida
);
$resultadoRelacion1 = $relacionEquipo1->insertar();
$relacionEquipo2 = new EquipoxPartida(
null,
$equipo2->idEquipo,
$idPartida
);
$resultadoRelacion2 = $relacionEquipo2->insertar();
/*
* ==========================================
* 4. ASIGNAMOS EL USUARIO AL EQUIPO 1
* ==========================================
*/
$usuarioEquipo = new EquipoxUsuario(
null,
$_SESSION['idUsuario'],
$equipo1->idEquipo
);
$resultadoUsuarioEquipo =
$usuarioEquipo->registrarUsuarioEnEquipo();
if (isset($resultadoUsuarioEquipo['error'])) {
echo json_encode($resultadoUsuarioEquipo);
break;
}
/*
* ==========================================
* 5. ASIGNAMOS 10 PREGUNTAS ALEATORIAS A LA PARTIDA
* ==========================================
*/
// Obtenemos todos los IDs de las preguntas
$listaPreguntas = Pregunta::getTodosIds();
$totalPreguntas = count($listaPreguntas);
// Guardamos las preguntas que ya hemos asignado
$preguntasAsignadas = [];
// Generamos 10 posiciones aleatorias sin repetir
while (count($preguntasAsignadas) < 10) {
// Generamos una posición aleatoria del array
$posicionAleatoria = rand(0, $totalPreguntas - 1);
// Obtenemos el ID real de la pregunta
$idPreguntaAleatoria = $listaPreguntas[$posicionAleatoria];
// Comprobamos que esa pregunta no haya sido asignada ya
if (!in_array($idPreguntaAleatoria, $preguntasAsignadas)) {
$preguntasAsignadas[] = $idPreguntaAleatoria;
// Asignamos el ID real de la pregunta a la partida
$partida->asignarPregunta($idPreguntaAleatoria);
}
}//fin shile
/*
* ==========================================
* TODO CORRECTO
* ==========================================
*/
echo json_encode([
'exito' => 'Sala creada correctamente. Preguntas preparadas.',
'idPartida' => $resultadoPartida['exito_tecnico'],
'idEquipo1' => $equipo1->idEquipo,
'idEquipo2' => $equipo2->idEquipo
]);
break;
case 'editar':
/*
|--------------------------------------------------------------
| Usuario conectado
|--------------------------------------------------------------
*/
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
//Comprobamos los datos
if (
!isset($_POST['idPartida']) ||
!isset($_POST['nombrePartida'])
) {
echo json_encode([
'error' => 'Faltan datos para editar la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida = intval($_POST['idPartida']);
$partida->nombrePartida = trim($_POST['nombrePartida']);
//Buscamos la partida
$datosPartida = $partida->buscar();
if (!$datosPartida || isset($datosPartida['error'])) {
echo json_encode([
'error' => 'La partida indicada no existe.'
]);
break;
}
//Comprobamos que el usuario sea el propietario
if (
$datosPartida['idUsuario'] !=
$_SESSION['idUsuario']
) {
echo json_encode([
'error' => 'No tienes permiso para editar esta partida.'
]);
break;
}
$partida->idUsuario = $datosPartida['idUsuario'];
$resultado = $partida->editar();
echo json_encode($resultado);
break;
case 'eliminar':
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida = intval($_POST['idPartida']);
//Buscamos la partida
$datosPartida = $partida->buscar();
if (!$datosPartida || isset($datosPartida['error'])) {
echo json_encode([
'error' => 'La partida no existe.'
]);
break;
}
//Solo el propietario puede eliminarla
if (
$datosPartida['idUsuario'] !=
$_SESSION['idUsuario']
) {
echo json_encode([
'error' => 'No tienes permiso para eliminar esta partida.'
]);
break;
}
$resultado = $partida->eliminar();
echo json_encode($resultado);
break;
case 'listarDelUsuario':
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
$partida = new Partida();
$partida->idUsuario = $_SESSION['idUsuario'];
$resultado = $partida->listarDelUsuario();
echo json_encode($resultado);
break;
case 'getPreguntas':
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida = intval($_POST['idPartida']);
$resultado = $partida->getPreguntas();
echo json_encode($resultado);
break;
// ASIGNAR UNA PREGUNTA A UNA PARTIDA
case 'asignarPregunta':
if (
!isset($_POST['idPartida']) ||
!isset($_POST['idPregunta'])
) {
echo json_encode([
'error' => 'Faltan datos.'
]);
break;
}
$partida = new Partida();
$partida->idPartida = intval($_POST['idPartida']);
$idPregunta = intval($_POST['idPregunta']);
//Comprobamos que no esté ya asignada
if ($partida->preguntaAsignada($idPregunta)) {
echo json_encode([
'error' =>
'La pregunta ya está asignada a esta partida.'
]);
break;
}
$resultado =
$partida->asignarPregunta($idPregunta);
echo json_encode($resultado);
break;
// COMPROBAR SI UNA PREGUNTA ESTÁ ASIGNADA
case 'preguntaAsignada':
if (
!isset($_POST['idPartida']) ||
!isset($_POST['idPregunta'])
) {
echo json_encode([
'error' => 'Faltan datos.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
$resultado =
$partida->preguntaAsignada(
intval($_POST['idPregunta'])
);
echo json_encode([
'asignada' => $resultado
]);
break;
// CONTAR PREGUNTAS DE UNA PARTIDA
case 'contarPreguntas':
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
$resultado =
$partida->contarPreguntasAsignadas();
echo json_encode([
'totalPreguntas' => $resultado
]);
break;
// REGISTRAR EQUIPO EN UNA PARTIDA
case 'registrarEquipo':
if (
!isset($_POST['idPartida']) ||
!isset($_POST['idEquipo'])
) {
echo json_encode([
'error' => 'Faltan datos.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
$resultado =
$partida->registrarEquipoEnPartida(
intval($_POST['idEquipo'])
);
echo json_encode($resultado);
break;
// OBTENER EQUIPOS DE UNA PARTIDA
case 'getEquipos':
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
$resultado =
$partida->getEquiposParticipantes();
echo json_encode($resultado);
break;
// OBTENER JUGADORES DE UNA PARTIDA
case 'getJugadores':
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
$resultado =
$partida->getJugadoresDeLaPartida();
echo json_encode($resultado);
break;
case 'iniciar':
/*
|--------------------------------------------------------------
| Debe haber un usuario conectado
|--------------------------------------------------------------
*/
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
//Comprobamos que se haya indicado la partida
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
//Buscamos la partida
$datosPartida = $partida->buscar();
if (!$datosPartida || isset($datosPartida['error'])) {
echo json_encode([
'error' => 'La partida no existe.'
]);
break;
}
//Solo el creador puede iniciar la partida
if (
$datosPartida['idUsuario'] !=
$_SESSION['idUsuario']
) {
echo json_encode([
'error' =>
'Solo el creador de la partida puede iniciarla.'
]);
break;
}
//Comprobamos que haya preguntas
$numeroPreguntas =
$partida->contarPreguntasAsignadas();
if ($numeroPreguntas <= 0) {
echo json_encode([
'error' =>
'No puedes iniciar una partida sin preguntas.'
]);
break;
}
/*
Iniciamos la partida
Este método deberá cambiar el estado de la partida
de "esperando" a "jugando".
*/
$resultado = $partida->iniciar();
echo json_encode($resultado);
break;
// OBTENER LA PREGUNTA ACTUAL
case 'getPreguntaActual':
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
//Obtenemos la pregunta actual
$resultado =
$partida->getPreguntaActual();
echo json_encode($resultado);
break;
case 'siguientePregunta':
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
//Comprobamos que el usuario sea el creador
$datosPartida = $partida->buscar();
if (!$datosPartida || isset($datosPartida['error'])) {
echo json_encode([
'error' => 'La partida no existe.'
]);
break;
}
if (
$datosPartida['idUsuario'] !=
$_SESSION['idUsuario']
) {
echo json_encode([
'error' =>
'Solo el creador puede pasar a la siguiente pregunta.'
]);
break;
}
//Pasamos a la siguiente pregunta
$resultado =
$partida->siguientePregunta();
echo json_encode($resultado);
break;
// REGISTRAR RESPUESTA
case 'responder':
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
if (
!isset($_POST['idPartida']) ||
!isset($_POST['idPregunta']) ||
!isset($_POST['idRespuesta'])
) {
echo json_encode([
'error' => 'Faltan datos para registrar la respuesta.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
$idPregunta =
intval($_POST['idPregunta']);
$idRespuesta =
intval($_POST['idRespuesta']);
//Registramos la respuesta del usuario
$resultado =
$partida->registrarRespuesta(
$_SESSION['idUsuario'],
$idPregunta,
$idRespuesta
);
echo json_encode($resultado);
break;
// COMPROBAR SI LA PARTIDA HA TERMINADO PARA EL USUARIO
case 'estaFinalizada':
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
$resultado =
$partida->estaFinalizadaParaUsuario(
$_SESSION['idUsuario']
);
echo json_encode([
'finalizada' => $resultado
]);
break;
// CONTAR RESPUESTAS DEL USUARIO
case 'contarRespuestas':
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
$resultado =
$partida->contarRespuestasUsuario(
$_SESSION['idUsuario']
);
echo json_encode([
'totalRespondidas' => $resultado
]);
break;
case 'finalizar':
if (!isset($_SESSION['idUsuario'])) {
echo json_encode([
'error' => 'Debes iniciar sesión.'
]);
break;
}
if (!isset($_POST['idPartida'])) {
echo json_encode([
'error' => 'No se ha indicado la partida.'
]);
break;
}
$partida = new Partida();
$partida->idPartida =
intval($_POST['idPartida']);
//Buscamos la partida
$datosPartida = $partida->buscar();
if (!$datosPartida || isset($datosPartida['error'])) {
echo json_encode([
'error' => 'La partida no existe.'
]);
break;
}
//Solo el creador puede finalizarla
if (
$datosPartida['idUsuario'] !=
$_SESSION['idUsuario']
) {
echo json_encode([
'error' =>
'Solo el creador puede finalizar la partida.'
]);
break;
}
$resultado =
$partida->finalizar();
echo json_encode($resultado);
break;
default:
echo json_encode([
'error' => 'La orden indicada no existe.'
]);
break;
}
?>