Commit d0d50029 by Tuomas Riihimäki

Merge branch 'tournamentForRoles' into 'master'

now tournament admin can decide roles for tournament

turnaukselle voi määrittää roolit ketkä voi liittyä siihen.

See merge request !343
2 parents 7b38d67a 7c9e1ccf
...@@ -32,6 +32,8 @@ import fi.codecrew.moya.model.TournamentRule; ...@@ -32,6 +32,8 @@ import fi.codecrew.moya.model.TournamentRule;
@Local @Local
public interface TournamentBeanLocal { public interface TournamentBeanLocal {
boolean canUserParticipate(Tournament tournament);
List<TournamentGame> getGames(); List<TournamentGame> getGames();
List<TournamentRule> getRulesByGame(TournamentGame tg); List<TournamentRule> getRulesByGame(TournamentGame tg);
TournamentGame createGame(TournamentGame tg); TournamentGame createGame(TournamentGame tg);
......
...@@ -401,6 +401,11 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -401,6 +401,11 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE places RENAME release_time TO reserve_time;" "ALTER TABLE places RENAME release_time TO reserve_time;"
}); });
dbUpdates.add(new String[] {
"CREATE TABLE tournament_roles (role_id INTEGER NOT NULL, tournament_id INTEGER NOT NULL, PRIMARY KEY (role_id, tournament_id))",
"ALTER TABLE tournament_roles ADD CONSTRAINT FK_tournament_roles_tournament_id FOREIGN KEY (tournament_id) REFERENCES tournaments (id)",
"ALTER TABLE tournament_roles ADD CONSTRAINT FK_tournament_roles_role_id FOREIGN KEY (role_id) REFERENCES roles (id)",
});
} }
......
...@@ -52,6 +52,11 @@ public class BotBean implements BotBeanLocal { ...@@ -52,6 +52,11 @@ public class BotBean implements BotBeanLocal {
public void message(Message message) { public void message(Message message) {
// on development places, it's possibly that there is no bot
if(bot == null) {
return;
}
try { try {
MoyaEventMessage msg = message.getBody(MoyaEventMessage.class); MoyaEventMessage msg = message.getBody(MoyaEventMessage.class);
......
...@@ -18,29 +18,18 @@ ...@@ -18,29 +18,18 @@
*/ */
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.util.Date; import fi.codecrew.moya.enums.TournamentStatus;
import java.util.List; import fi.codecrew.moya.enums.TournamentTeamMemberRole;
import fi.codecrew.moya.enums.apps.TournamentPermission;
import fi.codecrew.moya.facade.*;
import fi.codecrew.moya.model.*;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import java.util.Date;
import fi.codecrew.moya.enums.TournamentStatus; import java.util.List;
import fi.codecrew.moya.enums.TournamentTeamMemberRole;
import fi.codecrew.moya.enums.apps.TournamentPermission;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.TournamentFacade;
import fi.codecrew.moya.facade.TournamentGameFacade;
import fi.codecrew.moya.facade.TournamentParticipantFacade;
import fi.codecrew.moya.facade.TournamentRuleFacade;
import fi.codecrew.moya.facade.TournamentTeamMemberFacade;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Tournament;
import fi.codecrew.moya.model.TournamentGame;
import fi.codecrew.moya.model.TournamentParticipant;
import fi.codecrew.moya.model.TournamentRule;
import fi.codecrew.moya.model.TournamentTeamMember;
/** /**
* Session Bean implementation class TournamentBean * Session Bean implementation class TournamentBean
...@@ -80,6 +69,30 @@ public class TournamentBean implements TournamentBeanLocal { ...@@ -80,6 +69,30 @@ public class TournamentBean implements TournamentBeanLocal {
} }
@Override @Override
public boolean canUserParticipate(Tournament tournament) {
if(!permissionBean.hasPermission(TournamentPermission.PARTICIPATE))
return false;
if(tournament == null) {
return false;
}
// no roles specified, open for everyone
if(tournament.getOpenForRoles() == null || tournament.getOpenForRoles().size() == 0) {
return true;
}
for (Role r : tournament.getOpenForRoles()) {
if (permissionBean.getCurrentUser().getRoles().contains(r)) {
return true;
}
}
return false;
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW) @RolesAllowed(TournamentPermission.S_VIEW)
public List<TournamentGame> getGames() { public List<TournamentGame> getGames() {
return tournamentGameFacade.getGames(); return tournamentGameFacade.getGames();
......
...@@ -99,7 +99,6 @@ ...@@ -99,7 +99,6 @@
<p:slider for="playerBackupSlider" /> <p:slider for="playerBackupSlider" />
</h:panelGrid> </h:panelGrid>
<h2>#{i18n['tournaments.admin.registration_time_constraints']}</h2> <h2>#{i18n['tournaments.admin.registration_time_constraints']}</h2>
<h:panelGrid columns="2"> <h:panelGrid columns="2">
...@@ -114,6 +113,12 @@ ...@@ -114,6 +113,12 @@
<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>
<h2>#{i18n['tournaments.admin.open_for_roles']}</h2>
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="roles" value="#{tournamentCreateView.tournament.openForRoles}">
<f:selectItems var="roleitem" itemLabel="#{roleitem.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<br /> <br />
</p:panel> </p:panel>
<div style="float: right;"> <div style="float: right;">
......
...@@ -50,6 +50,11 @@ ...@@ -50,6 +50,11 @@
<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>
<h2>#{i18n['tournaments.admin.open_for_roles']}</h2>
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="roles" value="#{tournamentEditView.tournament.openForRoles}">
<f:selectItems var="roleitem" itemLabel="#{roleitem.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<p:commandButton value="#{i18n['tournaments.admin.cancel_edits']}" action="#{tournamentEditView.cancel}" ajax="false" onerror="location.reload(true);"/> <p:commandButton value="#{i18n['tournaments.admin.cancel_edits']}" action="#{tournamentEditView.cancel}" ajax="false" onerror="location.reload(true);"/>
<p:commandButton value="#{i18n['tournaments.admin.edit_tournament']}" action="#{tournamentEditView.commit}" ajax="false" onerror="location.reload(true);"/> <p:commandButton value="#{i18n['tournaments.admin.edit_tournament']}" action="#{tournamentEditView.commit}" ajax="false" onerror="location.reload(true);"/>
......
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
</f:facet> </f:facet>
<h:panelGroup> <h:panelGroup>
<p:commandButton value="#{i18n['tournament.participate']}" action="#{tournamentParticipateView.participate(tournament.id)}" <p:commandButton value="#{i18n['tournament.participate']}" action="#{tournamentParticipateView.participate(tournament.id)}"
rendered="#{tournament.participants.size() lt tournament.maxParticipants}" ajax="false" onerror="location.reload(true);"/> rendered="#{tournamentParticipateView.canParticipate(tournament.id) and (tournament.participants.size() lt tournament.maxParticipants)}" ajax="false" onerror="location.reload(true);"/>
<h:outputText value="#{i18n['tournament.full']}" rendered="#{tournament.participants.size() ge tournament.maxParticipants}" /> <h:outputText value="#{i18n['tournament.full']}" rendered="#{tournament.participants.size() ge tournament.maxParticipants}" />
</h:panelGroup> </h:panelGroup>
</p:column> </p:column>
...@@ -95,6 +95,8 @@ ...@@ -95,6 +95,8 @@
</h:panelGrid> </h:panelGrid>
</p:rowExpansion> </p:rowExpansion>
</p:dataTable> </p:dataTable>
<p></p> <p></p>
<h2>#{i18n['tournaments.setup_closed_tournaments']}</h2> <h2>#{i18n['tournaments.setup_closed_tournaments']}</h2>
<p:dataTable value="#{tournamentListView.setupClosedPhaseTournaments}" var="tournament" styleClass="moya_datatable2">> <p:dataTable value="#{tournamentListView.setupClosedPhaseTournaments}" var="tournament" styleClass="moya_datatable2">>
......
...@@ -87,13 +87,23 @@ public class TournamentParticipateView extends GenericCDIView { ...@@ -87,13 +87,23 @@ public class TournamentParticipateView extends GenericCDIView {
} }
} }
public boolean canParticipate(Integer tournamentId) {
Tournament t = tournamentBean.getTournamentById(tournamentId);
return tournamentBean.canUserParticipate(t);
}
public String participate(Integer tournamentId) { public String participate(Integer tournamentId) {
if (!super.hasPermission(TournamentPermission.PARTICIPATE)) {
tournament = tournamentBean.getTournamentById(tournamentId);
if (!tournamentBean.canUserParticipate(tournament)) {
super.addFaceMessage("tournament.notRightsToParticipate"); super.addFaceMessage("tournament.notRightsToParticipate");
return null; return null;
} }
tournament = tournamentBean.getTournamentById(tournamentId);
if (tournamentBean.hasParticipations(permissionBean.getCurrentUser(), tournament)) { if (tournamentBean.hasParticipations(permissionBean.getCurrentUser(), tournament)) {
MessageHelper.err("tournament.already_participated_into_tournament"); MessageHelper.err("tournament.already_participated_into_tournament");
return "/tournaments/index.xhtml"; return "/tournaments/index.xhtml";
...@@ -212,9 +222,6 @@ public class TournamentParticipateView extends GenericCDIView { ...@@ -212,9 +222,6 @@ public class TournamentParticipateView extends GenericCDIView {
return "/tournaments/index.xhtml"; return "/tournaments/index.xhtml";
} }
public boolean canParticipate() {
return super.hasPermission(TournamentPermission.PARTICIPATE);
}
public Tournament getTournament() { public Tournament getTournament() {
return tournament; return tournament;
......
...@@ -53,7 +53,7 @@ public class RoleDataView extends GenericCDIView { ...@@ -53,7 +53,7 @@ public class RoleDataView extends GenericCDIView {
public ListDataModel<Role> getRoles() { public ListDataModel<Role> getRoles() {
if (roles == null) { if (roles == null) {
roles = new ListDataModel<Role>(rolebean.listRoles()); roles = new ListDataModel<>(rolebean.listRoles());
} }
return roles; return roles;
} }
......
...@@ -1560,3 +1560,4 @@ voting.create.voteEnd = Voting close ...@@ -1560,3 +1560,4 @@ voting.create.voteEnd = Voting close
voting.create.voteStart = Voting start voting.create.voteStart = Voting start
yes = Yes yes = Yes
tournaments.admin.open_for_roles=Roles allowing registeration
...@@ -1836,3 +1836,4 @@ voting.create.voteEnd = Voting close ...@@ -1836,3 +1836,4 @@ voting.create.voteEnd = Voting close
voting.create.voteStart = Voting start voting.create.voteStart = Voting start
yes = Yes yes = Yes
tournaments.admin.open_for_roles=Roles allowing registeration
...@@ -1823,3 +1823,4 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni ...@@ -1823,3 +1823,4 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni
voting.create.voteStart = \u00C4\u00E4nestys auki voting.create.voteStart = \u00C4\u00E4nestys auki
yes = Kyll\u00E4 yes = Kyll\u00E4
tournaments.admin.open_for_roles=Rekister\u00F6itymiseen oikeuttavat ryhm\u00E4t
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!