Commit bbad7893 by Tuukka Kivilahti

sometgins

1 parent 5cc92394
...@@ -211,10 +211,30 @@ public class RoleBean implements RoleBeanLocal { ...@@ -211,10 +211,30 @@ public class RoleBean implements RoleBeanLocal {
cardTemplateBean.checkPrintedCard(usr); cardTemplateBean.checkPrintedCard(usr);
} }
@Override @Override
@RolesAllowed(UserPermission.S_READ_ROLES) @RolesAllowed(UserPermission.S_READ_ROLES)
public List<Role> getRoles(EventUser selectedUser) { public List<Role> getRoles(EventUser selectedUser) {
return roleFacade.findForUser(selectedUser); return roleFacade.findForUser(selectedUser);
} }
@Override
public void saveUserSelectableRoles(EventUser user, List<Role> roles) {
List<Role> allRoles = roleFacade.findAll();
for (Role ur : allRoles)
{
if (roles.contains(ur)) {
if (!ur.getUsers().contains(usr)) {
ur.getUsers().add(usr);
}
} else {
ur.getUsers().remove(usr);
}
}
cardTemplateBean.checkPrintedCard(usr);
}
} }
package fi.codecrew.moya.facade; package fi.codecrew.moya.facade;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -9,11 +10,11 @@ import javax.persistence.criteria.CriteriaBuilder; ...@@ -9,11 +10,11 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import fi.codecrew.moya.model.Role_;
import fi.codecrew.moya.beans.EventBeanLocal; import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent; import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.Role; import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.Role_;
@Stateless @Stateless
@LocalBean @LocalBean
...@@ -60,4 +61,28 @@ public class RoleFacade extends IntegerPkGenericFacade<Role> { ...@@ -60,4 +61,28 @@ public class RoleFacade extends IntegerPkGenericFacade<Role> {
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
public List<Role> findUserSelectableRoles() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Role> cq = cb.createQuery(Role.class);
Root<Role> root = cq.from(Role.class);
cq.where(cb.equal(root.get(Role_.event), eventbean.getCurrentEvent()),
cb.greaterThan(root.get(Role_.selectChildrensCount), new Integer(0)));
List<Role> roles = getEm().createQuery(cq).getResultList();
ArrayList<Role> returnRoles = new ArrayList<Role>();
// sorry for uqly loop
for(Role role : roles) {
if(role.getSelectChildrensCount() > 0) { // just in case
for(Role subRole : role.getChildren()) {
if(!returnRoles.contains(subRole)) {
returnRoles.add(subRole);
}
}
}
}
return returnRoles;
}
} }
...@@ -33,6 +33,8 @@ public interface RoleBeanLocal { ...@@ -33,6 +33,8 @@ public interface RoleBeanLocal {
public Role setPermissions(Role role, List<IAppPermission> newPerms); public Role setPermissions(Role role, List<IAppPermission> newPerms);
public void saveRoles(EventUser usr, List<Role> usersRoles); public void saveRoles(EventUser usr, List<Role> usersRoles);
public void saveUserSelectableRoles(EventUser user, List<Role> roles);
public List<Role> getRoles(EventUser selectedUser); public List<Role> getRoles(EventUser selectedUser);
......
...@@ -75,7 +75,7 @@ public class Role extends GenericEntity { ...@@ -75,7 +75,7 @@ public class Role extends GenericEntity {
private LanEvent event; private LanEvent event;
@Column(name = "select_childrens_count", nullable = true) @Column(name = "select_childrens_count", nullable = true)
private int selectChildrensCount; private Integer selectChildrensCount;
@ManyToMany @ManyToMany
@JoinTable(name = "roles_provided_by_org_roles", @JoinTable(name = "roles_provided_by_org_roles",
...@@ -212,11 +212,14 @@ public class Role extends GenericEntity { ...@@ -212,11 +212,14 @@ public class Role extends GenericEntity {
} }
public int getSelectChildrensCount() { public Integer getSelectChildrensCount() {
if(selectChildrensCount == null)
return 0;
return selectChildrensCount; return selectChildrensCount;
} }
public void setSelectChildrensCount(int selectChildrensCount) { public void setSelectChildrensCount(Integer selectChildrensCount) {
this.selectChildrensCount = selectChildrensCount; this.selectChildrensCount = selectChildrensCount;
} }
......
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:role="http://java.sun.com/jsf/composite/tools/role"> xmlns:role="http://java.sun.com/jsf/composite/tools/role">
...@@ -22,15 +21,15 @@ ...@@ -22,15 +21,15 @@
</h:form> </h:form>
</p> </p>
<h:form id="addmember"> <h:form id="addmember">
<h:outputText value="#{i18n['roleView.adduser']}" /> <h:outputText value="#{i18n['roleView.adduser']}" />
<p:autoComplete id="useradder" value="#{roleView.addableUser}" completeMethod="#{roleView.searchUser}" converter="#{userConverter}" var="usr" itemValue="#{usr}" <p:autoComplete id="useradder" value="#{roleView.addableUser}" completeMethod="#{roleView.searchUser}" converter="#{userConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.shortUserDescriptor}">
itemLabel="#{usr.shortUserDescriptor}"> <p:ajax onerror="location.reload(true);" update=":editor:addmember,:editor:memberlist" event="itemSelect" listener="#{roleView.addUser}" />
<p:ajax onerror="location.reload(true);" update=":editor:addmember,:editor:memberlist" event="itemSelect" listener="#{roleView.addUser}" /> </p:autoComplete>
</p:autoComplete>
</h:form> </h:form>
<p:fieldset legend="#{i18n['roleView.members']}" collapsed="true">
<h:dataTable id="memberlist" value="#{roleView.role.users}" var="usr"> <h:dataTable id="memberlist" value="#{roleView.role.users}" var="usr">
<h:column> <h:column>
<h:outputText value="#{usr.login}" /> <h:outputText value="#{usr.login}" />
...@@ -46,13 +45,14 @@ ...@@ -46,13 +45,14 @@
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</p:fieldset>
<button id="roledisplayer" onclick='$("#roleeditor").show(); $(this).hide();'>#{i18n['role.showPermissioneditor']}</button> <button id="roledisplayer" onclick='$("#roleeditor").show(); $(this).hide();'>#{i18n['roleView.showPermissioneditor']}</button>
<div id="roleeditor" style="display: none"> <div id="roleeditor" style="display: none">
<button onclick='$("#roleeditor").hide(); $("#roledisplayer").show();'>#{i18n['role.hidePermissioneditor']}</button> <button onclick='$("#roleeditor").hide(); $("#roledisplayer").show();'>#{i18n['roleView.hidePermissioneditor']}</button>
<h2>#{i18n['role.permissionheader']}</h2> <h2>#{i18n['role.permissionheader']}</h2>
<p> <p>
<h:form id="permissionform"> <h:form id="permissionform">
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputText value="#{i18n['role.name']}" /> <h:outputText value="#{i18n['role.name']}" />
<h:inputText value="#{roleView.role.name}" /> <h:inputText value="#{roleView.role.name}" />
<h:outputText value="* #{i18n['role.selectChildrensCount']}" />
<h:inputText value="#{roleView.role.selectChildrensCount}" />
<h:outputText value="#{i18n['role.parents']}" /> <h:outputText value="#{i18n['role.parents']}" />
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="roleparents" <h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="roleparents"
...@@ -23,6 +25,8 @@ ...@@ -23,6 +25,8 @@
</h:selectOneMenu> </h:selectOneMenu>
</h:panelGrid> </h:panelGrid>
<h:outputText value="#{i18n['role.selectChildrensCount.note']}" /><br /><br />
</ui:composition> </ui:composition>
</html> </html>
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:p="http://primefaces.org/ui">
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:p="http://primefaces.org/ui">
<composite:interface> <composite:interface>
...@@ -24,7 +23,7 @@ ...@@ -24,7 +23,7 @@
<ui:fragment rendered="#{not empty userView.selectedUser.id}"> <ui:fragment rendered="#{not empty userView.selectedUser.id}">
<p:dialog id="chartPanel" for="webcamButton" modal="true" dynamic="true" widgetVar="webcamDialog"> <p:dialog id="chartPanel" for="webcamButton" modal="true" dynamic="true" widgetVar="webcamDialog">
<p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update="@all" /> <p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update="@all" />
<p:commandButton type="button" value="Capture" onclick="PF('pc').capture()" onerror="location.reload(true);"/> <p:commandButton type="button" value="Capture" onclick="PF('pc').capture()" onerror="location.reload(true);" />
</p:dialog> </p:dialog>
...@@ -84,98 +83,81 @@ ...@@ -84,98 +83,81 @@
<table> <table>
<ui:fragment rendered="#{!cc.attrs.creating}"> <ui:fragment rendered="#{!cc.attrs.creating}">
<tr> <tr>
<td colspan="2"><b><h:outputLabel for="login" value="#{i18n['user.login']}" /></b><br /> <td colspan="2"><b><h:outputLabel for="login" value="#{i18n['user.login']}" /></b><br /> <h:outputText value="#{userView.selectedUser.login}" id="login" /></td>
<h:outputText value="#{userView.selectedUser.login}" id="login" />
</td>
</tr> </tr>
</ui:fragment> </ui:fragment>
<tr> <tr>
<td colspan="2"><b><h:outputLabel value="#{i18n['user.nick']}" for="nick" /> </b><br /> <td colspan="2"><b><h:outputLabel value="#{i18n['user.nick']}" for="nick" /> </b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inplace emptyLabel="#{i18n['user.insert']}"> <p:inputText size="45" id="nick" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.nick}" />
<p:inputText size="45" id="nick" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.nick}" /> </p:inplace></td>
</p:inplace>
</td>
</tr> </tr>
<tr> <tr>
<td><b><h:outputLabel value="#{i18n['user.firstNames']}" for="firstnames" /></b><br /> <td><b><h:outputLabel value="#{i18n['user.firstNames']}" for="firstnames" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="22" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.firstnames}" /> <p:inputText size="22" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.firstnames}" />
</p:inplace> </p:inplace></td>
</td> <td><b><h:outputLabel value="#{i18n['user.lastName']}" for="lastname" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<td><b><h:outputLabel value="#{i18n['user.lastName']}" for="lastname" /></b><br />
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="30" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.lastname}" /> <p:inputText size="30" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.lastname}" />
</p:inplace> </p:inplace></td>
</td>
</tr> </tr>
<tr> <tr>
<td colspan="2"><b><h:outputLabel value="#{i18n['user.sex']}" for="sex" /></b> <br /> <td colspan="2"><b><h:outputLabel value="#{i18n['user.sex']}" for="sex" /></b> <br /> <p:selectOneMenu disabled="#{!cc.attrs.creating and !userView.canSave}" id="sex" value="#{userView.selectedUser.gender}">
<p:selectOneMenu disabled="#{!cc.attrs.creating and !userView.canSave}" id="sex" value="#{userView.selectedUser.gender}">
<f:selectItem id="undefined" itemLabel="#{i18n['user.sex.UNDEFINED']}" itemValue="UNDEFINED" /> <f:selectItem id="undefined" itemLabel="#{i18n['user.sex.UNDEFINED']}" itemValue="UNDEFINED" />
<f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" /> <f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" />
<f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" /> <f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" />
</p:selectOneMenu> </p:selectOneMenu></td>
</td>
</tr> </tr>
<tr> <tr>
<td><b><h:outputLabel for="birthday" value="#{i18n['user.birthday']}" /></b><br /> <td><b><h:outputLabel for="birthday" value="#{i18n['user.birthday']}" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" value="#{userView.selectedUser.birthday}"> <p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" value="#{userView.selectedUser.birthday}">
<f:convertDateTime pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" /> <f:convertDateTime pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
</p:calendar> </p:calendar>
</p:inplace> <h:message for="birthday" /> </p:inplace> <h:message for="birthday" /></td>
</td> <td><b><h:outputLabel for="age" value="#{i18n['user.age']}" /></b><br /> <h:outputText value="#{userView.selectedUser.user.age}">
<td><b><h:outputLabel for="age" value="#{i18n['user.age']}" /></b><br /> <f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
<h:outputText value="#{userView.selectedUser.user.age}"> </h:outputText></td>
<f:convertNumber minFractionDigits="2" maxFractionDigits="2"/>
</h:outputText>
</td>
</tr> </tr>
</table> </table>
<table> <table>
<tr> <tr>
<td colspan="2"><b><p:outputLabel value="#{i18n['user.address']}" for="address" /></b><br /> <td colspan="2"><b><p:outputLabel value="#{i18n['user.address']}" for="address" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.address}" /> <p:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.address}" />
</p:inplace> </p:inplace></td>
</td>
</tr> </tr>
<tr> <tr>
<td><b><p:outputLabel value="#{i18n['user.zipCode']}" for="zip" /></b><br /> <td><b><p:outputLabel value="#{i18n['user.zipCode']}" for="zip" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText styleClass="ui-input" size="7" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.zip}" /> <p:inputText styleClass="ui-input" size="7" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.zip}" />
</p:inplace> <p:message for="zip" /> </p:inplace> <p:message for="zip" /></td>
</td> <td><b><p:outputLabel value="#{i18n['user.town']}" for="town" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<td><b><p:outputLabel value="#{i18n['user.town']}" for="town" /></b><br />
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText styleClass="ui-input" size="25" id="town" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.town}" /> <p:inputText styleClass="ui-input" size="25" id="town" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.town}" />
</p:inplace> <p:message for="town" /> </p:inplace> <p:message for="town" /></td>
</td>
</tr> </tr>
<tr> <tr>
<td colspan="2"><b><h:outputLabel value="#{i18n['user.email']}" for="email" /></b> <br /> <td colspan="2"><b><h:outputLabel value="#{i18n['user.email']}" for="email" /></b> <br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.email}" /> <p:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.email}" />
</p:inplace> </p:inplace></td>
</td>
</tr> </tr>
<tr> <tr>
<td><b><p:outputLabel value="#{i18n['user.phone']}" for="phone" /></b><br /> <td><b><p:outputLabel value="#{i18n['user.phone']}" for="phone" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inplace emptyLabel="#{i18n['user.insert']}">
<p:inputText styleClass="ui-input" size="7" id="phone" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.phone}" /> <p:inputText styleClass="ui-input" size="7" id="phone" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.phone}" />
</p:inplace> <p:message for="phone" /> </p:inplace> <p:message for="phone" /></td>
</td>
</tr> </tr>
</table> </table>
<p:commandButton rendered="#{cc.attrs.creating or userView.canSave}" id="commitbtn" action="#{cc.attrs.commitaction}" ajax="false" value="#{cc.attrs.commitvalue}" onerror="location.reload(true);"/> <p:commandButton rendered="#{cc.attrs.creating or userView.canSave}" id="commitbtn" action="#{cc.attrs.commitaction}" ajax="false" value="#{cc.attrs.commitvalue}" onerror="location.reload(true);" />
</h:panelGroup> </h:panelGroup>
</h:form> </h:form>
<h:form>
<h:panelGroup>
tähän tulee lista rooleista
</h:panelGroup>
</h:form>
</h:panelGrid> </h:panelGrid>
</composite:implementation> </composite:implementation>
......
...@@ -116,17 +116,14 @@ cardTemplate.emptyCardTemplate = ---- ...@@ -116,17 +116,14 @@ cardTemplate.emptyCardTemplate = ----
code.inputfield = Sy\u00F6t\u00E4 viivakoodi code.inputfield = Sy\u00F6t\u00E4 viivakoodi
create = Luo
delete = Poista delete = Poista
create = Luo
edit = Muokkaa edit = Muokkaa
error = Virhe error = Virhe
error.contact = If this happens again, contact Info with the following code: error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error. error.error = You have encountered an error.
...@@ -253,7 +250,6 @@ navi.auth.login = frontpage ...@@ -253,7 +250,6 @@ navi.auth.login = frontpage
navi.auth.loginerror = frontpage navi.auth.loginerror = frontpage
navi.auth.logout = frontpage navi.auth.logout = frontpage
off = Poissa off = Poissa
on = P\u00E4\u00E4ll\u00E4 on = P\u00E4\u00E4ll\u00E4
...@@ -302,40 +298,35 @@ resetMail.username = Username ...@@ -302,40 +298,35 @@ resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password. resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent resetmailSent.header = Email sent
save = Tallenna role.selectChildrensCount = K\u00E4ytt\u00E4j\u00E4 voi valita lapsia
role.selectChildrensCount.note = * Kuinka monta roolia k\u00E4ytt\u00E4j\u00E4 voi itse valita t\u00E4m\u00E4n roolin lapsirooleista, 0 disabloi ominaisuuden.
submenu.NotImplementedYet = Not implemented roleView.adduser = Lis\u00E4\u00E4 k\u00E4ytt\u00E4j\u00E4
submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys roleView.hidePermissioneditor = Piilota oikeusasetukset
submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys roleView.members = K\u00E4ytt\u00E4j\u00E4t
submenu.frontpage = Frontpage roleView.showPermissioneditor = N\u00E4yt\u00E4 oikeusasetukset
submenu.info.incoming = Sis\u00E4\u00E4ntulo save = Tallenna
submenu.info.index = Infon\u00E4kym\u00E4
submenu.info.shop = Kauppa
submenu.info.index = Infon\u00E4kym\u00E4 submenu.NotImplementedYet = Not implemented
= Infon\u00E4kym\u00E4 submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.frontpage = Frontpage
submenu.info.incoming = Sis\u00E4\u00E4ntulo
submenu.info.index = Infon\u00E4kym\u00E4
submenu.info.shop = Kauppa
submenu.lectureadmin.manageLectureGroups = Hallinnoi submenu.lectureadmin.manageLectureGroups = Hallinnoi
submenu.lectures.viewLectures = Ilmoittaudu submenu.lectures.viewLectures = Ilmoittaudu
subnavi.cards = \u0009\u0009 subnavi.cards = \u0009\u0009
subnavi.info = Info subnavi.info = Info
success = Onnistui success = Onnistui
topnavi.adminlectures = Kurssit ja luennot topnavi.adminlectures = Kurssit ja luennot
topnavi.license = Lisenssikoodit topnavi.license = Lisenssikoodit
topnavi.userlectures = Kurssit ja luennot topnavi.userlectures = Kurssit ja luennot
user.cropImage = Crop user.cropImage = Crop
user.imageUpload.imageNotFound = Select image to upload user.imageUpload.imageNotFound = Select image to upload
user.unauthenticated = Kirjautumaton user.unauthenticated = Kirjautumaton
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!