Commit 9ef0569c by Tuomas Riihimäki

Merge branch 'eventResponsibleList' into 'master'

Event responsible list

Lista tulevista tapahtumista eventOrgiin, lisäksi nyt voi tapahtumalle pistää vastaajan sekä codecrewin että tapahtumajärjestäjän puolelta.

See merge request !274
2 parents cfc74206 b0e8d8f2
...@@ -69,4 +69,6 @@ public interface EventBeanLocal { ...@@ -69,4 +69,6 @@ public interface EventBeanLocal {
List<LanEvent> findAllEventsForCurrentUser(); List<LanEvent> findAllEventsForCurrentUser();
List<LanEvent> findFutureAndRunningEventsForCurrentUser(); List<LanEvent> findFutureAndRunningEventsForCurrentUser();
List<LanEvent> findFutureEvents();
} }
...@@ -186,4 +186,10 @@ public interface UserBeanLocal { ...@@ -186,4 +186,10 @@ public interface UserBeanLocal {
* @return true if matches, false if does not, null if user not found. * @return true if matches, false if does not, null if user not found.
*/ */
Boolean checkPassword(EventUser eventUser, String password); Boolean checkPassword(EventUser eventUser, String password);
/**
*
* @return List of moya -surperusers
*/
List<User> findSuperusers();
} }
...@@ -295,8 +295,35 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -295,8 +295,35 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_handler_id FOREIGN KEY (handler_id) REFERENCES users (id)", "ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_handler_id FOREIGN KEY (handler_id) REFERENCES users (id)",
"ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_requested_role FOREIGN KEY (requested_role) REFERENCES org_roles (id)", "ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_requested_role FOREIGN KEY (requested_role) REFERENCES org_roles (id)",
"ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_user_id FOREIGN KEY (user_id) REFERENCES users (id)", "ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_user_id FOREIGN KEY (user_id) REFERENCES users (id)",
});
dbUpdates.add(new String[] {
"ALTER TABLE events ADD codecrew_responsible_user_id INTEGER",
"ALTER TABLE events ADD CONSTRAINT FK_events_codecrew_responsible_users FOREIGN KEY (codecrew_responsible_user_id) REFERENCES users (id)",
"ALTER TABLE events ADD organiser_responsible_user_id INTEGER",
"ALTER TABLE events ADD CONSTRAINT FK_events_organiser_responsible_users FOREIGN KEY (organiser_responsible_user_id) REFERENCES users (id)",
"ALTER TABLE events ADD codecrew_notes TEXT",
});
/*
MERGEREQUESTIN TARKASTAJALLE:
Ylempään:
User eikä eventuser, koska muuten teoriassa insomni xiv:n laneventistä voitaisiin sitten viitata eventuseriin, joka liittyy vectorama 2014:sta.
Onko näin hyvä, vai muutanko eventUseriksi, mielipiteitä?
Alempaan:
Meillä on vanhoja tapahtumia joissa ei ole lopetusaikaa -> jotta nämä "näytetään tulevat tapahtumat" -näkymät ois
hyödyllisiä, niin tämä päivitys on kiva. Ilmanlopetusaikaa olevat tulevat listoihin mukaan, koska lopetusaikaa ei pakosti ole vielä rakennusvaiheessa asetettu.
Jos olet erimieltä niin kerro irkissä ennen acceptointia ja teen temppuja :).
*/
dbUpdates.add(new String[] {
"update events set end_time = '2010-01-01 00:00:00' where end_time is null"
}); });
} }
public BootstrapBean() { public BootstrapBean() {
......
...@@ -368,4 +368,10 @@ public class EventBean implements EventBeanLocal { ...@@ -368,4 +368,10 @@ public class EventBean implements EventBeanLocal {
return retlist; return retlist;
} }
@Override
@RolesAllowed(SpecialPermission.S_SUPERADMIN)
public List<LanEvent> findFutureEvents() {
return eventFacade.findFutureEvents();
}
} }
...@@ -95,6 +95,7 @@ import fi.codecrew.moya.utilities.PasswordFunctions; ...@@ -95,6 +95,7 @@ import fi.codecrew.moya.utilities.PasswordFunctions;
import fi.codecrew.moya.utilities.SearchQuery; import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult; import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.utilities.moyamessage.MoyaEventType; import fi.codecrew.moya.utilities.moyamessage.MoyaEventType;
import scala.tools.cmd.Spec;
@LocalBean @LocalBean
@Stateless @Stateless
...@@ -105,6 +106,7 @@ import fi.codecrew.moya.utilities.moyamessage.MoyaEventType; ...@@ -105,6 +106,7 @@ import fi.codecrew.moya.utilities.moyamessage.MoyaEventType;
UserPermission.S_MODIFY, UserPermission.S_MODIFY,
SpecialPermission.S_USER, SpecialPermission.S_USER,
EventPermission.S_MANAGE_EVENT, EventPermission.S_MANAGE_EVENT,
SpecialPermission.S_SUPERADMIN
}) })
public class UserBean implements UserBeanLocal { public class UserBean implements UserBeanLocal {
...@@ -1128,6 +1130,12 @@ public class UserBean implements UserBeanLocal { ...@@ -1128,6 +1130,12 @@ public class UserBean implements UserBeanLocal {
return null; return null;
} }
@Override
@RolesAllowed(SpecialPermission.S_SUPERADMIN)
public List<User> findSuperusers() {
return userFacade.findSuperusers();
}
@PermitAll @PermitAll
public EventUser findEventuserByLoginUnsecure(String username) { public EventUser findEventuserByLoginUnsecure(String username) {
return eventUserFacade.findByLogin(username); return eventUserFacade.findByLogin(username);
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
*/ */
package fi.codecrew.moya.facade; package fi.codecrew.moya.facade;
import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
...@@ -102,4 +104,28 @@ public class EventFacade extends IntegerPkGenericFacade<LanEvent> { ...@@ -102,4 +104,28 @@ public class EventFacade extends IntegerPkGenericFacade<LanEvent> {
List<LanEvent> events = getEm().createQuery(cq).getResultList(); List<LanEvent> events = getEm().createQuery(cq).getResultList();
return events; return events;
} }
/**
* Finds all "future" -events, this means also events that are ended under week ago
*
* @return
*/
public List<LanEvent> findFutureEvents() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<LanEvent> cq = cb.createQuery(LanEvent.class);
Root<LanEvent> root = cq.from(LanEvent.class);
Calendar tmpCal = Calendar.getInstance();
tmpCal.add(Calendar.WEEK_OF_YEAR, -1);
Date compareDate = tmpCal.getTime();
cq.where(
cb.or(
cb.isNull(root.get(LanEvent_.endTime)),
cb.greaterThanOrEqualTo(root.get(LanEvent_.endTime), compareDate)
)
);
return getEm().createQuery(cq).getResultList();
}
} }
...@@ -218,7 +218,14 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -218,7 +218,14 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
return sort; return sort;
} }
public List<User> findSuperusers() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class);
cq.where(cb.isTrue(root.get(User_.superadmin)));
return getEm().createQuery(cq).getResultList();
}
// public SearchResult<User> searchEventUsers(SearchQuery query) // public SearchResult<User> searchEventUsers(SearchQuery query)
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
*/ */
package fi.codecrew.moya.model; package fi.codecrew.moya.model;
import java.beans.Transient;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
...@@ -129,6 +130,20 @@ public class LanEvent extends GenericEntity { ...@@ -129,6 +130,20 @@ public class LanEvent extends GenericEntity {
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL) @OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<LanEventProperty> properties = new ArrayList<LanEventProperty>(); private List<LanEventProperty> properties = new ArrayList<LanEventProperty>();
@ManyToOne
@JoinColumn(name = "codecrew_responsible_user_id", referencedColumnName = "id", nullable = true)
private User codecrewResponsible;
@ManyToOne
@JoinColumn(name = "organiser_responsible_user_id", referencedColumnName = "id", nullable = true)
private User organiserResponsible;
/**
* Internal notes for this event, like update status etc.
*/
@Column(name="codecrew_notes")
private String codecrewNotes;
// @OneToMany(mappedBy = "event") // @OneToMany(mappedBy = "event")
// private List<Vip> vips; // private List<Vip> vips;
...@@ -337,6 +352,43 @@ public class LanEvent extends GenericEntity { ...@@ -337,6 +352,43 @@ public class LanEvent extends GenericEntity {
this.theme = theme; this.theme = theme;
} }
public User getCodecrewResponsible() {
return codecrewResponsible;
}
public void setCodecrewResponsible(User codecrewResponsible) {
this.codecrewResponsible = codecrewResponsible;
}
public User getOrganiserResponsible() {
return organiserResponsible;
}
public void setOrganiserResponsible(User organiserResponsible) {
this.organiserResponsible = organiserResponsible;
}
public String getCodecrewNotes() {
return codecrewNotes;
}
public void setCodecrewNotes(String codecrewNotes) {
this.codecrewNotes = codecrewNotes;
}
/**
* @return first domain from domains -list
*/
@Transient
public String getFirstDomain() {
if(getDomains() == null || getDomains().size() <= 0) {
return "";
}
return getDomains().get(0).getDomain();
}
// public List<Vip> getVips() { // public List<Vip> getVips() {
// return vips; // return vips;
// } // }
......
...@@ -76,6 +76,55 @@ ...@@ -76,6 +76,55 @@
</p:fieldset> </p:fieldset>
</h:form> </h:form>
<br /><br />
<h:form>
<p:fieldset id="codecrewDetails" legend="#{i18n['eventorg.codecrewDetails']}" toggleable="true" collapsed="true">
<p:panelGrid columns="2">
<p:outputLabel for="codecrewResponsible" value="#{i18n['eventorg.codecrewResponsible']}" />
<h:panelGroup>
<p:selectOneMenu rendered="#{eventorgView.canChangeCodecrewResponsible}" id="codecrewResponsible" value="#{eventorgView.event.codecrewResponsible}" converter="#{userConverter}" >
<f:selectItem itemLabel=" " itemValue="#{null}" />
<f:selectItems value="#{eventorgView.superUsers}" var="user" itemLabel="#{user.shortUserDescriptor}" />
</p:selectOneMenu>
<p:panelGrid columns="1" rendered="#{eventorgView.event.codecrewResponsible != null}">
<h:outputText value="#{eventorgView.event.codecrewResponsible.nick}" />
<h:outputText value="#{eventorgView.event.codecrewResponsible.wholeName}" />
<h:outputText value="#{eventorgView.event.codecrewResponsible.phone}" />
<h:outputText value="#{eventorgView.event.codecrewResponsible.email}" />
</p:panelGrid>
<br />
</h:panelGroup>
<p:outputLabel for="organiserResponsible" value="#{i18n['eventorg.organiserResponsible']}" />
<h:panelGroup>
<p:selectOneMenu id="organiserResponsible" value="#{eventorgView.event.organiserResponsible}" converter="#{userConverter}">
<f:selectItem itemLabel=" " itemValue="#{null}" />
<f:selectItems value="#{eventorgView.eventUsers}" var="eventUser" itemLabel="#{eventUser.user.shortUserDescriptor}" itemValue="#{eventUser.user}"/>
</p:selectOneMenu>
<p:panelGrid columns="1" rendered="#{eventorgView.event.organiserResponsible != null}">
<h:outputText value="#{eventorgView.event.organiserResponsible.nick}" />
<h:outputText value="#{eventorgView.event.organiserResponsible.wholeName}" />
<h:outputText value="#{eventorgView.event.organiserResponsible.phone}" />
<h:outputText value="#{eventorgView.event.organiserResponsible.email}" />
</p:panelGrid>
<br />
</h:panelGroup>
<p:outputLabel for="codecrewNotes" value="#{i18n['eventorg.codecrewNotes']}" />
<p:inputTextarea id="codecrewNotes" value="#{eventorgView.event.codecrewNotes}" cols="80" rows="5" />
</p:panelGrid>
<br /><br />
<p:commandButton actionListener="#{eventorgView.saveEvent()}" value="#{i18n['event.save']}" update="codecrewDetails" />
</p:fieldset>
</h:form>
<br /><br />
<p:fieldset legend="Tools" toggleable="true" collapsed="true"> <p:fieldset legend="Tools" toggleable="true" collapsed="true">
<h:form> <h:form>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
</f:metadata>
<ui:define name="content">
<h:form>
<h:link outcome="eventCalendar" value="#{i18n['event.calendar.title']}" /><br />
<h:link outcome="listFutureEvents" value="#{i18n['event.listFutureEvents.title']}" /><br />
<h:link outcome="list" value="#{i18n['event.calendar.title']}" /><br />
<h:link outcome="create" value="#{i18n['eventorg.create.title']}" /><br />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
</f:metadata>
<ui:define name="content">
<h:form>
<p:fieldset legend="#{i18n['event.listFutureEvents.title']}">
<p:dataTable value="#{eventorgView.futureEvents}" var="event">
<p:column>
<f:facet name="header">
<p:outputLabel value="#{i18n['eventorg.organisation']}"/>
</f:facet>
<p:link outcome="/eventorg/edit" value="#{event.organiser.organisation}">
<f:param name="id" value="#{event.organiser.id}" />
</p:link>
</p:column>
<p:column>
<f:facet name="header">
<p:outputLabel value="#{i18n['event.name']}"/>
</f:facet>
<p:link outcome="/eventorg/editEvent" value="#{event.name}">
<f:param name="eventid" value="#{event.id}" />
</p:link>
</p:column>
<p:column style="width: 80px">
<f:facet name="header">
<p:outputLabel value="#{i18n['event.ticketSalesBegin']}"/>
</f:facet>
<p:outputLabel value="#{event.ticketSalesBegin}">
<f:convertDateTime pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
</p:outputLabel>
</p:column>
<p:column style="width: 80px">
<f:facet name="header">
<p:outputLabel value="#{i18n['event.startTime']}"/>
</f:facet>
<p:outputLabel value="#{event.startTime}" >
<f:convertDateTime pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
</p:outputLabel>
</p:column>
<p:column style="width: 80px">
<f:facet name="header">
<p:outputLabel value="#{i18n['event.endTime']}"/>
</f:facet>
<p:outputLabel value="#{event.endTime}" >
<f:convertDateTime pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
</p:outputLabel>
</p:column>
<p:column >
<f:facet name="header">
<p:outputLabel value="#{i18n['eventorg.codecrewResponsible']}"/>
</f:facet>
<p:outputLabel rendered="#{event.codecrewResponsible != null}" value="#{event.codecrewResponsible.shortUserDescriptor} // #{event.codecrewResponsible.phone}" />
</p:column>
<p:column >
<f:facet name="header">
<p:outputLabel value="#{i18n['eventorg.organiserResponsible']}"/>
</f:facet>
<p:outputLabel rendered="#{event.organiserResponsible != null}" value="#{event.organiserResponsible.shortUserDescriptor} // #{event.codecrewResponsible.phone}" />
</p:column>
<p:column>
<a href="https://#{event.firstDomain}/">https://#{event.firstDomain}/"</a>
</p:column>
</p:dataTable>
</p:fieldset>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -27,6 +27,8 @@ import javax.faces.model.ListDataModel; ...@@ -27,6 +27,8 @@ import javax.faces.model.ListDataModel;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.model.*;
import org.primefaces.model.DefaultScheduleEvent; import org.primefaces.model.DefaultScheduleEvent;
import org.primefaces.model.DefaultScheduleModel; import org.primefaces.model.DefaultScheduleModel;
import org.primefaces.model.ScheduleModel; import org.primefaces.model.ScheduleModel;
...@@ -37,10 +39,6 @@ import fi.codecrew.moya.beans.EventBeanLocal; ...@@ -37,10 +39,6 @@ import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.EventOrganiserBeanLocal; import fi.codecrew.moya.beans.EventOrganiserBeanLocal;
import fi.codecrew.moya.beans.SitePageBeanLocal; import fi.codecrew.moya.beans.SitePageBeanLocal;
import fi.codecrew.moya.enums.apps.EventPermission; import fi.codecrew.moya.enums.apps.EventPermission;
import fi.codecrew.moya.model.EventOrganiser;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.LanEventDomain;
import fi.codecrew.moya.utilities.I18n; import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.web.annotations.LoggedIn; import fi.codecrew.moya.web.annotations.LoggedIn;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
...@@ -80,6 +78,9 @@ public class EventOrgView extends GenericCDIView { ...@@ -80,6 +78,9 @@ public class EventOrgView extends GenericCDIView {
private LanEvent copyParty; private LanEvent copyParty;
@EJB
private UserBeanLocal userBean;
private transient ListDataModel<LanEventDomain> eventdomains; private transient ListDataModel<LanEventDomain> eventdomains;
ScheduleModel eventsCalendar = null; ScheduleModel eventsCalendar = null;
...@@ -292,6 +293,10 @@ public class EventOrgView extends GenericCDIView { ...@@ -292,6 +293,10 @@ public class EventOrgView extends GenericCDIView {
return eventsCalendar; return eventsCalendar;
} }
public List<LanEvent> getFutureEvents() {
return eventbean.findFutureEvents();
}
public String copySiteContent() { public String copySiteContent() {
sitepagebean.copySites(copyParty, event); sitepagebean.copySites(copyParty, event);
...@@ -306,4 +311,21 @@ public class EventOrgView extends GenericCDIView { ...@@ -306,4 +311,21 @@ public class EventOrgView extends GenericCDIView {
this.copyParty = copyParty; this.copyParty = copyParty;
} }
public List<User> getSuperUsers() {
if(!permbean.getCurrentUser().isSuperadmin())
return new ArrayList<User>();
return userBean.findSuperusers();
}
public List<EventUser> getEventUsers() {
return userBean.getUsers();
}
public boolean isCanChangeCodecrewResponsible() {
return permbean.getCurrentUser().isSuperadmin();
}
} }
...@@ -529,3 +529,10 @@ vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4 ...@@ -529,3 +529,10 @@ vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4
yes = Kyll\u00E4 yes = Kyll\u00E4
placegroupview.reserveForSelf=Valitse paikka itsellesi placegroupview.reserveForSelf=Valitse paikka itsellesi
eventorg.codecrewDetails=Tapahtuman j\u00E4rjest\u00E4j\u00E4tiedot
eventorg.codecrewResponsible=Codecrewin tukihenkil\u00F6
eventorg.organiserResponsible=J\u00E4rjest\u00E4j\u00E4n vastaava
eventorg.codecrewNotes=Codecrew -muistiinpanot
eventorg.list.title=Tapahtumaj\u00E4rjest\u00E4j\u00E4t
eventorg.create.title=Luo tapahtumaj\u00E4rjest\u00E4j\u00E4
event.listFutureEvents.title=Lista tulevista tapahtumista
...@@ -1750,3 +1750,10 @@ voting.create.voteStart = Voting start ...@@ -1750,3 +1750,10 @@ voting.create.voteStart = Voting start
yes = Yes yes = Yes
placegroupview.reserveForSelf=Select place for yourself placegroupview.reserveForSelf=Select place for yourself
eventorg.codecrewDetails=Event organizer information
eventorg.codecrewResponsible=Codecrew support
eventorg.organiserResponsible=Organizer responsible
eventorg.codecrewNotes=Codecrew notes
eventorg.list.title=Event organisers
eventorg.create.title=Create eventorganiser
event.listFutureEvents.title=List of future events
...@@ -384,7 +384,7 @@ event.id = Eventin id ...@@ -384,7 +384,7 @@ event.id = Eventin id
event.name = Tapahtuman nimi event.name = Tapahtuman nimi
event.nextBillNumber = Seuraavan laskun numero event.nextBillNumber = Seuraavan laskun numero
event.nodates.message = Lis\u00E4\u00E4 tapahtumaan v\u00E4hint\u00E4\u00E4n aloitusp\u00E4iv\u00E4, lopetusp\u00E4iv\u00E4 sek\u00E4 lipunmyynnin aloitusp\u00E4iv\u00E4. event.nodates.message = Lis\u00E4\u00E4 tapahtumaan v\u00E4hint\u00E4\u00E4n aloitusp\u00E4iv\u00E4, lopetusp\u00E4iv\u00E4 sek\u00E4 lipunmyynnin aloitusp\u00E4iv\u00E4.
event.nodates.title = P\u00E4iv\u00E4m\u00E4\u00E4ri\u00E4 puuttuu! event.nodates.title = P\u00E4iv\u00E4m\u00E4\u00E4ri\u00E4 puuttuu\!
event.privateProperties.title = Yksityiset ominaisuudet event.privateProperties.title = Yksityiset ominaisuudet
event.properties.title = Ominaisuudet event.properties.title = Ominaisuudet
event.referenceNumberBase = Viitenumeron pohja event.referenceNumberBase = Viitenumeron pohja
...@@ -1734,3 +1734,10 @@ voting.create.voteStart = \u00C4\u00E4nestys auki ...@@ -1734,3 +1734,10 @@ voting.create.voteStart = \u00C4\u00E4nestys auki
yes = Kyll\u00E4 yes = Kyll\u00E4
placegroupview.reserveForSelf=Valitse paikka itsellesi placegroupview.reserveForSelf=Valitse paikka itsellesi
eventorg.codecrewDetails=Tapahtuman j\u00E4rjest\u00E4j\u00E4tiedot
eventorg.codecrewResponsible=Codecrewin tukihenkil\u00F6
eventorg.organiserResponsible=J\u00E4rjest\u00E4j\u00E4n vastaava
eventorg.codecrewNotes=Codecrew -muistiinpanot
eventorg.list.title=Tapahtumaj\u00E4rjest\u00E4j\u00E4t
eventorg.create.title=Luo tapahtumaj\u00E4rjest\u00E4j\u00E4
event.listFutureEvents.title=Lista tulevista tapahtumista
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!