League admins can add solo-draft leagues

This commit is contained in:
marcin.sciesinski
2018-04-13 15:03:05 -07:00
parent 70bd56f6aa
commit 32abbc82e3
5 changed files with 135 additions and 17 deletions

View File

@@ -14,11 +14,7 @@ import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.Player;
import com.gempukku.lotro.game.formats.LotroFormatLibrary;
import com.gempukku.lotro.hall.HallServer;
import com.gempukku.lotro.league.LeagueData;
import com.gempukku.lotro.league.LeagueSerieData;
import com.gempukku.lotro.league.LeagueService;
import com.gempukku.lotro.league.NewConstructedLeagueData;
import com.gempukku.lotro.league.NewSealedLeagueData;
import com.gempukku.lotro.league.*;
import com.gempukku.lotro.service.AdminService;
import com.gempukku.lotro.tournament.TournamentService;
import org.jboss.netty.channel.MessageEvent;
@@ -82,6 +78,10 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
previewConstructedLeague(request, responseWriter);
} else if (uri.equals("/addConstructedLeague") && request.getMethod() == HttpMethod.POST) {
addConstructedLeague(request, responseWriter);
} else if (uri.equals("/previewSoloDraftLeague") && request.getMethod() == HttpMethod.POST) {
previewSoloDraftLeague(request, responseWriter);
} else if (uri.equals("/addSoloDraftLeague") && request.getMethod() == HttpMethod.POST) {
addSoloDraftLeague(request, responseWriter);
} else if (uri.equals("/addItems") && request.getMethod() == HttpMethod.POST) {
addItems(request, responseWriter);
} else if (uri.equals("/addItemsToCollection") && request.getMethod() == HttpMethod.POST) {
@@ -360,6 +360,88 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
responseWriter.writeXmlResponse(doc);
}
private void addSoloDraftLeague(HttpRequest request, ResponseWriter responseWriter) throws Exception {
validateLeagueAdmin(request);
HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request);
String format = getFormParameterSafely(postDecoder, "format");
String start = getFormParameterSafely(postDecoder, "start");
String serieDuration = getFormParameterSafely(postDecoder, "serieDuration");
String maxMatches = getFormParameterSafely(postDecoder, "maxMatches");
String name = getFormParameterSafely(postDecoder, "name");
int cost = Integer.parseInt(getFormParameterSafely(postDecoder, "cost"));
String code = String.valueOf(System.currentTimeMillis());
StringBuilder sb = new StringBuilder();
sb.append(format+","+start+","+serieDuration+","+maxMatches+","+code+","+name);
String parameters = sb.toString();
LeagueData leagueData = new SoloDraftLeagueData(_cardSets, _soloDraftDefinitions, parameters);
List<LeagueSerieData> series = leagueData.getSeries();
int leagueStart = series.get(0).getStart();
int displayEnd = DateUtils.offsetDate(series.get(series.size() - 1).getEnd(), 2);
_leagueDao.addLeague(cost, name, code, leagueData.getClass().getName(), parameters, leagueStart, displayEnd);
_leagueService.clearCache();
responseWriter.writeHtmlResponse("OK");
}
private void previewSoloDraftLeague(HttpRequest request, ResponseWriter responseWriter) throws Exception {
validateLeagueAdmin(request);
HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request);
String format = getFormParameterSafely(postDecoder, "format");
String start = getFormParameterSafely(postDecoder, "start");
String serieDuration = getFormParameterSafely(postDecoder, "serieDuration");
String maxMatches = getFormParameterSafely(postDecoder, "maxMatches");
String name = getFormParameterSafely(postDecoder, "name");
int cost = Integer.parseInt(getFormParameterSafely(postDecoder, "cost"));
String code = String.valueOf(System.currentTimeMillis());
StringBuilder sb = new StringBuilder();
sb.append(format+","+start+","+serieDuration+","+maxMatches+","+code+","+name);
String parameters = sb.toString();
LeagueData leagueData = new SoloDraftLeagueData(_cardSets, _soloDraftDefinitions, parameters);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.newDocument();
final List<LeagueSerieData> series = leagueData.getSeries();
int end = series.get(series.size() - 1).getEnd();
Element leagueElem = doc.createElement("league");
leagueElem.setAttribute("name", name);
leagueElem.setAttribute("cost", String.valueOf(cost));
leagueElem.setAttribute("start", String.valueOf(series.get(0).getStart()));
leagueElem.setAttribute("end", String.valueOf(end));
for (LeagueSerieData serie : series) {
Element serieElem = doc.createElement("serie");
serieElem.setAttribute("type", serie.getName());
serieElem.setAttribute("maxMatches", String.valueOf(serie.getMaxMatches()));
serieElem.setAttribute("start", String.valueOf(serie.getStart()));
serieElem.setAttribute("end", String.valueOf(serie.getEnd()));
serieElem.setAttribute("format", _formatLibrary.getFormat(serie.getFormat()).getName());
serieElem.setAttribute("collection", serie.getCollectionType().getFullName());
serieElem.setAttribute("limited", String.valueOf(serie.isLimited()));
leagueElem.appendChild(serieElem);
}
doc.appendChild(leagueElem);
responseWriter.writeXmlResponse(doc);
}
private void addSealedLeague(HttpRequest request, ResponseWriter responseWriter) throws Exception {
validateLeagueAdmin(request);

View File

@@ -53,15 +53,28 @@ var LeagueResultsUI = Class.extend({
var end = league.getAttribute("end");
var member = league.getAttribute("member");
var joinable = league.getAttribute("joinable");
var draftable = league.getAttribute("draftable");
$("#leagueExtraInfo").append("<div class='leagueName'>" + leagueName + "</div>");
var costStr = formatPrice(cost);
$("#leagueExtraInfo").append("<div class='leagueCost'><b>Cost:</b> " + costStr + "</div>");
if (member == "true")
$("#leagueExtraInfo").append("<div class='leagueMembership'>You are already a member of this league.</div>");
else if (joinable == "true") {
if (member == "true") {
var memberDiv = $("<div class='leagueMembership'>You are already a member of this league. </div>");
if (draftable == "true") {
var draftBut = $("<button>Go to draft</button>").button();
var draftFunc = (function (leagueCode) {
return function() {
var participantId = getUrlParam("participantId");
location.href = "/gemp-lotr/soloDraft.html?leagueType="+leagueCode+"&participantId="+participantId;
};
})(leagueType);
draftBut.click(draftFunc);
memberDiv.append(draftBut);
}
$("#leagueExtraInfo").append(memberDiv);
} else if (joinable == "true") {
var joinBut = $("<button>Join league</button>").button();
var joinFunc = (function (leagueCode, costString) {

View File

@@ -150,6 +150,13 @@
previewDialog.dialog("open");
});
$("#previewSoloDraft").click(
function () {
submitFormToAddress("/gemp-lotr-server/admin/previewSoloDraftLeague", $("#addSoloDraftForm").eq(0), displayPreview, previewError);
previewDialog.html("");
previewDialog.dialog("open");
});
$("#previewConstructed").click(
function () {
submitFormToAddress("/gemp-lotr-server/admin/previewConstructedLeague", $("#addConstructedForm").eq(0), displayPreview, previewError);
@@ -188,6 +195,22 @@
<input type="submit" value="Add sealed league">
</form>
<h2>Add solo-draft league</h2>
<form id="addSoloDraftForm" method="POST" action="/gemp-lotr-server/admin/addSoloDraftLeague">
Name: <input type="text" name="name"><br/>
Cost (in silver): <input type="text" name="cost"><br/>
Start (YYYYMMDD): <input type="text" name="start"><br/>
Format:
<select name="format">
<option value="hobbit_draft">Hobbit Draft</option>
</select><br/>
Series duration in days: <input type="text" name="serieDuration"><br/>
Maximum matches in series: <input type="text" name="maxMatches"><br/>
<input id="previewSoloDraft" type="button" value="Preview sealed league">
<input type="submit" value="Add sealed league">
</form>
<h2>Add constructed league</h2>
<form id="addConstructedForm" method="POST" action="/gemp-lotr-server/admin/addConstructedLeague">

View File

@@ -105,14 +105,14 @@ public class SoloDraftLeagueData implements LeagueData {
if (status == 1) {
if (currentTime > DateUtils.offsetDate(_serie.getEnd(), 1)) {
for (PlayerStanding leagueStanding : leagueStandings) {
CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), leagueStanding.getGamesPlayed(), maxGamesTotal, _collectionType);
if (leaguePrize != null)
collectionsManager.addItemsToPlayerCollection(true, "End of league prizes", leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values());
final CardCollection leagueTrophies = _leaguePrizes.getTrophiesForLeague(leagueStanding.getStanding(), leagueStandings.size(), leagueStanding.getGamesPlayed(), maxGamesTotal, _collectionType);
if (leagueTrophies != null)
collectionsManager.addItemsToPlayerCollection(true, "End of league trophies", leagueStanding.getPlayerName(), CollectionType.TROPHY, leagueTrophies.getAll().values());
}
// for (PlayerStanding leagueStanding : leagueStandings) {
// CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), leagueStanding.getGamesPlayed(), maxGamesTotal, _collectionType);
// if (leaguePrize != null)
// collectionsManager.addItemsToPlayerCollection(true, "End of league prizes", leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values());
// final CardCollection leagueTrophies = _leaguePrizes.getTrophiesForLeague(leagueStanding.getStanding(), leagueStandings.size(), leagueStanding.getGamesPlayed(), maxGamesTotal, _collectionType);
// if (leagueTrophies != null)
// collectionsManager.addItemsToPlayerCollection(true, "End of league trophies", leagueStanding.getPlayerName(), CollectionType.TROPHY, leagueTrophies.getAll().values());
// }
status++;
}
}

View File

@@ -1,6 +1,6 @@
[
{
"type": "Hobbit Draft",
"type": "hobbit_draft",
"location": "/draft/hobbit.json"
}
]