diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpRequestHandler.java index 0551abdb4..6c7c59e73 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/GempukkuHttpRequestHandler.java @@ -103,7 +103,12 @@ public class GempukkuHttpRequestHandler extends SimpleChannelInboundHandler playerones = getFormMultipleParametersSafely(postDecoder, "playerones[]"); + List playertwos = getFormMultipleParametersSafely(postDecoder, "playertwos[]"); + + var tournament = _tournamentService.getTournamentById(tournamentID); + + if(tournament == null) { + throw new HttpProcessingException(400, "Tournament '" + tournamentID + "' not found."); + } + + var formats = _formatLibrary.getAllFormats(); + if(!formats.containsKey(formatCode)) { + throw new HttpProcessingException(400, "Format code '" + formatCode + "' not found."); + } + + var format = formats.get(formatCode); + + var timer = GameTimer.ResolveTimer(timerCode); + + var submittedPlayers = Stream.concat(playerones.stream(), playertwos.stream()).toList(); + var decks = new HashMap(); + + for(String playerName : submittedPlayers) { + var player = _playerDAO.getPlayer(playerName); + if(player == null) + throw new HttpProcessingException(400, "Player '" + playerName + "' does not exist."); + + var deck = _tournamentService.getPlayerDeck(tournament.getTournamentId(), player.getName(), format.getName()); + if(deck == null) + throw new HttpProcessingException(400, "Player '" + playerName + "' has no deck registered for '" + tournamentID + "'."); + + if(decks.containsKey(player.getName())) { + throw new HttpProcessingException(400, "Player '" + playerName + "' was listed twice."); + } + decks.put(player.getName(), deck); + } + + + var spawner = _hallServer.GetManualGameSpawner(tournament, format, timer, name); + for(int i = 0; i < playerones.size(); i++) { + String p1 = playerones.get(i); + String p2 = playertwos.get(i); + spawner.createGame(p1, decks.get(p1), p2, decks.get(p2)); + } + + responseWriter.writeHtmlResponse("OK"); + } finally { + postDecoder.destroy(); + } + } + private void addConstructedLeague(HttpRequest request, ResponseWriter responseWriter) throws Exception { validateLeagueAdmin(request); diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/admin/leagueAdmin.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/admin/leagueAdmin.html index 45224b3ac..6b0131b34 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/admin/leagueAdmin.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/admin/leagueAdmin.html @@ -4,6 +4,7 @@ function gatherData(formElem) { var inputs = $("input[type='text'], option:selected", formElem).each( function () { + var input = $(this); var name = null; var value = null; @@ -221,6 +222,32 @@ $(document).ready( $(".serieData").last().clone().appendTo(".series"); }); + $("#add-additional-table-button").button().click( + function () { + $(".tabledata").last().clone().appendTo(".tablesgroup"); + }); + + $("#add-tables-button").button().click( + function () { + let resultdiv = $("#tables-result"); + resultdiv.html("Processing..."); + + var data = gatherData($(".tablesgroup")) + + console.log(data); + + hall.comm.addTables( + $("#table-name").val(), + $("#table-tournament").val(), + $("#table-format").val(), + $("#table-timer").val(), + data.playerone, + data.playertwo, + function (xml) { + resultdiv.html("OK"); + }, leagueErrorMap(resultdiv)); + }); + hall.comm.getFormats(true, function (json) @@ -282,6 +309,30 @@ $(document).ready( } } sortOptionsByName("#sealed-format"); + + for (var prop in formats) { + if (Object.prototype.hasOwnProperty.call(formats, prop)) { + //console.log(prop); + + if(formats[prop].name.includes("Limited")) + continue; + + let num = ("0000" + formats[prop].order).substr(-4); + + var item = $("