Commit 09a28506 by Tuomas Riihimäki

Lisättyä Event ja EventOrganisation näkymät, ja lisää näkymäjuttuja

1 parent 1a8695ef
Showing with 720 additions and 124 deletions
......@@ -97,7 +97,7 @@ public class BillBean implements BillBeanLocal {
@Override
public Bill createEmptyBill(User shoppingUser) {
if (shoppingUser != null && !userBean.isCurrentUser(shoppingUser)) {
userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE, "User tried to shop to ", shoppingUser, " another without sufficient rights");
}
......@@ -114,8 +114,11 @@ public class BillBean implements BillBeanLocal {
@Override
public BillLine addProductToBill(Bill bill, Product product, BigDecimal count) {
// If bill number > 0 bill has been sent and extra privileges are needed to modify.
if (!userBean.isCurrentUser(bill.getUser()) || bill.getBillNumber() > 0) {
// If bill number > 0 bill has been sent and extra privileges are needed
// to modify.
boolean iscurrent = userBean.isCurrentUser(bill.getUser());
Integer billnr = bill.getBillNumber();
if (!iscurrent || billnr != null) {
userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE, "User tried to modify bill ", bill, "without sufficient permissions");
}
BillLine line = new BillLine(bill, product.getName(), product.getUnitName(), count, product.getPrice(), product.getVat());
......
......@@ -83,6 +83,11 @@ public class EventBean implements EventBeanLocal {
return ret;
}
@Override
public LanEvent mergeChanges(LanEvent event) {
return eventFacade.merge(event);
}
}
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.model.EventOrganiser;
/**
* Session Bean implementation class EventOrganiserBean
*/
@Stateless
public class EventOrganiserBean implements EventOrganiserBeanLocal {
@EJB
private EventOrganiserFacade eventorgfacade;
@EJB
private UserBeanLocal userbean;
@EJB
private SecurityBeanLocal securitybean;
/**
* Default constructor.
*/
public EventOrganiserBean() {
// TODO Auto-generated constructor stub
}
@Override
public void save(EventOrganiser eventorg) {
fatalPermission(eventorg);
eventorgfacade.merge(eventorg);
}
public void fatalPermission(EventOrganiser eventorg) {
if (!userbean.isCurrentUser(eventorg.getAdmin()) && !userbean.getCurrentUser().isSuperadmin()) {
throw new PermissionDeniedException(securitybean, userbean.getCurrentUser(), "Someone other than admin tried to access EventOrganiser: " + eventorg.toString());
}
}
@Override
public List<EventOrganiser> getEventOrganisers() {
if(!userbean.getCurrentUser().isSuperadmin())
{
throw new PermissionDeniedException(securitybean, userbean.getCurrentUser(), "Non-superadmin tried to list all EventOrganisers");
}
return eventorgfacade.findAll();
}
@Override
public EventOrganiser create(String name) {
EventOrganiser ret = new EventOrganiser();
ret.setAdmin(userbean.getCurrentUser());
ret.setOrganisation(name);
eventorgfacade.create(ret);
return ret;
}
}
......@@ -50,10 +50,13 @@ public class RoleBean implements RoleBeanLocal {
public List<Role> listRoles() {
userbean.fatalPermission(Permission.ROLE_MANAGEMENT, RolePermission.READ, "User tried to listRoles");
return roleFacade.findAll();
return listRoles(eventBean.getCurrentEvent());
}
@Override
public List<Role> listRoles(LanEvent event) {
return roleFacade.findAll(event);
}
public Role mergeChanges(Role role) {
userbean.fatalPermission(Permission.ROLE_MANAGEMENT, RolePermission.WRITE, "User tried merge role changes for ", role);
return roleFacade.merge(role);
......@@ -141,5 +144,11 @@ public class RoleBean implements RoleBeanLocal {
}
return rr;
}
@Override
public Role find(int id, LanEvent event) {
return roleFacade.find(event.getId(), id);
}
}
......@@ -92,7 +92,10 @@ public class UserBean implements UserBeanLocal {
@Override
public User mergeChanges(User user) {
fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
if (!isCurrentUser(user)) {
fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
}
return userFacade.merge(user);
}
......@@ -101,7 +104,7 @@ public class UserBean implements UserBeanLocal {
}
public boolean isCurrentUser(User user) {
return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getNick());
return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getLogin());
}
public boolean isLoggedIn() {
......@@ -150,15 +153,20 @@ public class UserBean implements UserBeanLocal {
if (getRights(rolelist, target, permission, checkedRoles)) {
ret = true;
}
logger.debug("Perm {} not found from cache. saving to cache: {}", target, ret);
// logger.debug("Perm {} not found from cache. saving to cache: {}",
// target, ret);
BortalLocalContextHolder.setPermission(target, permission, ret);
} else {
logger.debug("VALUE {} perm {} from cache: {}", new Object[] { target, permission, ret });
}
// else {
// logger.debug("VALUE {} perm {} from cache: {}", new Object[] {
// target, permission, ret });
// }
if (logger.isDebugEnabled()) {
long diffMs = Calendar.getInstance().getTimeInMillis() - start.getTimeInMillis();
logger.debug("User {} Target {}, permission {} checktime {}ms result: {}", new Object[] { user.getLogin(), target, permission, diffMs, ret });
// logger.debug("User {} Target {}, permission {} checktime {}ms result: {}",
// new Object[] { user.getLogin(), target, permission, diffMs, ret
// });
}
// TODO: FIX THIS!! really bad idea....
......
......@@ -5,6 +5,7 @@ import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import org.slf4j.Logger;
......@@ -21,6 +22,7 @@ import com.pdfjet.TextLine;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.utilities.BillUtils;
public class PdfPrinter {
......@@ -81,7 +83,6 @@ public class PdfPrinter {
pagetitle.setSize(11);
// Ihan ensin tulostetaan selityskentät tuotteille.
drawText(20, 640, "Tuotteet", pagetitle);
drawText(210, 640, "Määrä", pagetitle);
drawText(250, 640, "Yks.", pagetitle);
......@@ -147,13 +148,16 @@ public class PdfPrinter {
private void drawSender(int xpos, int ystart) throws Exception {
Font sendername = new Font(pdf, boldfontname);
sendername.setSize(20);
sendername.setSize(17);
Font addressfont = new Font(pdf, fontname);
addressfont.setSize(12);
// User user = bill.getUser();
int space = 12;
EventOrganiser org = bill.getEvent().getOrganiser();
LanEvent event = bill.getEvent();
logger.debug("bill is for event {}", event);
EventOrganiser org = event.getOrganiser();
logger.debug("and organiser {}", org);
drawText(xpos, ystart, org.getBillAddress1(), sendername);
drawText(xpos, ystart - space, org.getBillAddress2(), addressfont);
drawText(xpos, ystart - space * 2, org.getBillAddress3(), addressfont);
......@@ -165,7 +169,7 @@ public class PdfPrinter {
Font addressfont = new Font(pdf, fontname);
addressfont.setSize(12);
drawSender(40, 800);
drawSender(35, 800);
Font receivername = new Font(pdf, boldfontname);
receivername.setSize(13);
......
......@@ -31,14 +31,15 @@ public class RoleFacade extends EventChildGenericFacade<Role> {
return em;
}
public Role findByName(String name) {
public Role findByName(String name, LanEvent event) {
TypedQuery<Role> q = em.createNamedQuery("Role.findByRoleName", Role.class);
q.setParameter("name", name);
q.setParameter("event", event);
return this.getSingleNullableResult(q);
}
public List<Role> findForUser(User user, LanEvent event) {
TypedQuery<Role> q = getEm().createNamedQuery("Role.findForUserAndEvent", Role.class);
TypedQuery<Role> q = getEm().createNamedQuery("Role.findForUser", Role.class);
q.setParameter("user", user);
q.setParameter("event", event);
return q.getResultList();
......@@ -53,11 +54,7 @@ public class RoleFacade extends EventChildGenericFacade<Role> {
}
ret.removeAll(excludedResults);
return ret;
// TypedQuery<Role> q
// =getEm().createNamedQuery("Role.findParentsExcluding",Role.class);
// q.setParameter("children", roles);
// q.setParameter("excluded", excludedResults);
// return q.getResultList();
}
......@@ -68,4 +65,10 @@ public class RoleFacade extends EventChildGenericFacade<Role> {
return ret;
}
public List<Role> findAll(LanEvent event) {
TypedQuery<Role> q = getEm().createNamedQuery("Role.findForEvent", Role.class);
q.setParameter("event", event);
return q.getResultList();
}
}
......@@ -11,4 +11,6 @@ public interface EventBeanLocal {
LanEvent getCurrentEvent();
LanEvent mergeChanges(LanEvent event);
}
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.EventOrganiser;
@Local
public interface EventOrganiserBeanLocal {
void save(EventOrganiser eventorg);
void fatalPermission(EventOrganiser eventorg);
List<EventOrganiser> getEventOrganisers();
EventOrganiser create(String createorgname);
}
......@@ -9,6 +9,7 @@ import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
......@@ -31,5 +32,9 @@ public interface RoleBeanLocal {
public List<Role> getPossibleParents(Role role);
public List<Role> listRoles(LanEvent event);
public Role find(int val, LanEvent event);
}
......@@ -84,6 +84,7 @@ public class Bill implements EventChildInterface {
@Column(nullable = false, name = "sent_time")
@Temporal(DATE)
private Calendar sentDate = Calendar.getInstance();
@Column(name = "payment_time", nullable = false)
private Integer paymentTime = 0;
@Column(name = "notice_days", nullable = false)
......
......@@ -29,10 +29,10 @@ import javax.persistence.Version;
@Entity
@Table(name = "roles", uniqueConstraints = { @UniqueConstraint(columnNames = { "event_id", "role_name" }) })
@NamedQueries({
@NamedQuery(name = "Role.findAll", query = "SELECT r FROM Role r"),
@NamedQuery(name = "Role.findByRoleName", query = "SELECT r FROM Role r WHERE r.name = :name"),
@NamedQuery(name = "Role.findForEvent", query = "SELECT r FROM Role r where r.event = :event"),
@NamedQuery(name = "Role.findByRoleName", query = "SELECT r FROM Role r WHERE r.name = :name and r.event = :event"),
// @NamedQuery(name="Role.findParentsExcluding", query="select r from Role r, RoleRight rr where :user member of r.users ),
@NamedQuery(name = "Role.findForUserAndEvent", query = "SELECT r FROM Role r WHERE :user MEMBER OF r.users and r.event = :event") })
@NamedQuery(name = "Role.findForUser", query = "SELECT r FROM Role r WHERE :user MEMBER OF r.users and r.event = :event") })
public class Role implements EventChildInterface {
private static final long serialVersionUID = 1L;
......
......@@ -99,6 +99,14 @@
<to-view-id>/role/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/product/createBill.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/bill/list.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<factory>
<exception-handler-factory>fi.insomnia.bortal.exceptions.BortalExceptionHandlerFactory</exception-handler-factory>
</factory>
......
......@@ -5,13 +5,18 @@
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:tools="http://java.sun.com/jsf/composite/tools/auth"
xmlns:login="http://java.sun.com/jsf/composite/tools/login"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.loginerror" />
<ui:define name="content">
<tools:login />
<h1>#{i18n['loginerror.header']}</h1>
<p>
#{i18n['loginerror.message']}
</p>
<login:login />
</ui:define>
</ui:composition>
</h:body>
......
......@@ -6,8 +6,7 @@
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.auth.logout" />
<ui:define name="content">
<h:outputText value="login.logoutmessage" />
${sessionHandler.logout() }
<h:outputText value="#{i18n['login.logoutmessage']}" />
</ui:define>
</ui:composition>
</h:body>
......
......@@ -11,7 +11,6 @@
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.bill.list" />
<ui:define name="content">
Bill list!
<bills:list />
</ui:define>
</ui:composition>
......
<!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:products="http://java.sun.com/jsf/composite/tools/products"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param
name="thispage"
value="page.product.create" />
<ui:define name="content">
<tools:fatalPermission
target="EVENT"
permission="EXECUTE" />
<h:form>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['event.name']}:" />
<h:inputText value="#{eventView.name}" />
<h:outputLabel value="#{i18n['event']}:" />
<h:inputText value="#{productView.productprice}" />
<h:commandButton
action="#{productView.createProduct()}"
value="#{i18n['product.create']}" />
</h:panelGrid>
</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">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.create" />
<ui:define name="content">
<h:form id="orgform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventorg.organisation']}:" /><h:inputText value="#{eventorgView.createorgname}" />
<h:commandButton id="commitbtn" action="#{eventorgView.create()}" value="#{i18n['eventorg.create']}" />
</h:panelGrid>
</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">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.edit" />
<ui:define name="content">
<h:form id="orgform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventorg.organisation']}:" /><h:inputText value="#{eventorgView.eventorg.organisation}" />
<h:outputLabel value="#{i18n['eventorg.bundleCountry']}:" /><h:inputText value="#{eventorgView.eventorg.bundleCountry}" />
<h:outputLabel value="#{i18n['eventorg.billAddress1']}:" /><h:inputText value="#{eventorgView.eventorg.billAddress1}" />
<h:outputLabel value="#{i18n['eventorg.billAddress2']}:" /><h:inputText value="#{eventorgView.eventorg.billAddress2}" />
<h:outputLabel value="#{i18n['eventorg.billAddress3']}:" /><h:inputText value="#{eventorgView.eventorg.billAddress3}" />
<h:outputLabel value="#{i18n['eventorg.billAddress4']}:" /><h:inputText value="#{eventorgView.eventorg.billAddress4}" />
<h:outputLabel value="#{i18n['eventorg.bankNumber1']}:" /><h:inputText value="#{eventorgView.eventorg.bankNumber1}" />
<h:outputLabel value="#{i18n['eventorg.bankNumber2']}:" /><h:inputText value="#{eventorgView.eventorg.bankNumber2}" />
<h:outputLabel value="#{i18n['eventorg.bankName1']}:" /><h:inputText value="#{eventorgView.eventorg.bankName1}" />
<h:outputLabel value="#{i18n['eventorg.bankName2']}:" /><h:inputText value="#{eventorgView.eventorg.bankName2}" />
<h:commandButton id="commitbtn" action="#{eventorgView.save()}" value="#{i18n['eventorg.save']}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['eventorg.events']}</h2>
<h:form id="orgsEventlist">
<h:dataTable border="1" id="org" value="#{eventorgView.orgsEvents}" var="event">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['event.name']}" />
</f:facet>
<h:outputText value="#{event.name}" />
</h:column>
<h:column >
<h:commandButton action="#{eventorgView.editEvent()}" value="#{i18n['eventorg.editEvent']}" />
</h:column>
</h: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:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.editEvent" />
<ui:define name="content">
<h:messages />
<h:form id="orgform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['event.name']}:" /><h:inputText value="#{eventorgView.event.name}" />
<h:outputLabel value="#{i18n['event.referer']}:" /><h:inputText value="#{eventorgView.event.referer}" />
<h:outputLabel value="#{i18n['event.referenceNumberBase']}:" /><h:inputText value="#{eventorgView.event.referenceNumberBase}" />
<h:outputLabel value="#{i18n['event.nextBillNumber']}:" /><h:inputText value="#{eventorgView.event.nextBillNumber}" />
<h:outputLabel value="#{i18n['event.startTime']}:" />
<h:inputText value="#{eventorgView.event.startTime}" >
<f:convertDateTime />
</h:inputText>
<h:outputLabel value="#{i18n['event.endTime']}:" />
<h:inputText value="#{eventorgView.event.endTime}" >
<f:convertDateTime />
</h:inputText>
<h:outputLabel value="#{i18n['event.defaultRole']}:" />
<h:selectOneMenu converter="#{eventorgView.roleconverter}" value="#{eventorgView.event.defaultRole}" >
<f:selectItems var="role" itemLabel="#{role.name}" value="#{eventorgView.eventsRolelist}" />
</h:selectOneMenu>
<h:commandButton id="commitbtn" action="#{eventorgView.saveEvent()}" value="#{i18n['event.save']}" />
</h:panelGrid>
</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">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.list" />
<ui:define name="content">
<h:form>
<h:dataTable border="1" id="eventorgs" value="#{eventorgView.organisations}" var="eventorg">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['eventorganiser.name']}" />
</f:facet>
<h:outputText value="#{eventorg.organisation}" />
</h:column>
<h:column >
<h:commandButton action="#{eventorgView.edit()}" value="#{i18n['eventorg.edit']}" />
</h:column>
</h: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">
<h:body>
<ui:composition template="/layout/insomnia1/sidebartemplate.xhtml">
<ui:define name="sidebarcontent">
<ul>
<li><h:link outcome="/user/create.xhtml" value="#{i18n['sidebar.user.create']}"/></li>
</ul>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -17,12 +17,21 @@
<div id="navigation">
<img id="head" src="#{request.contextPath}/resources/style/insomnia1/img/header.gif" alt="headerimage" />
<div style="float: left" >
<div id="headerbox"><tools:loginLogout /></div>
<div id="headerbox"><tools:isLoggedIn>#{sessionHandler.loginname}</tools:isLoggedIn><tools:loginLogout /></div>
<div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'frontpage'?'a':''}"> <h:link outcome="/index" value="#{i18n['topmenu.frontpage']}" /></div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'user'?'a':''}"> <h:link outcome="/user/editself" value="#{i18n['topmenu.usersPreferences']}" /></div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'shop'?'a': ''}"> <h:link outcome="/product/createBill" value="#{i18n['topmenu.shoppings']}" /></div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'a':''}"> <h:link outcome="/product/list" value="#{i18n['topmenu.adminfront']}" /></div>
<tools:isLoggedIn>
<f:facet name="errormessage">
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'login'?'a': ''}"> <h:link outcome="/auth/login" value="#{i18n['login.login']}" /></div>
</f:facet>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'user'?'a':''}"> <h:link outcome="/user/editself" value="#{i18n['topmenu.usersPreferences']}" /></div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'shop'?'a': ''}"> <h:link outcome="/product/createBill" value="#{i18n['topmenu.shoppings']}" /></div>
</tools:isLoggedIn>
<tools:canRead target="USER_MANAGEMENT">
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'a':''}"> <h:link outcome="/product/list" value="#{i18n['topmenu.adminfront']}" /></div>
</tools:canRead>
</div>
</div>
</div>
......@@ -30,7 +39,6 @@
<div id="cwrap">
<ui:include src="/layout/insomnia1/sidebar-#{i18n[util.concat(thispage,'.pagegroup')]}.xhtml" />
<h:messages globalOnly="true" />
<h:messages />
<ui:insert name="content" />
</div>
</div>
......
......@@ -15,9 +15,7 @@
<ui:param name="thispage" value="page.product.createBill" />
<ui:define name="content">
<products:shop items="#{productShopView.billCart}" commitValue="#{i18n['productshop.commit']}" >
<f:actionListener for="commitbutton" binding="#{productShopView.commitBillCart()}" />
</products:shop>
<products:shop commitaction="#{productShopView.commitBillCart()}" items="#{productShopView.billCart}" commitValue="#{i18n['productshop.commit']}" />
</ui:define>
</ui:composition>
</h:body>
......
......@@ -18,9 +18,7 @@
<ui:define name="content">
<tools:fatalPermission target="PRODUCT" permission="WRITE" />
<products:edit commitvalue="#{i18n['products.save']}">
<f:actionListener for="commitbutton" binding="#{productView.saveProduct()}" />
</products:edit>
<products:edit commitaction="#{productView.saveProduct()}" commitvalue="#{i18n['products.save']}" />
</ui:define>
</ui:composition>
</h:body>
......
......@@ -20,6 +20,14 @@
<h:dataTable border="1" id="billList" value="#{billView.usersBills}" var="bill">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['bill.sentDate']}" />
</f:facet>
<h:outputText value="#{bill.sentDate.time}" >
<f:convertDateTime dateStyle="short" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['bill.billNumber']}" />
</f:facet>
<h:outputText value="#{bill.billNumber}" />
......@@ -28,7 +36,9 @@
<f:facet name="header">
<h:outputText value="${i18n['bill.totalPrice']}" />
</f:facet>
<h:outputText value="#{bill.totalPrice()}" />
<h:outputText value="#{bill.totalPrice()}" >
<f:convertNumber currencyCode="EUR" maxFractionDigits="2" minFractionDigits="2" type="currency" />
</h:outputText>
</h:column>
<h:column>
<a href="#{request.contextPath}/PrintBill?billid=#{bill.id.id}" target="_blank" >#{i18n['bill.printBill']}</a>
......
......@@ -21,9 +21,7 @@
<composite:insertChildren />
</c:when>
<c:otherwise>
<c:if test="#{not empty compositeComponent.facets.errormessage}">
<composite:insertFacet name="errormessage" />
</c:if>
<composite:renderFacet required="false" name="errormessage" />
</c:otherwise>
</c:choose>
......
......@@ -21,9 +21,7 @@
<composite:insertChildren />
</c:when>
<c:otherwise>
<c:if test="#{not empty compositeComponent.facets.errormessage}">
<composite:insertFacet name="errormessage" />
</c:if>
<composite:renderFacet required="false" name="errormessage" />
</c:otherwise>
</c:choose>
......
......@@ -21,9 +21,7 @@
<composite:insertChildren />
</c:when>
<c:otherwise>
<c:if test="#{not empty compositeComponent.facets.errormessage}">
<composite:insertFacet name="errormessage" />
</c:if>
<composite:renderFacet required="false" name="errormessage" />
</c:otherwise>
</c:choose>
......
......@@ -10,21 +10,17 @@
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="target" required="true" />
<composite:attribute name="permission" required="true" />
<composite:facet name="errormessage" />
</composite:interface>
<composite:implementation>
<c:choose>
<c:when test='#{sessionHandler.hasPermission(target, permission) }'>
<c:when test='#{sessionHandler.isLoggedIn() }'>
<composite:insertChildren />
</c:when>
<c:otherwise>
<c:if test="#{not empty compositeComponent.facets.errormessage}">
<composite:insertFacet name="errormessage" />
</c:if>
<composite:renderFacet required="false" name="errormessage" />
</c:otherwise>
</c:choose>
......
......@@ -20,9 +20,7 @@
<composite:insertChildren />
</c:when>
<c:otherwise>
<c:if test="#{not empty compositeComponent.facets.errormessage}">
<composite:insertFacet name="errormessage" />
</c:if>
<composite:renderFacet required="false" name="errormessage" />
</c:otherwise>
</c:choose>
......
......@@ -14,7 +14,7 @@
</composite:interface>
<composite:implementation>
<form action="j_security_check" method="post">
<form action="j_security_check" id="login" method="post">
<c:choose>
<c:when test="#{not empty cc.attrs.isOneliner}">
......@@ -23,7 +23,6 @@
<input type="submit" value="#{i18n['login.submit']}" />
</c:when>
<c:otherwise>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['login.username']}" />
......
......@@ -14,7 +14,7 @@
<composite:implementation>
<h:form>
<h:commandLink action="#{sessionHandler.logout}" value="#{i18n['login.logout']}" />
<h:commandLink immediate="true" action="#{sessionHandler.logout}" value="#{i18n['login.logout']}" />
</h:form>
</composite:implementation>
......
......@@ -13,7 +13,7 @@
<composite:interface>
<composite:attribute name="commitvalue" required="true" />
<composite:actionSource name="commitbutton" targets="productform:commitbtn" />
<composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
</composite:interface>
<composite:implementation>
......@@ -27,7 +27,7 @@
<h:outputLabel value="#{i18n['product.sort']}:" /><h:inputText value="#{productView.product.sort}" />
<h:outputLabel value="#{i18n['product.barcode']}:" /><h:inputText value="#{productView.product.barcode}" />
<h:outputLabel value="#{i18n['product.prepaid']}" /><h:selectBooleanCheckbox value="#{productView.product.prepaid}" />
<h:commandButton id="commitbtn" value="#{cc.attrs.commitvalue}" />
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:panelGrid>
</h:form>
......
......@@ -15,7 +15,7 @@
<composite:attribute name="items" required="true" />
<composite:attribute name="commitValue" required="true" />
<composite:attribute name="outcome" required="false" />
<composite:actionSource name="commitbutton" targets="shopform:commitbutton" />
<composite:attribute name="commitaction" method-signature="java.lang.String action()" required="true" />
</composite:interface>
<composite:implementation>
......@@ -49,7 +49,7 @@
</h:column>
</h:dataTable>
<h:commandButton outcome="#{cc.attrs.outcome}" id="commitbutton" value="#{cc.attrs.commitValue}" />
<h:commandButton action="#{cc.attrs.commitaction}" id="commitbutton" value="#{cc.attrs.commitValue}" />
</h:form>
......
......@@ -17,7 +17,7 @@
<h:inputText value="#{roleView.role.name}" />
<h:outputText value="#{i18n['role.parents']}" />
<h:selectManyCheckbox id ="roleparents" value="#{roleView.roleParents}">
<h:selectManyCheckbox layout="pageDirection" id ="roleparents" value="#{roleView.roleParents}">
<f:selectItems var="par" itemValue="#{par.id.id}" itemLabel="#{par.name}" value="#{roleView.possibleParents}" />
</h:selectManyCheckbox>
</h:panelGrid>
......
......@@ -14,7 +14,7 @@
<composite:interface>
<composite:attribute name="user" required="true" />
<composite:attribute name="commitvalue" required="true" />
<composite:actionSource name="commitbutton" targets="userform:commitbtn" />
<composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
</composite:interface>
<composite:implementation>
......@@ -37,7 +37,7 @@
<f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" />
<f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" />
</h:selectOneRadio>
<h:commandButton id="commitbtn" value="#{cc.attrs.commitvalue}" />
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:panelGrid>
</h:form>
......
......@@ -10,7 +10,7 @@
xmlns:c="http://java.sun.com/jsp/jstl/core">
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<tools:fatalPermission target="LOGIN" permission="WRITE" />
<ui:param name="thispage" value="page.role.create" />
<ui:define name="content">
<tools:fatalPermission target="ROLE_MANAGEMENT" permission="WRITE" />
......
......@@ -11,9 +11,7 @@
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<users:edit user="#{userView.user}" commitvalue="#{i18n['user.save']}">
<f:actionListener for="commitbutton" binding="#{userView.saveUser()}" />
</users:edit>
<users:edit commitaction="#{userView.saveUser()}" user="#{userView.user}" commitvalue="#{i18n['user.save']}"/>
<users:editroles />
</ui:define>
......
......@@ -12,11 +12,9 @@
<ui:param name="thispage" value="page.user.editself" />
<ui:define name="content">
<users:edit user="#{userView.self}" commitvalue="#{i18n['user.save']}">
<f:actionListener for="commitbutton" binding="#{userView.saveUser()}" />
</users:edit>
<users:edit commitaction="#{userView.saveUser()}" user="#{userView.self}" commitvalue="#{i18n['user.save']}" />
<users:editroles />
<users:editroles rendered="#{sessionhandler.hasPermission('ROLE_MANAGEMENT', 'READ')}"/>
</ui:define>
</ui:composition>
</h:body>
......
......@@ -46,7 +46,8 @@ public class SessionHandler {
public String getLocale() {
// TODO: Locale selection code missing
return "en_ST_v7";
// return "en_ST_v7";
return "fi_IN_XII";
}
public String getLayout() {
......@@ -157,6 +158,13 @@ public class SessionHandler {
return userbean.getCurrentUser().isSuperadmin();
}
public String getLoginname()
{
return userbean.getCurrentUser().getLogin();
}
public User getCurrentUser()
{
return userbean.getCurrentUser();
}
}
package fi.insomnia.bortal.view;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UISelectItems;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.EventOrganiserBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.converter.RoleConverter;
@ManagedBean(name = "eventorgView")
@SessionScoped
public class EventOrganiserView {
private static final Logger logger = LoggerFactory.getLogger(EventOrganiserView.class);
@EJB
private UserBeanLocal userbean;
@EJB
private EventOrganiserBeanLocal eventorgbean;
@EJB
private RoleBeanLocal rolebean;
@EJB
private EventBeanLocal eventbean;
private ListDataModel<EventOrganiser> organisers;
private ListDataModel<LanEvent> orgsEvents;
private EventOrganiser eventorg;
private String createorgname;
private LanEvent event;
public DataModel<EventOrganiser> getOrganisations() {
userbean.fatalNotLoggedIn();
User usr = userbean.getCurrentUser();
List<EventOrganiser> list = null;
if (usr.isSuperadmin()) {
list = eventorgbean.getEventOrganisers();
} else {
list = usr.getEventOrganiser();
}
organisers = new ListDataModel<EventOrganiser>(list);
return organisers;
}
public DataModel<LanEvent> getOrgsEvents() {
orgsEvents = new ListDataModel<LanEvent>(eventorg.getEvents());
return orgsEvents;
}
public String editEvent() {
setEvent(orgsEvents.getRowData());
return "editEvent";
}
public String edit() {
eventorg = null;
EventOrganiser row = organisers.getRowData();
eventorgbean.fatalPermission(row);
eventorg = row;
return "edit";
}
public String save() {
eventorgbean.fatalPermission(eventorg);
eventorgbean.save(eventorg);
return "edit";
}
public String saveEvent()
{
logger.debug("Saving event. role {}", event.getDefaultRole());
event= eventbean.mergeChanges(event);
return "editEvent";
}
public String create() {
eventorg = eventorgbean.create(createorgname);
return "edit";
}
public void setEventorg(EventOrganiser eventorg) {
this.eventorg = eventorg;
}
public EventOrganiser getEventorg() {
return eventorg;
}
public void setCreateorgname(String createorgname) {
this.createorgname = createorgname;
}
public String getCreateorgname() {
return createorgname;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public LanEvent getEvent() {
return event;
}
public List<Role> getEventsRolelist() {
if (event.getId() == null || event.getId() == 0) {
return new ArrayList<Role>();
}
return rolebean.listRoles(event);
}
public void eventDefaultRoleChangelistener(ValueChangeEvent ev) {
logger.debug("Default role changed. Type {}, vaule {}", ev.getNewValue().getClass(), ev.getNewValue());
int val = Integer.parseInt(ev.getNewValue().toString());
Role nrole = null;
if (val > 0) {
nrole = rolebean.find(val, event);
}
event.setDefaultRole(nrole);
}
public RoleConverter getRoleconverter()
{
return new RoleConverter(rolebean, event);
}
}
......@@ -10,9 +10,6 @@ import java.util.Iterator;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
......@@ -25,7 +22,6 @@ import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.User;
......@@ -55,9 +51,9 @@ public class ProductShopView {
return items;
}
public void commitBillCart() {
public String commitBillCart() {
userBean.fatalPermission(Permission.PRODUCT, RolePermission.EXECUTE);
logger.debug("Committing billCart");
Iterator<ProductShopItem> cartIter = billCart.iterator();
Bill bill = null;
......@@ -70,7 +66,7 @@ public class ProductShopView {
billBean.addProductToBill(bill, shopitem.getProduct(), shopitem.getCount());
}
}
return "success";
}
public DataModel<ProductShopItem> getBillCart() {
......
......@@ -8,12 +8,8 @@ import java.util.Set;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
......@@ -22,13 +18,9 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.I18n;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.JaasBeanLocal;
import fi.insomnia.bortal.beans.SecurityLogType;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
......@@ -36,8 +28,6 @@ import fi.insomnia.bortal.model.User;
@SessionScoped
public class UserView {
@ManagedProperty("#{sessionHandler}")
private SessionHandler sessionhandler;
@EJB
private UserBeanLocal userBean;
......@@ -63,15 +53,7 @@ public class UserView {
private Set<String> userRoleIds;
public List<Role> getUserRoles() {
userRoleIds = new HashSet<String>();
List<Role> roles = user.getRoles();
if (roles == null) {
roles = new ArrayList<Role>();
} else {
for (Role role : roles) {
userRoleIds.add(role.getId().getId().toString());
}
}
return roleBean.listRoles();
}
......@@ -98,7 +80,7 @@ public class UserView {
public User getSelf() {
userBean.fatalNotLoggedIn();
user = userBean.getCurrentUser();
setUser(userBean.getCurrentUser());
return user;
}
......@@ -125,14 +107,15 @@ public class UserView {
return "edit";
}
public void saveUser() {
public String saveUser() {
User thisusr = getUser();
if (!userBean.isCurrentUser(thisusr)) {
logger.debug("user {} is modifying user {}",userBean.getCurrentUser(), thisusr);
userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
}
setUser(userBean.mergeChanges(getUser()));
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("user.successfullySaved")));
return "";
}
public ListDataModel<User> getUsers() {
......@@ -167,20 +150,23 @@ public class UserView {
public void setUser(User user) {
this.user = user;
if (userBean.hasPermission(Permission.ROLE_MANAGEMENT, RolePermission.READ)) {
userRoleIds = new HashSet<String>();
List<Role> roles = user.getRoles();
if (roles == null) {
roles = new ArrayList<Role>();
} else {
for (Role role : roles) {
userRoleIds.add(role.getId().getId().toString());
}
}
}
}
public User getUser() {
return user;
}
public void setSessionhandler(SessionHandler sessionhandler) {
this.sessionhandler = sessionhandler;
}
public SessionHandler getSessionhandler() {
return sessionhandler;
}
public void setUserRoleIds(Set<String> userRoleIds) {
logger.debug("Set new user role id:s {}", userRoleIds);
this.userRoleIds = userRoleIds;
......
package fi.insomnia.bortal.web.converter;
import java.util.Calendar;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
public class CalendarConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
Calendar val = (Calendar) value;
return "";
}
}
package fi.insomnia.bortal.web.converter;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.NoneScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import org.granite.logging.Logger;
@ManagedBean(name = "emptytonullconverter")
@NoneScoped
public class EmptyToNullConverter implements Converter {
private static final Logger logger = Logger.getLogger(EmptyToNullConverter.class);
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
String ret = value;
if (value.trim().isEmpty()) {
ret = null;
}
return ret;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
logger.debug("Emptytonull converter as String");
String ret = "";
if (value != null) {
ret = value.toString();
}
return ret;
}
}
package fi.insomnia.bortal.web.converter;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.NoneScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Role;
public class RoleConverter implements Converter {
private RoleBeanLocal rolebean;
private LanEvent event;
private static final Logger logger = LoggerFactory.getLogger(RoleConverter.class);
public RoleConverter(RoleBeanLocal rbean, LanEvent event) {
this.rolebean = rbean;
this.event = event;
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
logger.debug("converting string {} to Object", value);
Role ret = rolebean.find(Integer.parseInt(value), event);
logger.debug("found {} from conversion", ret);
return ret;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = "";
if (value instanceof Role) {
ret = ((Role) value).getId().getId().toString();
}
logger.debug("converting role {} to string", ret);
return ret;
}
}
......@@ -14,15 +14,20 @@ page.auth.login.title=Login error
page.index.pagegroup=frontpage
page.auth.login.pagegroup=frontpage
page.auth.login.pagegroup=login
page.auth.loginerror.pagegroup=frontpage
page.auth.logout.pagegroup=frontpage
page.auth.logout.pagegroup=login
page.auth.notauthorized.pagegroup=frontpage
page.bill.list.pagegroup=user
page.viewexpired.pagegroup=frontpage
page.eventorg.list.pagegroup=admin
page.eventorg.edit.pagegroup=admin
page.eventorg.create.pagegroup=admin
page.eventorg.editEvent.pagegroup=admin
page.product.create.pagegroup=admin
page.product.createBill.pagegroup=shop
page.product.edit.pagegroup=admin
......
......@@ -24,6 +24,8 @@ product.save=Tallenna
product.sort=J\u00e4rjestys luku
product.unitName=Tuoteyksikk\u00f6
product.vat=ALV
product.cart.count=Ostoskoriin
productshop.commit=Osta
role.create=Luo rooli
role.edit=Muokkaa
role.name=Nimi
......@@ -48,12 +50,20 @@ user.address=Osoite
user.zipCode=Postinumero
user.town=Kaupunki
user.sex=Sukupuoli
user.superadmin=Superadmin
user.rolesave=Tallenna roolit
bill.billNumber=Laskun numero
loginerror.header=Kirjautuminen eponnistui
loginerror.message=Kyttjtunnus tai salasana ei ollut oikein.
permissiondenied.alreadyLoggedIn=Sinulla ei ole riittvsti oikeuksia!
user.sex.FEMALE=Nainen
user.sex.MALE=Mies
user.sex.UNDEFINED=M\u00e4\u00e4rittelem\u00e4tt\u00e4
user.username=K\u00e4ytt\u00e4j\u00e4tunnus
user.validate.notUniqueUsername=K\u00e4ytt\u00e4j\u00e4tunnus on jo olemassa. Ole hyv\u00e4 ja valitse toinen tunnus
permissiondenied.header=Psy kielletty
permissiondenied.notLoggedIn=Sinulla ei ole riittvsti oikeuksia tlle sivulle.
viewexpired.title=Nkym on vanhentumut
viewexpired.body=Ole hyv ja kirjaudu sisn uudelleen.
\ No newline at end of file
viewexpired.body=Ole hyv ja kirjaudu sisn uudelleen.
eventorg.events=Organisaation tapahtumat
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!