// ===================================================== // CARGAR LISTA DE SALAS // ===================================================== function cargarSalas() { $.ajax({ url: "controladores/controladorPartida.php", type: "POST", dataType: "json", data: { orden: "listar", }, success: function (partidas) { const contenedor = $("#contenedorSalas"); contenedor.empty(); if ( !Array.isArray(partidas) || partidas.length === 0 ) { contenedor.html(`

No hay salas disponibles actualmente.

`); return; } // Cargar cada sala individualmente partidas.forEach(function (partida) { cargarSalaBuscador(partida); }); }, error: function (xhr, status, error) { console.error( "Error al obtener las partidas:", error ); }, }); } // ===================================================== // CARGAR INFORMACIÓN DE UNA SALA DEL BUSCADOR // ===================================================== function cargarSalaBuscador(partida) { $.ajax({ url: "controladores/controladorPartida.php", type: "POST", dataType: "json", data: { orden: "getEquipos", idPartida: partida.idPartida, }, success: function (equipos) { $.ajax({ url: "controladores/controladorPartida.php", type: "POST", dataType: "json", data: { orden: "getJugadores", idPartida: partida.idPartida, }, success: function (jugadores) { mostrarSalaBuscador( partida, equipos, jugadores ); }, error: function (xhr, status, error) { console.error( "Error al obtener jugadores:", error ); }, }); }, error: function (xhr, status, error) { console.error( "Error al obtener equipos:", error ); }, }); } // ===================================================== // MOSTRAR UNA SALA EN EL BUSCADOR // ===================================================== function mostrarSalaBuscador( partida, equipos, jugadores ) { let equiposHTML = ""; equipos.forEach(function (equipo) { const jugadoresEquipo = jugadores.filter( function (jugador) { return ( jugador.idEquipo == equipo.idEquipo ); } ); let jugadoresHTML = ""; // ----------------------------------------------- // JUGADORES DEL EQUIPO // ----------------------------------------------- if (jugadoresEquipo.length > 0) { jugadoresEquipo.forEach( function (jugador) { const esHost = jugador.idUsuario == partida.idUsuario; jugadoresHTML += `
${ esHost ? '' : '' } ${escapeHTML( jugador.nombreUsuario )}
${ esHost ? ` HOST ` : "" }
`; } ); } else { jugadoresHTML = `
Sin jugadores
`; } // ----------------------------------------------- // BOTÓN UNIRSE // ----------------------------------------------- let botonUnirseHTML = ""; if (!usuarioYaEstaEnEquipo) { botonUnirseHTML = ` `; } // ----------------------------------------------- // EQUIPO // ----------------------------------------------- equiposHTML += `
${escapeHTML( equipo.nombreEquipo )}
${jugadoresHTML}
${botonUnirseHTML}
`; }); // ================================================= // TARJETA DE LA SALA // ================================================= const salaHTML = `
${escapeHTML( partida.nombrePartida )}
${equiposHTML}
`; // ================================================= // IMPORTANTE // ================================================= // // NO usamos .html() aquí porque eso eliminaría // las salas que ya se hayan mostrado. // // Usamos .append() para añadir cada nueva sala. // $("#contenedorSalas").append( salaHTML ); } // ===================================================== // CREAR SALA // ===================================================== $("#btnCrearSala").on( "click", function () { const nombreSala = $("#nombreSala").val().trim(); const nombreEquipo1 = $("#nombreEquipo1").val().trim(); const nombreEquipo2 = $("#nombreEquipo2").val().trim(); let valido = true; // Limpiar errores anteriores $(".mensaje-error-sala").remove(); $(".input-kahoot") .removeClass("is-invalid"); // ----------------------------------------------- // VALIDAR NOMBRE DE SALA // ----------------------------------------------- if ( nombreSala === "" || nombreSala.length < 3 ) { mostrarError( "#nombreSala", "El nombre de la sala debe tener al menos 3 caracteres." ); valido = false; } // ----------------------------------------------- // VALIDAR EQUIPO 1 // ----------------------------------------------- if ( nombreEquipo1 === "" || nombreEquipo1.length < 2 ) { mostrarError( "#nombreEquipo1", "El nombre del equipo debe tener al menos 2 caracteres." ); valido = false; } // ----------------------------------------------- // VALIDAR EQUIPO 2 // ----------------------------------------------- if ( nombreEquipo2 === "" || nombreEquipo2.length < 2 ) { mostrarError( "#nombreEquipo2", "El nombre del equipo debe tener al menos 2 caracteres." ); valido = false; } // ----------------------------------------------- // LOS EQUIPOS NO PUEDEN TENER EL MISMO NOMBRE // ----------------------------------------------- if ( nombreEquipo1 !== "" && nombreEquipo2 !== "" && nombreEquipo1.toLowerCase() === nombreEquipo2.toLowerCase() ) { mostrarError( "#nombreEquipo2", "Los dos equipos deben tener nombres diferentes." ); valido = false; } // Si hay errores, no continuar if (!valido) { return; } // ----------------------------------------------- // DESACTIVAR BOTÓN // ----------------------------------------------- const boton = $("#btnCrearSala"); boton .prop("disabled", true) .text("Creando sala..."); // ----------------------------------------------- // CREAR SALA // ----------------------------------------------- $.ajax({ url: "controladores/controladorPartida.php", type: "POST", dataType: "json", data: { orden: "crear", nombrePartida: nombreSala, nombreEquipo1: nombreEquipo1, nombreEquipo2: nombreEquipo2, }, success: function (respuesta) { if (respuesta.error) { alert(respuesta.error); boton .prop("disabled", false) .text("Crear sala"); return; } if (respuesta.exito) { $("#modalCrearSala").modal( "hide" ); location.reload(); } }, error: function (xhr, status, error) { console.error( "Error al crear la sala:", error ); alert( "No se ha podido crear la sala." ); boton .prop("disabled", false) .text("Crear sala"); }, }); } ); // ===================================================== // MOSTRAR ERROR DE VALIDACIÓN // ===================================================== function mostrarError( selector, mensaje ) { const input = $(selector); input.addClass("is-invalid"); input.after(`
${mensaje}
`); } // ===================================================== // LIMPIAR ERRORES AL ESCRIBIR // ===================================================== $(document).on( "input", ".input-kahoot", function () { $(this) .removeClass("is-invalid"); $(this) .next(".mensaje-error-sala") .remove(); } );