Commit 86e3bed9 by Juho Salli

Merge branch 'dbindexes' into 'master'

Db indexes

Few low hanging fruits. Comments in the code

See merge request !280
2 parents b10e766e 6660736a
...@@ -23,6 +23,7 @@ import java.util.List; ...@@ -23,6 +23,7 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.codecrew.moya.model.OrgRole; import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.OrgRoleRequest;
import fi.codecrew.moya.model.Role; import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
...@@ -45,4 +46,14 @@ public interface OrgRoleBeanLocal { ...@@ -45,4 +46,14 @@ public interface OrgRoleBeanLocal {
OrgRole addEventRole(Role eventRole, OrgRole orgRole); OrgRole addEventRole(Role eventRole, OrgRole orgRole);
void createRequest(OrgRoleRequest request);
List<OrgRole> getRequestableRoles();
List<OrgRoleRequest> getRequests(boolean showAll);
OrgRoleRequest saveRequest(OrgRoleRequest request);
OrgRoleRequest requestOk(OrgRoleRequest request);
} }
...@@ -305,25 +305,36 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -305,25 +305,36 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE events ADD codecrew_notes TEXT", "ALTER TABLE events ADD codecrew_notes TEXT",
}); });
dbUpdates.add(new String[] {
"update events set end_time = '2010-01-01 00:00:00' where end_time is null"
});
/* // ... jepjep.. Lefu
MERGEREQUESTIN TARKASTAJALLE: dbUpdates.add(new String[] {
"DROP TABLE org_role_requests",
Ylempään: "CREATE TABLE org_role_requests (id SERIAL NOT NULL, handled_notes TEXT, meta json, request_date TIMESTAMPTZ NOT NULL, requeste_handled TIMESTAMPTZ, request_notes TEXT, handler_id INTEGER, requested_role INTEGER NOT NULL, user_id INTEGER NOT NULL, PRIMARY KEY (id))",
User eikä eventuser, koska muuten teoriassa insomni xiv:n laneventistä voitaisiin sitten viitata eventuseriin, joka liittyy vectorama 2014:sta. "ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_handler_id FOREIGN KEY (handler_id) REFERENCES users (id)",
Onko näin hyvä, vai muutanko eventUseriksi, mielipiteitä? "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)",
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 :).
*/
// Run some profiling against local database. These were few of the low hanging fruits.
dbUpdates.add(new String[] { dbUpdates.add(new String[] {
"update events set end_time = '2010-01-01 00:00:00' where end_time is null" // User searching in admin view (seq scan to index scan)
"CREATE INDEX idx_eventuser_event ON event_users (event_id)",
// Menu subpage parent search.
"CREATE INDEX idx_menu_navigation_parent ON menu_navigation (parent_id)",
// constraint domains case insensitive also at database level.
// Select does not hit this yet because table is so small, but might someday
"CREATE UNIQUE INDEX idx_event_domains_domainname_key_lower ON event_domains (LOWER(domainname))",
// used for placecount calculation in shopping
"CREATE INDEX idx_places_product_id ON places (products_id)",
// Used placeslots calculation in shopping
"CREATE INDEX idx_place_slots_products ON place_slots (product_id, place_id)",
}); });
} }
public BootstrapBean() { public BootstrapBean() {
......
...@@ -177,6 +177,9 @@ public class MenuBean implements MenuBeanLocal { ...@@ -177,6 +177,9 @@ public class MenuBean implements MenuBeanLocal {
userprofile.setKey("topnavi.profile"); userprofile.setKey("topnavi.profile");
userprofile.addPage(menuitemfacade.findOrCreate("/user/edit"), UserPermission.VIEW_SELF); userprofile.addPage(menuitemfacade.findOrCreate("/user/edit"), UserPermission.VIEW_SELF);
userprofile.addPage(menuitemfacade.findOrCreate("/orgrole/requestRole"), UserPermission.REQUEST_ORGROLES);
userprofile.addPage(menuitemfacade.findOrCreate("/orgrole/requestSent"), UserPermission.REQUEST_ORGROLES).setVisible(false);
userprofile.addPage(menuitemfacade.findOrCreate("/user/changePassword"), UserPermission.VIEW_SELF); userprofile.addPage(menuitemfacade.findOrCreate("/user/changePassword"), UserPermission.VIEW_SELF);
userprofile.addPage(menuitemfacade.findOrCreate("/user/gameids"), UserPermission.MODIFY_OWN_GAMEIDS); userprofile.addPage(menuitemfacade.findOrCreate("/user/gameids"), UserPermission.MODIFY_OWN_GAMEIDS);
userprofile.addPage(menuitemfacade.findOrCreate("/auth/logout"), UserPermission.LOGOUT); userprofile.addPage(menuitemfacade.findOrCreate("/auth/logout"), UserPermission.LOGOUT);
...@@ -232,6 +235,9 @@ public class MenuBean implements MenuBeanLocal { ...@@ -232,6 +235,9 @@ public class MenuBean implements MenuBeanLocal {
adminroles.addPage(menuitemfacade.findOrCreate("/role/edit"), null).setVisible(false); adminroles.addPage(menuitemfacade.findOrCreate("/role/edit"), null).setVisible(false);
adminroles.addPage(menuitemfacade.findOrCreate("/orgrole/list"), UserPermission.READ_ORGROLES); adminroles.addPage(menuitemfacade.findOrCreate("/orgrole/list"), UserPermission.READ_ORGROLES);
adminroles.addPage(menuitemfacade.findOrCreate("/orgrole/create"), UserPermission.WRITE_ORGROLES); adminroles.addPage(menuitemfacade.findOrCreate("/orgrole/create"), UserPermission.WRITE_ORGROLES);
adminroles.addPage(menuitemfacade.findOrCreate("/orgrole/pendingRequests"), UserPermission.WRITE_ORGROLES);
adminroles.addPage(menuitemfacade.findOrCreate("/orgrole/edit"), null).setVisible(false);
adminroles.addPage(menuitemfacade.findOrCreate("/orgrole/editRequest"), null).setVisible(false);
MenuNavigation adminEventCards = adminuser.addPage(null, null); MenuNavigation adminEventCards = adminuser.addPage(null, null);
adminEventCards.setKey("subnavi.cards"); adminEventCards.setKey("subnavi.cards");
...@@ -243,19 +249,16 @@ public class MenuBean implements MenuBeanLocal { ...@@ -243,19 +249,16 @@ public class MenuBean implements MenuBeanLocal {
adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/shopToUser"), null).setVisible(false); adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/shopToUser"), null).setVisible(false);
adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/assocToUser"), null).setVisible(false); adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/assocToUser"), null).setVisible(false);
MenuNavigation vips = adminuser.addPage(null, null); MenuNavigation vips = adminuser.addPage(null, null);
vips.setKey("subnavi.vips"); vips.setKey("subnavi.vips");
vips.addPage(menuitemfacade.findOrCreate("/vip/viplist"), VipPermission.VIEW); vips.addPage(menuitemfacade.findOrCreate("/vip/viplist"), VipPermission.VIEW);
vips.addPage(menuitemfacade.findOrCreate("/vip/create"), VipPermission.VIEW).setVisible(false); vips.addPage(menuitemfacade.findOrCreate("/vip/create"), VipPermission.VIEW).setVisible(false);
vips.addPage(menuitemfacade.findOrCreate("/vip/edit"), VipPermission.VIEW).setVisible(false); vips.addPage(menuitemfacade.findOrCreate("/vip/edit"), VipPermission.VIEW).setVisible(false);
MenuNavigation adminAssociation = adminmenu.addPage(null, null); MenuNavigation adminAssociation = adminmenu.addPage(null, null);
adminAssociation.setKey("topnavi.adminassoc"); adminAssociation.setKey("topnavi.adminassoc");
adminAssociation.addPage(menuitemfacade.findOrCreate("/networkassociation/index"), NetworkAssociationPermission.CAN_ADMINISTER_ASSOCIATIONS); adminAssociation.addPage(menuitemfacade.findOrCreate("/networkassociation/index"), NetworkAssociationPermission.CAN_ADMINISTER_ASSOCIATIONS);
// shop // shop
MenuNavigation adminshop = adminmenu.addPage(null, null); MenuNavigation adminshop = adminmenu.addPage(null, null);
adminshop.setKey("topnavi.adminshop"); adminshop.setKey("topnavi.adminshop");
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
...@@ -33,9 +34,11 @@ import org.slf4j.LoggerFactory; ...@@ -33,9 +34,11 @@ import org.slf4j.LoggerFactory;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.facade.OrgRoleFacade; import fi.codecrew.moya.facade.OrgRoleFacade;
import fi.codecrew.moya.facade.OrgRoleRequestFacade;
import fi.codecrew.moya.facade.RoleFacade; import fi.codecrew.moya.facade.RoleFacade;
import fi.codecrew.moya.facade.UserFacade; import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.model.OrgRole; import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.OrgRoleRequest;
import fi.codecrew.moya.model.Role; import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
import fi.codecrew.moya.utilities.jpa.GenericFacade; import fi.codecrew.moya.utilities.jpa.GenericFacade;
...@@ -45,7 +48,11 @@ import fi.codecrew.moya.utilities.jpa.GenericFacade; ...@@ -45,7 +48,11 @@ import fi.codecrew.moya.utilities.jpa.GenericFacade;
*/ */
@Stateless @Stateless
@LocalBean @LocalBean
@DeclareRoles({ UserPermission.S_READ_ORGROLES, UserPermission.S_WRITE_ORGROLES }) @DeclareRoles({
UserPermission.S_READ_ORGROLES,
UserPermission.S_WRITE_ORGROLES,
UserPermission.S_REQUEST_ORGROLES,
})
public class OrgRoleBean implements OrgRoleBeanLocal { public class OrgRoleBean implements OrgRoleBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(OrgRoleBean.class); private static final Logger logger = LoggerFactory.getLogger(OrgRoleBean.class);
...@@ -62,6 +69,10 @@ public class OrgRoleBean implements OrgRoleBeanLocal { ...@@ -62,6 +69,10 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
private UserFacade userFacade; private UserFacade userFacade;
@EJB @EJB
private RoleFacade roleFacade; private RoleFacade roleFacade;
@EJB
private PermissionBean permbean;
@EJB
private OrgRoleRequestFacade orgrolerequestfacade;
public OrgRoleBean() { public OrgRoleBean() {
} }
...@@ -73,7 +84,7 @@ public class OrgRoleBean implements OrgRoleBeanLocal { ...@@ -73,7 +84,7 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
} }
@Override @Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES, }) @RolesAllowed({ UserPermission.S_READ_ORGROLES, UserPermission.S_REQUEST_ORGROLES })
public OrgRole find(Integer id) { public OrgRole find(Integer id) {
return orgRoleFacade.find(id); return orgRoleFacade.find(id);
} }
...@@ -183,4 +194,40 @@ public class OrgRoleBean implements OrgRoleBeanLocal { ...@@ -183,4 +194,40 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
return orgRole; return orgRole;
} }
@Override
@RolesAllowed({ UserPermission.S_REQUEST_ORGROLES })
public void createRequest(OrgRoleRequest request) {
request.setRequestDate(new Date());
request.setUser(permbean.getCurrentUser().getUser());
orgrolerequestfacade.create(request);
}
@Override
@RolesAllowed({ UserPermission.S_REQUEST_ORGROLES })
public List<OrgRole> getRequestableRoles() {
return orgRoleFacade.findUserRequestable();
}
@Override
@RolesAllowed({ UserPermission.S_WRITE_ORGROLES })
public List<OrgRoleRequest> getRequests(boolean showAll) {
return orgrolerequestfacade.findForOrganiser(showAll);
}
@Override
@RolesAllowed({ UserPermission.S_WRITE_ORGROLES })
public OrgRoleRequest saveRequest(OrgRoleRequest request) {
return orgrolerequestfacade.merge(request);
}
@Override
@RolesAllowed({ UserPermission.S_WRITE_ORGROLES })
public OrgRoleRequest requestOk(OrgRoleRequest request) {
OrgRoleRequest req = orgrolerequestfacade.reload(request);
req.setHandler(permbean.getCurrentUser().getUser());
req.setHandledNotes(request.getHandledNotes());
req.setRequestHandled(new Date());
addRole(req.getUser(), req.getRequestedRole());
return req;
}
} }
...@@ -65,6 +65,7 @@ import fi.codecrew.moya.facade.EventUserFacade; ...@@ -65,6 +65,7 @@ import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.FeedbackFacade; import fi.codecrew.moya.facade.FeedbackFacade;
import fi.codecrew.moya.facade.GameIDFacade; import fi.codecrew.moya.facade.GameIDFacade;
import fi.codecrew.moya.facade.GroupMembershipFacade; import fi.codecrew.moya.facade.GroupMembershipFacade;
import fi.codecrew.moya.facade.OrgRoleFacade;
import fi.codecrew.moya.facade.PlaceGroupFacade; import fi.codecrew.moya.facade.PlaceGroupFacade;
import fi.codecrew.moya.facade.PrintedCardFacade; import fi.codecrew.moya.facade.PrintedCardFacade;
import fi.codecrew.moya.facade.ProductFacade; import fi.codecrew.moya.facade.ProductFacade;
...@@ -177,6 +178,8 @@ public class UserBean implements UserBeanLocal { ...@@ -177,6 +178,8 @@ public class UserBean implements UserBeanLocal {
private EventFacade eventfacade; private EventFacade eventfacade;
@EJB @EJB
private ProductFacade productFacade; private ProductFacade productFacade;
@EJB
private OrgRoleFacade orgRoleFacade;
@Override @Override
@RolesAllowed(UserPermission.S_VIEW_ALL) @RolesAllowed(UserPermission.S_VIEW_ALL)
...@@ -232,7 +235,7 @@ public class UserBean implements UserBeanLocal { ...@@ -232,7 +235,7 @@ public class UserBean implements UserBeanLocal {
if (u != null) if (u != null)
{ {
addRecursive(checkedRoles, rolefacade.findForUser(u)); addRecursive(checkedRoles, rolefacade.findForUser(u));
addRecursive(checkedRoles, orgRoleFacade.findRolesForUser(u));
if (permbean.isLoggedIn()) { if (permbean.isLoggedIn()) {
// add roles from events default role. // add roles from events default role.
...@@ -1141,8 +1144,6 @@ public class UserBean implements UserBeanLocal { ...@@ -1141,8 +1144,6 @@ public class UserBean implements UserBeanLocal {
return eventUserFacade.findByLogin(username); return eventUserFacade.findByLogin(username);
} }
@Override @Override
@RolesAllowed(EventPermission.S_MANAGE_EVENT) @RolesAllowed(EventPermission.S_MANAGE_EVENT)
public EventUser getUserByAuthcode(String authcode) { public EventUser getUserByAuthcode(String authcode) {
...@@ -1188,5 +1189,4 @@ public class UserBean implements UserBeanLocal { ...@@ -1188,5 +1189,4 @@ public class UserBean implements UserBeanLocal {
return user; return user;
} }
} }
\ No newline at end of file
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
*/ */
package fi.codecrew.moya.facade; package fi.codecrew.moya.facade;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -25,12 +27,21 @@ import javax.ejb.LocalBean; ...@@ -25,12 +27,21 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.ListJoin;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.criteria.Subquery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.EventBeanLocal; import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.EventOrganiser; import fi.codecrew.moya.model.EventOrganiser;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.OrgRole; import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.OrgRole_; import fi.codecrew.moya.model.OrgRole_;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.Role_;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
/** /**
...@@ -41,7 +52,9 @@ import fi.codecrew.moya.model.User; ...@@ -41,7 +52,9 @@ import fi.codecrew.moya.model.User;
public class OrgRoleFacade extends IntegerPkGenericFacade<OrgRole> { public class OrgRoleFacade extends IntegerPkGenericFacade<OrgRole> {
@EJB @EJB
EventBeanLocal eventBean; private EventBeanLocal eventBean;
private static final Logger logger = LoggerFactory.getLogger(OrgRoleFacade.class);
public OrgRoleFacade() { public OrgRoleFacade() {
super(OrgRole.class); super(OrgRole.class);
...@@ -87,4 +100,38 @@ public class OrgRoleFacade extends IntegerPkGenericFacade<OrgRole> { ...@@ -87,4 +100,38 @@ public class OrgRoleFacade extends IntegerPkGenericFacade<OrgRole> {
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public List<OrgRole> findUserRequestable() {
EventOrganiser org = eventBean.getCurrentEvent().getOrganiser();
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<OrgRole> cq = cb.createQuery(OrgRole.class);
Root<OrgRole> root = cq.from(OrgRole.class);
cq.where(cb.equal(root.get(OrgRole_.eventOrganisation), org),
cb.isTrue(root.get(OrgRole_.userRequestable))
);
return getEm().createQuery(cq).getResultList();
}
public List<Role> findRolesForUser(EventUser u) {
LanEvent event = eventBean.getCurrentEvent();
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Role> cq = cb.createQuery(Role.class);
Root<OrgRole> root = cq.from(OrgRole.class);
ListJoin<OrgRole, Role> eventRoles = root.join(OrgRole_.eventRoles);
cq.select(eventRoles);
cq.where(
cb.equal(root.get(OrgRole_.eventOrganisation), event.getOrganiser()),
cb.isMember(u.getUser(), root.get(OrgRole_.users)),
cb.equal(eventRoles.get(Role_.event), event)
);
List<Role> ret = getEm().createQuery(cq).getResultList();
return ret;
}
} }
/*
* Copyright Codecrew Ry
*
* All rights reserved.
*
* This license applies to any software containing a notice placed by the
* copyright holder. Such software is herein referred to as the Software.
* This license covers modification, distribution and use of the Software.
*
* Any distribution and use in source and binary forms, with or without
* modification is not permitted without explicit written permission from the
* copyright owner.
*
* A non-exclusive royalty-free right is granted to the copyright owner of the
* Software to use, modify and distribute all modifications to the Software in
* future versions of the Software.
*
*/
package fi.codecrew.moya.facade;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.OrgRoleRequest;
import fi.codecrew.moya.model.OrgRoleRequest_;
import fi.codecrew.moya.model.OrgRole_;
/**
* Session Bean implementation class OrgRoleFacade
*/
@Stateless
@LocalBean
public class OrgRoleRequestFacade extends IntegerPkGenericFacade<OrgRoleRequest> {
@EJB
EventBeanLocal eventBean;
public OrgRoleRequestFacade() {
super(OrgRoleRequest.class);
}
public List<OrgRoleRequest> findForOrganiser(boolean showAll) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<OrgRoleRequest> cq = cb.createQuery(OrgRoleRequest.class);
Root<OrgRoleRequest> root = cq.from(OrgRoleRequest.class);
ArrayList<Predicate> preds = new ArrayList<>();
preds.add(cb.equal(root.get(OrgRoleRequest_.requestedRole).get(OrgRole_.eventOrganisation), eventBean.getCurrentEvent().getOrganiser()));
if (!showAll) {
preds.add(cb.isNull(root.get(OrgRoleRequest_.requestHandled)));
}
cq.where(preds.toArray(new Predicate[preds.size()]));
return getEm().createQuery(cq).getResultList();
}
}
...@@ -26,7 +26,7 @@ public class OrgRoleRequest extends GenericEntity { ...@@ -26,7 +26,7 @@ public class OrgRoleRequest extends GenericEntity {
private Date requestHandled; private Date requestHandled;
@ManyToOne() @ManyToOne()
@JoinColumn(name = "handler_id", nullable = false, updatable = false) @JoinColumn(name = "handler_id")
private User handler; private User handler;
@ManyToOne() @ManyToOne()
......
...@@ -37,11 +37,13 @@ public enum UserPermission implements IAppPermission { ...@@ -37,11 +37,13 @@ public enum UserPermission implements IAppPermission {
INVITE_USERS, // ("Invite users"), INVITE_USERS, // ("Invite users"),
READ_ORGROLES, // ("View organization roles"), READ_ORGROLES, // ("View organization roles"),
WRITE_ORGROLES, // ("Modify organization roles"), WRITE_ORGROLES, // ("Modify organization roles"),
REQUEST_ORGROLES,
VITUTTAAKO, VITUTTAAKO,
LOGGED_IN_USER, LOGGED_IN_USER,
MODIFY_OWN_GAMEIDS, MODIFY_OWN_GAMEIDS,
VIEW_ALL_GAMEIDS, VIEW_ALL_GAMEIDS,
HELPPAGE; HELPPAGE,
;
public static final String S_VIEW_ALL = "USER/VIEW_ALL"; public static final String S_VIEW_ALL = "USER/VIEW_ALL";
public static final String S_MODIFY = "USER/MODIFY"; public static final String S_MODIFY = "USER/MODIFY";
...@@ -59,6 +61,7 @@ public enum UserPermission implements IAppPermission { ...@@ -59,6 +61,7 @@ public enum UserPermission implements IAppPermission {
public static final String S_INVITE_USERS = "USER/INVITE_USERS"; public static final String S_INVITE_USERS = "USER/INVITE_USERS";
public static final String S_READ_ORGROLES = "USER/READ_ORGROLES"; public static final String S_READ_ORGROLES = "USER/READ_ORGROLES";
public static final String S_WRITE_ORGROLES = "USER/WRITE_ORGROLES"; public static final String S_WRITE_ORGROLES = "USER/WRITE_ORGROLES";
public static final String S_REQUEST_ORGROLES = "USER/REQUEST_ORGROLES";
public static final String S_VITUTTAAKO = "USER/VITUTTAAKO"; public static final String S_VITUTTAAKO = "USER/VITUTTAAKO";
public static final String S_MODIFY_OWN_GAMEIDS = "USER/MODIFY_OWN_GAMEIDS"; public static final String S_MODIFY_OWN_GAMEIDS = "USER/MODIFY_OWN_GAMEIDS";
public static final String S_VIEW_ALL_GAMEIDS = "USER/VIEW_ALL_GAMEIDS"; public static final String S_VIEW_ALL_GAMEIDS = "USER/VIEW_ALL_GAMEIDS";
......
<!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:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui"
xmlns:orgrole="http://java.sun.com/jsf/composite/cditools/orgrole">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<ui:param name="thispage" value="page.orgrole.list" />
<f:metadata>
<f:event type="preRenderView" listener="#{orgRolePendingRequestView.initPending()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['orgrole.pending.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="orgrolelist" styleClass="moya_datatable2">
<p:outputLabel for="showall" />
<p:dataTable border="1" id="user" value="#{orgRolePendingRequestView.requests}" var="req">
<p:column headerText="#{orgRoleRequest.id}" width="20px">
<h:outputText value="#{req.id}" />
</p:column>
<p:column headerText="#{i18n['user.wholeName']}">
<h:link outcome="/useradmin/edit" value="#{req.user.wholeName}">
<f:param name="userid" value="#{req.user.id}" />
</h:link>
</p:column>
<p:column headerText="#{i18n['orgRoleRequest.requestNotes']}">
<h:outputText value="#{req.requestNotes}" />
</p:column>
<p:column>
<h:outputText value="#{req.handledNotes}" />
</p:column>
<p:column headerText="#{i18n['orgRoleRequest.handledNotes']}">
<p:inputTextarea cols="40" rows="2"></p:inputTextarea>
</p:column>
<p:column>
<p:commandButton onerror="alert('#{i18n['orgrolerequest.commanderror']}'); location.reload();" action="#{orgRolePendingRequestView.requestOk}" update=":orgrolelist" />
</p:column>
<p:column>
<p:commandButton onerror="alert('#{i18n['orgrolerequest.commanderror']}'); location.reload();" action="#{orgRolePendingRequestView.discardRequest}" update=":orgrolelist" />
</p:column>
</p:dataTable>
</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:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui"
xmlns:orgrole="http://java.sun.com/jsf/composite/cditools/orgrole">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<ui:param name="thispage" value="page.orgrole.list" />
<f:metadata>
<f:event type="preRenderView" listener="#{orgRolePendingRequestView.initPending()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['orgrole.pending.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="orgrolelist" styleClass="moya_datatable2">
<p:selectBooleanCheckbox id="showall" value="#{orgRolePendingRequestView.showAll}" itemLabel="#{i18n['orgRoleRequest.showAll']}">
<p:ajax update=":orgrolelist" listener="#{orgRolePendingRequestView.reloadList()}" />
</p:selectBooleanCheckbox>
<p:dataTable border="1" id="user" value="#{orgRolePendingRequestView.requests}" var="req">
<p:column headerText="#{i18n['orgRoleRequest.id']}" width="20">
<h:link outcome="/orgrole/editRequest" value="#{req.id}">
<f:param value="#{req.id}" name="id" />
</h:link>
</p:column>
<p:column headerText="#{i18n['user.wholeName']}">
<h:link outcome="/useradmin/edit" value="#{req.user.wholeName}">
<f:param name="userid" value="#{req.user.id}" />
</h:link>
</p:column>
<p:column headerText="#{i18n['orgRoleRequest.requestedRole']}">
<h:outputText value="#{req.requestedRole.name}" />
</p:column>
<p:column headerText="#{i18n['orgRoleRequest.requestNotes']}">
<h:outputText value="#{req.requestNotes}" />
</p:column>
<p:column headerText="#{i18n['orgRoleRequest.handledNotes']}">
<p:inputTextarea cols="40" rows="2" value="#{req.handledNotes}"></p:inputTextarea>
</p:column>
<p:column>
<p:commandButton update=":orgrolelist" action="#{orgRolePendingRequestView.requestOk}" value="#{i18n['orgRoleRequest.requestOk']}" />
</p:column>
<p:column>
<p:commandButton update=":orgrolelist" action="#{orgRolePendingRequestView.discardRequest}" value="#{i18n['orgRoleRequest.discardRequest']}" />
</p:column>
</p:dataTable>
</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:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView" listener="#{orgRoleRequestView.initRequest()}" />
</f:metadata>
<ui:define name="content">
<h:form id="orgform">
<h:panelGrid columns="2">
<h:outputLabel for="roleselect" value="#{i18n['orgrolerequest.selectedRole']}" />
<p:selectOneMenu id="roleselect" value="#{orgRoleRequestView.selectedRole}" converter="#{orgRoleConverter}">
<f:selectItems value="#{orgRoleRequestView.orgroles}" var="r" itemLabel="#{r.name}" />
<f:ajax execute="@form" render="orgform:rolecontent" />
</p:selectOneMenu>
<h:outputLabel for="rolecontent" value="#{i18n['orgrolerequest.rolecontent']}" />
<h:outputText id="rolecontent" rendered="#{orgRoleRequestView.selectedRole != null}" value="#{orgRoleRequestView.selectedRole.notes}" />
<h:outputLabel for="requestreason" value="#{i18n['orgrolerequest.requestNotes']}" />
<p:inputTextarea cols="40" rows="10" id="requestreason" value="#{orgRoleRequestView.request.requestNotes}" />
</h:panelGrid>
<h:commandButton ajax="false" id="createrequest" value="#{i18n['orgrolerequest.create']}" action="#{orgRoleRequestView.createRequest()}" />
</h:form>
</ui:define>
</ui:composition>
</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:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<ui:composition template="#{sessionHandler.template}">
<ui:define name="content">
<h:outputText value="#{i18n['orgrolerequest.sentSuccessfully']}" />
</ui:define>
</ui:composition>
</html>
\ No newline at end of file
package fi.codecrew.moya.web.cdiview.user;
import java.util.Date;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import fi.codecrew.moya.beans.OrgRoleBeanLocal;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.OrgRoleRequest;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class OrgRolePendingRequestView extends GenericCDIView {
private static final long serialVersionUID = 9196654356396643701L;
@EJB
private OrgRoleBeanLocal orgrolebean;
private ListDataModel<OrgRoleRequest> requests;
private boolean sendEmail = true;
private String emailMessage = "Hurr";
private boolean showAll = false;
private OrgRoleRequest request;
public void initPending() {
if (super.requirePermissions(UserPermission.WRITE_ORGROLES) && requests == null) {
requests = new ListDataModel<>(orgrolebean.getRequests(isShowAll()));
super.beginConversation();
}
}
public void reloadList() {
requests = null;
request = null;
initPending();
}
public String requestOk() {
request = requests.getRowData();
orgrolebean.requestOk(request);
reloadList();
return null;
}
public String discardRequest() {
request = requests.getRowData();
request.setRequestHandled(new Date());
request.setHandler(permbean.getCurrentUser().getUser());
orgrolebean.saveRequest(request);
reloadList();
return null;
}
public ListDataModel<OrgRoleRequest> getRequests() {
return requests;
}
public void setRequests(ListDataModel<OrgRoleRequest> requests) {
this.requests = requests;
}
public String getEmailMessage() {
return emailMessage;
}
public void setEmailMessage(String emailMessage) {
this.emailMessage = emailMessage;
}
public boolean isSendEmail() {
return sendEmail;
}
public void setSendEmail(boolean sendEmail) {
this.sendEmail = sendEmail;
}
public OrgRoleRequest getRequest() {
return request;
}
public void setRequest(OrgRoleRequest request) {
this.request = request;
}
public boolean isShowAll() {
return showAll;
}
public void setShowAll(boolean showAll) {
this.showAll = showAll;
}
}
package fi.codecrew.moya.web.cdiview.user;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import fi.codecrew.moya.beans.OrgRoleBeanLocal;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.OrgRoleRequest;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class OrgRoleRequestView extends GenericCDIView {
private static final long serialVersionUID = 9196654356396643701L;
private OrgRoleRequest request;
@EJB
private OrgRoleBeanLocal orgrolebean;
private List<OrgRole> orgroles;
private OrgRole selectedRole;
public void initRequest() {
if (super.requirePermissions(UserPermission.REQUEST_ORGROLES) && request == null) {
request = new OrgRoleRequest();
orgroles = orgrolebean.getRequestableRoles();
if (!orgroles.isEmpty()) {
selectedRole = orgroles.get(0);
}
super.beginConversation();
}
}
public String createRequest() {
request.setRequestedRole(selectedRole);
orgrolebean.createRequest(request);
request = null;
initRequest();
return "/orgrole/requestSent";
}
public OrgRoleRequest getRequest() {
return request;
}
public void setRequest(OrgRoleRequest request) {
this.request = request;
}
public List<OrgRole> getOrgroles() {
return orgroles;
}
public void setOrgroles(List<OrgRole> orgroles) {
this.orgroles = orgroles;
}
public OrgRole getSelectedRole() {
return selectedRole;
}
public void setSelectedRole(OrgRole selectedRole) {
this.selectedRole = selectedRole;
}
}
...@@ -82,16 +82,16 @@ public class OrgRoleView extends GenericCDIView { ...@@ -82,16 +82,16 @@ public class OrgRoleView extends GenericCDIView {
} }
public void initForCreate() { public void initForCreate() {
if (requirePermissions(permbean.hasPermission(UserPermission.WRITE_ORGROLES))) { if (requirePermissions(permbean.hasPermission(UserPermission.WRITE_ORGROLES)) && orgRole == null) {
OrgRole role = new OrgRole(); OrgRole role = new OrgRole();
role.setEventOrganisation(eventBean.getCurrentEvent().getOrganiser()); role.setEventOrganisation(eventBean.getCurrentEvent().getOrganiser());
setOrgRole(role); orgRole = role;
super.beginConversation(); super.beginConversation();
} }
} }
public void initForEdit() { public void initForEdit() {
if (requirePermissions(permbean.hasPermission(UserPermission.WRITE_ORGROLES))) { if (requirePermissions(permbean.hasPermission(UserPermission.WRITE_ORGROLES)) && orgRole == null) {
orgRole = orgRoleBean.find(id); orgRole = orgRoleBean.find(id);
super.beginConversation(); super.beginConversation();
} }
......
/*
* Copyright Codecrew Ry
*
* All rights reserved.
*
* This license applies to any software containing a notice placed by the
* copyright holder. Such software is herein referred to as the Software.
* This license covers modification, distribution and use of the Software.
*
* Any distribution and use in source and binary forms, with or without
* modification is not permitted without explicit written permission from the
* copyright owner.
*
* A non-exclusive royalty-free right is granted to the copyright owner of the
* Software to use, modify and distribute all modifications to the Software in
* future versions of the Software.
*
*/
package fi.codecrew.moya.web.converter;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import fi.codecrew.moya.beans.PlaceBeanLocal;
import fi.codecrew.moya.model.EventMap;
import fi.codecrew.moya.utilities.jsf.GenericIntegerEntityConverter;
@Named
@RequestScoped
public class EventMapConverter extends GenericIntegerEntityConverter<EventMap> {
@EJB
private PlaceBeanLocal placebean;
@Override
protected EventMap find(Integer id) {
return placebean.findMap(id);
}
}
...@@ -170,6 +170,7 @@ event.domains.title = Domain ...@@ -170,6 +170,7 @@ event.domains.title = Domain
event.edit = Edit event.edit = Edit
event.endTime = End time event.endTime = End time
event.id = Event ID event.id = Event ID
event.listFutureEvents.title = Lista tulevista tapahtumista
event.name = Event name event.name = Event name
event.nextBillNumber = Initial bill number event.nextBillNumber = Initial bill number
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.
...@@ -194,7 +195,13 @@ eventmap.uploaderror = Virhe lis\u00E4tess\u00E4 karttapohjaa ...@@ -194,7 +195,13 @@ eventmap.uploaderror = Virhe lis\u00E4tess\u00E4 karttapohjaa
eventmap.width = Kartan leveys (px) eventmap.width = Kartan leveys (px)
eventorg.basicDetails = Perustiedot eventorg.basicDetails = Perustiedot
eventorg.codecrewDetails = Tapahtuman j\u00E4rjest\u00E4j\u00E4tiedot
eventorg.codecrewNotes = Codecrew -muistiinpanot
eventorg.codecrewResponsible = Codecrewin tukihenkil\u00F6
eventorg.create = Create eventorg.create = Create
eventorg.create.title = Luo tapahtumaj\u00E4rjest\u00E4j\u00E4
eventorg.list.title = Tapahtumaj\u00E4rjest\u00E4j\u00E4t
eventorg.organiserResponsible = J\u00E4rjest\u00E4j\u00E4n vastaava
eventorg.title = Tapahtuman tiedot eventorg.title = Tapahtuman tiedot
foodWave.closeNow = Close now foodWave.closeNow = Close now
...@@ -383,6 +390,7 @@ placegroup.showEticket = N\u00E4yt\u00E4 lippu ...@@ -383,6 +390,7 @@ placegroup.showEticket = N\u00E4yt\u00E4 lippu
placegroupview.groupCreator = Tilaaja placegroupview.groupCreator = Tilaaja
placegroupview.owner = Omistaja placegroupview.owner = Omistaja
placegroupview.placetransferred = Paikka annettu eteenp\u00E4in placegroupview.placetransferred = Paikka annettu eteenp\u00E4in
placegroupview.reserveForSelf = Valitse paikka itsellesi
placegroupview.toptext = \ placegroupview.toptext = \
placeslot.add = Lis\u00E4\u00E4 placeslot placeslot.add = Lis\u00E4\u00E4 placeslot
...@@ -528,11 +536,3 @@ vipProduct.name = Tuote ...@@ -528,11 +536,3 @@ vipProduct.name = Tuote
vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4 vipProduct.quantity = Lukum\u00E4\u00E4r\u00E4
yes = Kyll\u00E4 yes = Kyll\u00E4
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
...@@ -379,6 +379,7 @@ event.domains.title = Domain ...@@ -379,6 +379,7 @@ event.domains.title = Domain
event.edit = Edit event.edit = Edit
event.endTime = End time event.endTime = End time
event.id = Event ID event.id = Event ID
event.listFutureEvents.title = List of future events
event.name = Event name event.name = Event name
event.nextBillNumber = Initial bill number event.nextBillNumber = Initial bill number
event.nodates.message = Remember to add event start-date, end-date and ticket's sales start-date. event.nodates.message = Remember to add event start-date, end-date and ticket's sales start-date.
...@@ -418,13 +419,19 @@ eventorg.billAddress2 = Billing address 2 ...@@ -418,13 +419,19 @@ eventorg.billAddress2 = Billing address 2
eventorg.billAddress3 = Billing address 3 eventorg.billAddress3 = Billing address 3
eventorg.billAddress4 = Billing address 4 eventorg.billAddress4 = Billing address 4
eventorg.bundleCountry = Country bundle eventorg.bundleCountry = Country bundle
eventorg.codecrewDetails = Event organizer information
eventorg.codecrewNotes = Codecrew notes
eventorg.codecrewResponsible = Codecrew support
eventorg.create = Create eventorg.create = Create
eventorg.create.title = Create eventorganiser
eventorg.createEvent = Create event eventorg.createEvent = Create event
eventorg.createevent = Create new event eventorg.createevent = Create new event
eventorg.edit = Edit eventorg.edit = Edit
eventorg.events = Event of the organisation eventorg.events = Event of the organisation
eventorg.id = Event ID eventorg.id = Event ID
eventorg.list.title = Event organisers
eventorg.organisation = Organisation name eventorg.organisation = Organisation name
eventorg.organiserResponsible = Organizer responsible
eventorg.save = Save eventorg.save = Save
eventorg.title = Event details eventorg.title = Event details
...@@ -819,6 +826,14 @@ org.hibernate.validator.constraints.Length.message = length must be between {min ...@@ -819,6 +826,14 @@ org.hibernate.validator.constraints.Length.message = length must be between {min
org.hibernate.validator.constraints.NotEmpty.message = may not be empty org.hibernate.validator.constraints.NotEmpty.message = may not be empty
org.hibernate.validator.constraints.Range.message = must be between {min} and {max} org.hibernate.validator.constraints.Range.message = must be between {min} and {max}
orgRoleRequest.discardRequest = Discard request
orgRoleRequest.handledNotes = Handling notes
orgRoleRequest.id = ID
orgRoleRequest.requestNotes = Request notes
orgRoleRequest.requestOk = Accept request
orgRoleRequest.requestedRole = Requested role
orgRoleRequest.showAll = Show all request
orgrole.create = Create orgrole.create = Create
orgrole.edit = Edit orgrole orgrole.edit = Edit orgrole
orgrole.list.title = Organization role list orgrole.list.title = Organization role list
...@@ -826,9 +841,17 @@ orgrole.members.header = Members ...@@ -826,9 +841,17 @@ orgrole.members.header = Members
orgrole.name = Name orgrole.name = Name
orgrole.orgainisation = Organisation orgrole.orgainisation = Organisation
orgrole.parents = Parent orgrole.parents = Parent
orgrole.pending.title = Pending organisation role requests
orgrole.save = Save orgrole.save = Save
orgrole.userRequestable = User requestable role orgrole.userRequestable = User requestable role
orgrolerequest.commanderror = Error handling request. Please try again.
orgrolerequest.create = Create request
orgrolerequest.requestNotes = Request information
orgrolerequest.rolecontent = Role information
orgrolerequest.selectedRole = Requested role
orgrolerequest.sentSuccessfully = Request sent successfully
page.account.edit.header = Edit account events page.account.edit.header = Edit account events
page.account.list.header = Account events page.account.list.header = Account events
page.admin.sendimage.header = Send image page.admin.sendimage.header = Send image
...@@ -977,6 +1000,7 @@ placegroupview.placetransferred = Place is transferred ...@@ -977,6 +1000,7 @@ placegroupview.placetransferred = Place is transferred
placegroupview.releasePlace = Release placegroupview.releasePlace = Release
placegroupview.reservationName = Place placegroupview.reservationName = Place
placegroupview.reservationProduct = Ticket placegroupview.reservationProduct = Ticket
placegroupview.reserveForSelf = Select place for yourself
placegroupview.token = Placecode / user placegroupview.token = Placecode / user
placeslot.add = Add placeslot placeslot.add = Add placeslot
...@@ -1303,6 +1327,8 @@ submenu.neomap.view = Map ...@@ -1303,6 +1327,8 @@ submenu.neomap.view = Map
submenu.networkassociation.index = Associations submenu.networkassociation.index = Associations
submenu.orgrole.create = Create organisationrole submenu.orgrole.create = Create organisationrole
submenu.orgrole.list = Organisation roles submenu.orgrole.list = Organisation roles
submenu.orgrole.pendingRequests = Organisation role requests
submenu.orgrole.requestRole = Request role
submenu.pages.create = Create content submenu.pages.create = Create content
submenu.pages.list = List pages submenu.pages.list = List pages
submenu.place.adminGroups = Account places submenu.place.adminGroups = Account places
...@@ -1749,11 +1775,3 @@ voting.create.voteEnd = Voting close ...@@ -1749,11 +1775,3 @@ voting.create.voteEnd = Voting close
voting.create.voteStart = Voting start voting.create.voteStart = Voting start
yes = Yes yes = Yes
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
...@@ -381,10 +381,11 @@ event.domains.title = Verkkotunnus ...@@ -381,10 +381,11 @@ event.domains.title = Verkkotunnus
event.edit = Muokkaa event.edit = Muokkaa
event.endTime = Lopetusp\u00E4iv\u00E4 event.endTime = Lopetusp\u00E4iv\u00E4
event.id = Eventin id event.id = Eventin id
event.listFutureEvents.title = Lista tulevista tapahtumista
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
...@@ -420,13 +421,19 @@ eventorg.billAddress2 = Laskutusosoite 2 ...@@ -420,13 +421,19 @@ eventorg.billAddress2 = Laskutusosoite 2
eventorg.billAddress3 = Laskutusosoite 3 eventorg.billAddress3 = Laskutusosoite 3
eventorg.billAddress4 = Laskutusosoite 4 eventorg.billAddress4 = Laskutusosoite 4
eventorg.bundleCountry = Kieli-bundle eventorg.bundleCountry = Kieli-bundle
eventorg.codecrewDetails = Tapahtuman j\u00E4rjest\u00E4j\u00E4tiedot
eventorg.codecrewNotes = Codecrew -muistiinpanot
eventorg.codecrewResponsible = Codecrewin tukihenkil\u00F6
eventorg.create = Luo eventorg.create = Luo
eventorg.create.title = Luo tapahtumaj\u00E4rjest\u00E4j\u00E4
eventorg.createEvent = Luo tapahtuma eventorg.createEvent = Luo tapahtuma
eventorg.createevent = Luo uusi tapahtuma eventorg.createevent = Luo uusi tapahtuma
eventorg.edit = Muokkaa eventorg.edit = Muokkaa
eventorg.events = Organisaation tapahtumat eventorg.events = Organisaation tapahtumat
eventorg.id = Tapahtuman ID eventorg.id = Tapahtuman ID
eventorg.list.title = Tapahtumaj\u00E4rjest\u00E4j\u00E4t
eventorg.organisation = Organisaation nimi eventorg.organisation = Organisaation nimi
eventorg.organiserResponsible = J\u00E4rjest\u00E4j\u00E4n vastaava
eventorg.save = Tallenna eventorg.save = Tallenna
eventorg.title = Tapahtuman tiedot eventorg.title = Tapahtuman tiedot
...@@ -830,6 +837,14 @@ org.hibernate.validator.constraints.Length.message = length must be between {min ...@@ -830,6 +837,14 @@ org.hibernate.validator.constraints.Length.message = length must be between {min
org.hibernate.validator.constraints.NotEmpty.message = may not be empty org.hibernate.validator.constraints.NotEmpty.message = may not be empty
org.hibernate.validator.constraints.Range.message = must be between {min} and {max} org.hibernate.validator.constraints.Range.message = must be between {min} and {max}
orgRoleRequest.discardRequest = Hylk\u00E4\u00E4 pyynt\u00F6
orgRoleRequest.handledNotes = K\u00E4sittelyhuomiot
orgRoleRequest.id = ID
orgRoleRequest.requestNotes = Hakemuksen tiedot
orgRoleRequest.requestOk = Hyv\u00E4ksy pyynt\u00F6
orgRoleRequest.requestedRole = Haettu rooli
orgRoleRequest.showAll = N\u00E4yt\u00E4 kaikki hakemukset
orgrole.create = Luo orgrole.create = Luo
orgrole.edit = Muokkaa j\u00E4rjest\u00E4j\u00E4roolia orgrole.edit = Muokkaa j\u00E4rjest\u00E4j\u00E4roolia
orgrole.list.title = Lista organisaation rooleista orgrole.list.title = Lista organisaation rooleista
...@@ -837,9 +852,17 @@ orgrole.members.header = Ryhm\u00E4n j\u00E4senet ...@@ -837,9 +852,17 @@ orgrole.members.header = Ryhm\u00E4n j\u00E4senet
orgrole.name = Nimi orgrole.name = Nimi
orgrole.orgainisation = Organisaatio orgrole.orgainisation = Organisaatio
orgrole.parents = Periytyy orgrole.parents = Periytyy
orgrole.pending.title = Organisaatioroolihakemukset
orgrole.save = Tallenna orgrole.save = Tallenna
orgrole.userRequestable = K\u00E4ytt\u00E4j\u00E4n haettavissa orgrole.userRequestable = K\u00E4ytt\u00E4j\u00E4n haettavissa
orgrolerequest.commanderror = Pyynt\u00F6\u00E4 k\u00E4sitelless\u00E4 tapahtui virhe. Ole hyv\u00E4 ja yrit\u00E4 uudelleen.
orgrolerequest.create = L\u00E4het\u00E4 hakemus
orgrolerequest.requestNotes = Hakemuksen lis\u00E4tiedot
orgrolerequest.rolecontent = Roolin tiedot
orgrolerequest.selectedRole = Haettava rooli
orgrolerequest.sentSuccessfully = Hakemus l\u00E4hetetty onnistuneesti
page.account.edit.header = Muokkaa tilitapahtumia page.account.edit.header = Muokkaa tilitapahtumia
page.account.list.header = Tilitapahtumat page.account.list.header = Tilitapahtumat
page.admin.sendimage.header = L\u00E4het\u00E4 kuva page.admin.sendimage.header = L\u00E4het\u00E4 kuva
...@@ -962,6 +985,7 @@ placegroupview.placetransferred = Paikka on annettu eteenp\u00E4in. ...@@ -962,6 +985,7 @@ placegroupview.placetransferred = Paikka on annettu eteenp\u00E4in.
placegroupview.releasePlace = Vapauta placegroupview.releasePlace = Vapauta
placegroupview.reservationName = Paikka placegroupview.reservationName = Paikka
placegroupview.reservationProduct = Lippu placegroupview.reservationProduct = Lippu
placegroupview.reserveForSelf = Valitse paikka itsellesi
placegroupview.token = Paikkakoodi / k\u00E4ytt\u00E4j\u00E4 placegroupview.token = Paikkakoodi / k\u00E4ytt\u00E4j\u00E4
placeslot.add = Lis\u00E4\u00E4 placeslot placeslot.add = Lis\u00E4\u00E4 placeslot
...@@ -1285,6 +1309,8 @@ submenu.neomap.view = Paikkakartta ...@@ -1285,6 +1309,8 @@ submenu.neomap.view = Paikkakartta
submenu.networkassociation.index = Assosiaatiot submenu.networkassociation.index = Assosiaatiot
submenu.orgrole.create = Luo j\u00E4rjest\u00E4j\u00E4rooli submenu.orgrole.create = Luo j\u00E4rjest\u00E4j\u00E4rooli
submenu.orgrole.list = J\u00E4rjest\u00E4j\u00E4roolit submenu.orgrole.list = J\u00E4rjest\u00E4j\u00E4roolit
submenu.orgrole.pendingRequests = Organisaatioroolihakemukset
submenu.orgrole.requestRole = Hae roolia
submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4 submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4
submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t
submenu.place.adminGroups = Omat paikat submenu.place.adminGroups = Omat paikat
...@@ -1733,11 +1759,3 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni ...@@ -1733,11 +1759,3 @@ voting.create.voteEnd = \u00C4\u00E4nestys kiinni
voting.create.voteStart = \u00C4\u00E4nestys auki voting.create.voteStart = \u00C4\u00E4nestys auki
yes = Kyll\u00E4 yes = Kyll\u00E4
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!