Commit df02733b by Antti Tonkyra

tournaments tweaks

1 parent 9f958648
...@@ -20,6 +20,7 @@ import fi.codecrew.moya.enums.apps.MapPermission; ...@@ -20,6 +20,7 @@ import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.enums.apps.PollPermission; import fi.codecrew.moya.enums.apps.PollPermission;
import fi.codecrew.moya.enums.apps.ShopPermission; import fi.codecrew.moya.enums.apps.ShopPermission;
import fi.codecrew.moya.enums.apps.SpecialPermission; import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.enums.apps.TournamentPermission;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.facade.MenuNavigationFacade; import fi.codecrew.moya.facade.MenuNavigationFacade;
import fi.codecrew.moya.facade.MenuitemFacade; import fi.codecrew.moya.facade.MenuitemFacade;
...@@ -119,6 +120,10 @@ public class MenuBean implements MenuBeanLocal { ...@@ -119,6 +120,10 @@ public class MenuBean implements MenuBeanLocal {
userprofile.addPage(menuitemfacade.findOrCreate("/user/changePassword"), UserPermission.VIEW_SELF); userprofile.addPage(menuitemfacade.findOrCreate("/user/changePassword"), UserPermission.VIEW_SELF);
userprofile.addPage(menuitemfacade.findOrCreate("/auth/logout"), UserPermission.LOGOUT); userprofile.addPage(menuitemfacade.findOrCreate("/auth/logout"), UserPermission.LOGOUT);
MenuNavigation tournaments = usermenu.addPage(null, null);
tournaments.setKey("tournaments.menutitle");
tournaments.addPage(menuitemfacade.findOrCreate("/tournaments/index"), TournamentPermission.VIEW);
/* /*
* MenuNavigation createuser = usermenu.addPage(null, null); * MenuNavigation createuser = usermenu.addPage(null, null);
* createuser.setKey("topnavi.createuser"); * createuser.setKey("topnavi.createuser");
...@@ -235,6 +240,10 @@ public class MenuBean implements MenuBeanLocal { ...@@ -235,6 +240,10 @@ public class MenuBean implements MenuBeanLocal {
// UserPermission.ANYUSER); // UserPermission.ANYUSER);
navifacade.create(shopmenu); navifacade.create(shopmenu);
MenuNavigation tournamentsadm = adminmenu.addPage(null, null);
tournamentsadm.setKey("tournaments.menutitle");
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/index"), TournamentPermission.MANAGE_ALL);
/* /*
* MenuNavigation profileTopmenu = new MenuNavigation(ev, * MenuNavigation profileTopmenu = new MenuNavigation(ev,
* "topnavi.profile", menusort = +10); * "topnavi.profile", menusort = +10);
......
...@@ -84,20 +84,24 @@ public class TournamentBean implements TournamentBeanLocal { ...@@ -84,20 +84,24 @@ public class TournamentBean implements TournamentBeanLocal {
@Override @Override
@RolesAllowed(TournamentPermission.S_MANAGE_ALL) @RolesAllowed(TournamentPermission.S_MANAGE_ALL)
public void createTournament(Tournament tournament) { public void createTournament(Tournament tournament) throws Exception {
// Assert correct event
if(eventBean.getCurrentEvent().equals(tournament.getLanEvent()))
tournamentFacade.create(tournament); tournamentFacade.create(tournament);
else
throw new Exception("tournament.invalid_event");
} }
@Override @Override
@RolesAllowed(TournamentPermission.S_VIEW) @RolesAllowed(TournamentPermission.S_VIEW)
public List<Tournament> getTournamentsInStatus(TournamentStatus status, boolean useTimeConstraints) { public List<Tournament> getTournamentsInStatus(TournamentStatus status, boolean useTimeConstraints) {
return tournamentFacade.getTournamentsInStatusWithParticipationTimeIn(status); return tournamentFacade.getTournamentsInStatusWithParticipationTimeIn(status, eventBean.getCurrentEvent());
} }
@Override @Override
@RolesAllowed(TournamentPermission.S_VIEW) @RolesAllowed(TournamentPermission.S_VIEW)
public List<Tournament> getActiveTournaments() { public List<Tournament> getActiveTournaments() {
return tournamentFacade.getTournamentsNotInStatus(TournamentStatus.COMPLETED); return tournamentFacade.getTournamentsNotInStatus(TournamentStatus.COMPLETED, eventBean.getCurrentEvent());
} }
@Override @Override
...@@ -126,6 +130,7 @@ public class TournamentBean implements TournamentBeanLocal { ...@@ -126,6 +130,7 @@ public class TournamentBean implements TournamentBeanLocal {
Date currentTime = new Date(); Date currentTime = new Date();
// Assert registration time is correct
if(t.getRegistrationOpensAt() != null && t.getRegistrationClosesAt() != null && currentTime.after(t.getRegistrationOpensAt()) && currentTime.before(t.getRegistrationClosesAt())) { if(t.getRegistrationOpensAt() != null && t.getRegistrationClosesAt() != null && currentTime.after(t.getRegistrationOpensAt()) && currentTime.before(t.getRegistrationClosesAt())) {
// Assert participant size is smaller than max // Assert participant size is smaller than max
if(t.getParticipants().size() < t.getMaxParticipants()) { if(t.getParticipants().size() < t.getMaxParticipants()) {
......
...@@ -12,6 +12,7 @@ import javax.persistence.criteria.Root; ...@@ -12,6 +12,7 @@ import javax.persistence.criteria.Root;
import fi.codecrew.moya.enums.TournamentStatus; import fi.codecrew.moya.enums.TournamentStatus;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Tournament; import fi.codecrew.moya.model.Tournament;
import fi.codecrew.moya.model.TournamentParticipant; import fi.codecrew.moya.model.TournamentParticipant;
import fi.codecrew.moya.model.Tournament_; import fi.codecrew.moya.model.Tournament_;
...@@ -25,31 +26,42 @@ public class TournamentFacade extends IntegerPkGenericFacade<Tournament> { ...@@ -25,31 +26,42 @@ public class TournamentFacade extends IntegerPkGenericFacade<Tournament> {
super(Tournament.class); super(Tournament.class);
} }
public List<Tournament> getTournamentsNotInStatus(TournamentStatus status) { public List<Tournament> getTournamentsNotInStatus(TournamentStatus status, LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Tournament> cq = cb.createQuery(Tournament.class); CriteriaQuery<Tournament> cq = cb.createQuery(Tournament.class);
Root<Tournament> root = cq.from(Tournament.class); Root<Tournament> root = cq.from(Tournament.class);
cq.where(cb.notEqual(root.get(Tournament_.tournamentStatus), status)); cq.where(
cb.and(
cb.notEqual(root.get(Tournament_.tournamentStatus), status),
cb.equal(root.get(Tournament_.lanEvent), event)
)
);
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public List<Tournament> getTournamentsInStatus(TournamentStatus status) { public List<Tournament> getTournamentsInStatus(TournamentStatus status, LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Tournament> cq = cb.createQuery(Tournament.class); CriteriaQuery<Tournament> cq = cb.createQuery(Tournament.class);
Root<Tournament> root = cq.from(Tournament.class); Root<Tournament> root = cq.from(Tournament.class);
cq.where(cb.equal(root.get(Tournament_.tournamentStatus), status)); cq.where(
cb.and(
cb.equal(root.get(Tournament_.tournamentStatus), status),
cb.equal(root.get(Tournament_.lanEvent), event)
)
);
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public List<Tournament> getTournamentsInStatusWithParticipationTimeIn(TournamentStatus status) { public List<Tournament> getTournamentsInStatusWithParticipationTimeIn(TournamentStatus status, LanEvent event) {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Tournament> cq = cb.createQuery(Tournament.class); CriteriaQuery<Tournament> cq = cb.createQuery(Tournament.class);
Root<Tournament> root = cq.from(Tournament.class); Root<Tournament> root = cq.from(Tournament.class);
cq.where( cq.where(
cb.and( cb.and(
cb.equal(root.get(Tournament_.tournamentStatus), status), cb.equal(root.get(Tournament_.tournamentStatus), status),
cb.equal(root.get(Tournament_.lanEvent), event),
cb.between(cb.currentDate(), root.get(Tournament_.registrationOpensAt), root.get(Tournament_.registrationClosesAt)) cb.between(cb.currentDate(), root.get(Tournament_.registrationOpensAt), root.get(Tournament_.registrationClosesAt))
) )
); );
......
...@@ -20,7 +20,7 @@ public interface TournamentBeanLocal { ...@@ -20,7 +20,7 @@ public interface TournamentBeanLocal {
TournamentRule createRule(TournamentRule tr); TournamentRule createRule(TournamentRule tr);
TournamentGame findGame(Integer id); TournamentGame findGame(Integer id);
TournamentRule findRule(Integer id); TournamentRule findRule(Integer id);
void createTournament(Tournament tournament); void createTournament(Tournament tournament) throws Exception;
List<Tournament> getActiveTournaments(); List<Tournament> getActiveTournaments();
Tournament getTournamentById(Integer tournamentId); Tournament getTournamentById(Integer tournamentId);
void editTournament(Tournament tournament); void editTournament(Tournament tournament);
......
...@@ -106,13 +106,13 @@ ...@@ -106,13 +106,13 @@
<h:outputText value="#{i18n['tournaments.registration_opens']}" /> <h:outputText value="#{i18n['tournaments.registration_opens']}" />
<h:outputText value="#{i18n['tournaments.registration_closes']}" /> <h:outputText value="#{i18n['tournaments.registration_closes']}" />
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentCreateView.tournament.registrationOpensAt}"/> <p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy HH:mm" value="#{tournamentCreateView.tournament.registrationOpensAt}"/>
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentCreateView.tournament.registrationClosesAt}"/> <p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy HH:mm" value="#{tournamentCreateView.tournament.registrationClosesAt}"/>
</h:panelGrid> </h:panelGrid>
<h2>#{i18n['tournaments.admin.begin_time_constraints']}</h2> <h2>#{i18n['tournaments.admin.begin_time_constraints']}</h2>
<h:panelGrid> <h:panelGrid>
<h:outputText value="Start time" /> <h:outputText value="Start time" />
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentCreateView.tournament.beginsAt}"/> <p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy HH:mm" value="#{tournamentCreateView.tournament.beginsAt}"/>
</h:panelGrid> </h:panelGrid>
<br /> <br />
</p:panel> </p:panel>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</f:metadata> </f:metadata>
<ui:define name="content"> <ui:define name="content">
<h1>#{i18n['tournaments.admin.create_tournament']}</h1> <h1>#{i18n['tournaments.admin.edit_tournament']}</h1>
<h:form> <h:form>
<h2>#{i18n['tournaments.tournament_details']}</h2> <h2>#{i18n['tournaments.tournament_details']}</h2>
<h:panelGrid columns="2"> <h:panelGrid columns="2">
...@@ -29,13 +29,13 @@ ...@@ -29,13 +29,13 @@
<h:outputText value="#{i18n['tournaments.registration_opens']}" /> <h:outputText value="#{i18n['tournaments.registration_opens']}" />
<h:outputText value="#{i18n['tournaments.registration_closes']}" /> <h:outputText value="#{i18n['tournaments.registration_closes']}" />
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentEditView.tournament.registrationOpensAt}"/> <p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy HH:mm" value="#{tournamentEditView.tournament.registrationOpensAt}"/>
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentEditView.tournament.registrationClosesAt}"/> <p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy HH:mm" value="#{tournamentEditView.tournament.registrationClosesAt}"/>
</h:panelGrid> </h:panelGrid>
<h2>#{i18n['tournaments.admin.begin_time_constraints']}</h2> <h2>#{i18n['tournaments.admin.begin_time_constraints']}</h2>
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputText value="#{i18n['tournaments.start_time']}" /> <h:outputText value="#{i18n['tournaments.start_time']}" />
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentEditView.tournament.beginsAt}"/> <p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy HH:mm" value="#{tournamentEditView.tournament.beginsAt}"/>
</h:panelGrid> </h:panelGrid>
<p:commandButton value="#{i18n['tournaments.admin.cancel_edits']}" action="#{tournamentEditView.cancel}"/> <p:commandButton value="#{i18n['tournaments.admin.cancel_edits']}" action="#{tournamentEditView.cancel}"/>
......
...@@ -929,6 +929,8 @@ submenu.shop.createBill = Purchase ...@@ -929,6 +929,8 @@ submenu.shop.createBill = Purchase
submenu.shop.listReaders = List readers submenu.shop.listReaders = List readers
submenu.shop.shopToUser = Shop to user submenu.shop.shopToUser = Shop to user
submenu.shop.showReaderEvents = Reader events submenu.shop.showReaderEvents = Reader events
submenu.tournaments.admin.index = View and manage
submenu.tournaments.index = View and participate
submenu.user.accountEvents = Account events submenu.user.accountEvents = Account events
submenu.user.changePassword = Change password submenu.user.changePassword = Change password
submenu.user.create = Create new user submenu.user.create = Create new user
...@@ -1071,6 +1073,7 @@ tournaments.backup_players = Max backup players ...@@ -1071,6 +1073,7 @@ tournaments.backup_players = Max backup players
tournaments.cancel_participation = Cancel participation tournaments.cancel_participation = Cancel participation
tournaments.description = You can view & participate into tournaments from this page. tournaments.description = You can view & participate into tournaments from this page.
tournaments.max_participants = Max participants tournaments.max_participants = Max participants
tournaments.menutitle = Tournaments
tournaments.open_tournaments = Open tournaments tournaments.open_tournaments = Open tournaments
tournaments.participate_actual_team_members = Actual team members tournaments.participate_actual_team_members = Actual team members
tournaments.participate_backup_player_count = Backup Player Count tournaments.participate_backup_player_count = Backup Player Count
......
...@@ -910,6 +910,8 @@ submenu.shop.createBill = Osta tuotteita ...@@ -910,6 +910,8 @@ submenu.shop.createBill = Osta tuotteita
submenu.shop.listReaders = N\u00E4yt\u00E4 lukijat submenu.shop.listReaders = N\u00E4yt\u00E4 lukijat
submenu.shop.shopToUser = Osta k\u00E4ytt\u00E4j\u00E4lle submenu.shop.shopToUser = Osta k\u00E4ytt\u00E4j\u00E4lle
submenu.shop.showReaderEvents = Lukijan tapahtumat submenu.shop.showReaderEvents = Lukijan tapahtumat
submenu.tournaments.admin.index = Katsele ja hallinnoi
submenu.tournaments.index = Katsele ja osallistu
submenu.user.accountEvents = Tilitapahtumat submenu.user.accountEvents = Tilitapahtumat
submenu.user.changePassword = Vaihda salasana submenu.user.changePassword = Vaihda salasana
submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4 submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4
...@@ -1055,6 +1057,7 @@ tournaments.backup_players = Maksimim\u00E4\u00E4r\u00E4 va ...@@ -1055,6 +1057,7 @@ tournaments.backup_players = Maksimim\u00E4\u00E4r\u00E4 va
tournaments.cancel_participation = Peruuta osallistuminen tournaments.cancel_participation = Peruuta osallistuminen
tournaments.description = Voit osallistua sek\u00E4 katselmoida turnauksia t\u00E4ll\u00E4 sivulla. tournaments.description = Voit osallistua sek\u00E4 katselmoida turnauksia t\u00E4ll\u00E4 sivulla.
tournaments.max_participants = Maksimiosallistujam\u00E4\u00E4r\u00E4 tournaments.max_participants = Maksimiosallistujam\u00E4\u00E4r\u00E4
tournaments.menutitle = Turnaukset
tournaments.open_tournaments = Avoimet turnaukset tournaments.open_tournaments = Avoimet turnaukset
tournaments.participate_actual_team_members = Varsinaiset joukkueen j\u00E4senet tournaments.participate_actual_team_members = Varsinaiset joukkueen j\u00E4senet
tournaments.participate_backup_player_count = Varapelaajat tournaments.participate_backup_player_count = Varapelaajat
......
...@@ -11,6 +11,7 @@ import fi.codecrew.moya.model.Role; ...@@ -11,6 +11,7 @@ import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.Tournament; import fi.codecrew.moya.model.Tournament;
import fi.codecrew.moya.model.TournamentGame; import fi.codecrew.moya.model.TournamentGame;
import fi.codecrew.moya.model.TournamentRule; import fi.codecrew.moya.model.TournamentRule;
import fi.codecrew.moya.utilities.jsf.MessageHelper;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -64,10 +65,14 @@ public class TournamentCreateView extends GenericCDIView { ...@@ -64,10 +65,14 @@ public class TournamentCreateView extends GenericCDIView {
tournament.setTournamentGame(game); tournament.setTournamentGame(game);
tournament.setRules(rules); tournament.setRules(rules);
try {
tournamentBean.createTournament(tournament); tournamentBean.createTournament(tournament);
this.endConversation(); this.endConversation();
return "success"; return "success";
} catch(Exception e) {
MessageHelper.err(e.getMessage());
return "";
}
} }
public List<TournamentGame> getTournamentGames() { public List<TournamentGame> getTournamentGames() {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!