Commit e1de63fe by Tuomas Riihimäki

Merge branch 'user_selectable_groups' into 'master'

User selectable groups

Roolille voi pistää täpän joka sanoo että käyttäjä voi valita sen itse itsellensä.

Tähän oli aluksi iisot suunnitelmat mallia "määritellään ylärooli joka sanoo montako roolia voidaan valita sen alta", mutta kun pääsin käyttäjävieweihin asti totesin että ny ammutaan taas singolla kärpästä, ja tein yksinkertaisen version. Jos joku joskus tulevaisuudessa oikeasti tarttee monipuolisempaa, niin tehdään se silloin.

Tämä korjaa kanssa lectureen liittyviä asioita, tämän hyväksyminen kesti niin pushailin niitä tähän ettei tarvitse kiireessä ruveta leikkimään usealla branchilla ja arpomaan miten ne mergeytyy.

Reviewed-by: @tuomari
2 parents f0611443 7760d10c
Showing with 832 additions and 457 deletions
...@@ -203,6 +203,7 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -203,6 +203,7 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE lecture_participants ADD CONSTRAINT FK_lecture_participants_eventuser_id FOREIGN KEY (eventuser_id) REFERENCES event_users (id)", "ALTER TABLE lecture_participants ADD CONSTRAINT FK_lecture_participants_eventuser_id FOREIGN KEY (eventuser_id) REFERENCES event_users (id)",
"ALTER TABLE lecture_participants ADD CONSTRAINT FK_lecture_participants_lecture_id FOREIGN KEY (lecture_id) REFERENCES lectures (id)"}); "ALTER TABLE lecture_participants ADD CONSTRAINT FK_lecture_participants_lecture_id FOREIGN KEY (lecture_id) REFERENCES lectures (id)"});
dbUpdates.add(new String[] { "ALTER TABLE roles ADD COLUMN user_selectable_role boolean DEFAULT false;" });
} }
@EJB @EJB
......
...@@ -2,16 +2,21 @@ package fi.codecrew.moya.beans; ...@@ -2,16 +2,21 @@ package fi.codecrew.moya.beans;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.enums.apps.LecturePermission; import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.facade.EventUserFacade; import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.LectureFacade; import fi.codecrew.moya.facade.LectureFacade;
import fi.codecrew.moya.facade.LectureGroupFacade; import fi.codecrew.moya.facade.LectureGroupFacade;
import fi.codecrew.moya.model.ApplicationPermission;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Lecture; import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup; import fi.codecrew.moya.model.LectureGroup;
...@@ -24,6 +29,8 @@ import fi.codecrew.moya.model.Role; ...@@ -24,6 +29,8 @@ import fi.codecrew.moya.model.Role;
@DeclareRoles({ LecturePermission.S_VIEW, LecturePermission.S_MANAGE }) @DeclareRoles({ LecturePermission.S_VIEW, LecturePermission.S_MANAGE })
public class LectureBean implements LectureBeanLocal { public class LectureBean implements LectureBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(LectureBean.class);
@EJB @EJB
LectureFacade lectureFacade; LectureFacade lectureFacade;
@EJB @EJB
...@@ -92,6 +99,7 @@ public class LectureBean implements LectureBeanLocal { ...@@ -92,6 +99,7 @@ public class LectureBean implements LectureBeanLocal {
} else { } else {
lecture = lectureFacade.merge(lecture); lecture = lectureFacade.merge(lecture);
} }
return lecture; return lecture;
} }
...@@ -192,4 +200,18 @@ public class LectureBean implements LectureBeanLocal { ...@@ -192,4 +200,18 @@ public class LectureBean implements LectureBeanLocal {
return maxCount - userLectureSelects(group, user); return maxCount - userLectureSelects(group, user);
} }
@Override
public boolean isUserCanParticipate(EventUser user) {
List<Role> roles = userBean.findUsersRoles(user);
for (Role role : roles) {
for (ApplicationPermission apperm : role.getPermissions()) {
if(apperm.getPermission().getFullName().equals(LecturePermission.PARTICIPATE.getFullName()))
return true;
}
}
return false;
}
} }
...@@ -297,7 +297,9 @@ public class MenuBean implements MenuBeanLocal { ...@@ -297,7 +297,9 @@ public class MenuBean implements MenuBeanLocal {
MenuNavigation adminlectures = adminmenu.addPage(null, null); MenuNavigation adminlectures = adminmenu.addPage(null, null);
adminlectures.setKey("topnavi.adminlectures"); adminlectures.setKey("topnavi.adminlectures");
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectureGroups"), LecturePermission.MANAGE); adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectureGroups"), LecturePermission.MANAGE);
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectures"), LecturePermission.MANAGE).setVisible(false);; adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/lectureParticipants"), LecturePermission.MANAGE);
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectures"), LecturePermission.MANAGE).setVisible(false);
......
...@@ -12,6 +12,7 @@ import javax.annotation.Resource; ...@@ -12,6 +12,7 @@ import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.SessionContext; import javax.ejb.SessionContext;
import javax.ejb.Stateless; import javax.ejb.Stateless;
...@@ -20,6 +21,7 @@ import org.slf4j.Logger; ...@@ -20,6 +21,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.codecrew.moya.enums.apps.IAppPermission; import fi.codecrew.moya.enums.apps.IAppPermission;
import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.facade.EventUserFacade; import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.RoleFacade; import fi.codecrew.moya.facade.RoleFacade;
...@@ -56,7 +58,10 @@ public class RoleBean implements RoleBeanLocal { ...@@ -56,7 +58,10 @@ public class RoleBean implements RoleBeanLocal {
private EventUserFacade eventuserfacade; private EventUserFacade eventuserfacade;
@EJB @EJB
private EventBeanLocal permbean; private PermissionBeanLocal permbean;
@EJB
private LoggingBeanLocal loggerbean;
@EJB @EJB
private CardTemplateBean cardTemplateBean; private CardTemplateBean cardTemplateBean;
...@@ -211,10 +216,41 @@ public class RoleBean implements RoleBeanLocal { ...@@ -211,10 +216,41 @@ public class RoleBean implements RoleBeanLocal {
cardTemplateBean.checkPrintedCard(usr); cardTemplateBean.checkPrintedCard(usr);
} }
@Override @Override
@RolesAllowed(UserPermission.S_READ_ROLES) @RolesAllowed(SpecialPermission.S_USER)
public List<Role> getRoles(EventUser selectedUser) { public List<Role> getRoles(EventUser selectedUser) {
if (!permbean.isCurrentUser(selectedUser) && !permbean.hasPermission(UserPermission.READ_ROLES)) {
loggerbean.logMessage(SecurityLogType.permissionDenied, permbean.getCurrentUser(), "User tried to touch another user roles: " + selectedUser);
throw new EJBAccessException("Not enough rights to read user permissions");
}
return roleFacade.findForUser(selectedUser); return roleFacade.findForUser(selectedUser);
} }
@Override
public void saveUserSelectableRoles(EventUser user, List<Role> roles) {
List<Role> allRoles = roleFacade.findUserSelectableRoles();
for (Role ur : allRoles)
{
if (roles.contains(ur)) {
if (!ur.getUsers().contains(user)) {
ur.getUsers().add(user);
}
} else {
ur.getUsers().remove(user);
}
}
cardTemplateBean.checkPrintedCard(user);
}
@Override
public List<Role> listUserSelectableRoles() {
return roleFacade.findUserSelectableRoles();
}
} }
...@@ -129,7 +129,7 @@ public class UserBean implements UserBeanLocal { ...@@ -129,7 +129,7 @@ public class UserBean implements UserBeanLocal {
// changed bean to this bcause of loop // changed bean to this bcause of loop
@EJB @EJB
private PrintedCardFacade printedcardfacade; private PrintedCardFacade printedcardfacade;
@EJB @EJB
private LoggingBeanLocal loggerbean; private LoggingBeanLocal loggerbean;
...@@ -156,7 +156,6 @@ public class UserBean implements UserBeanLocal { ...@@ -156,7 +156,6 @@ public class UserBean implements UserBeanLocal {
@EJB @EJB
private ProductFacade productFacade; private ProductFacade productFacade;
@Override @Override
@RolesAllowed(UserPermission.S_VIEW_ALL) @RolesAllowed(UserPermission.S_VIEW_ALL)
public List<EventUser> getUsers() { public List<EventUser> getUsers() {
...@@ -217,16 +216,19 @@ public class UserBean implements UserBeanLocal { ...@@ -217,16 +216,19 @@ public class UserBean implements UserBeanLocal {
// add roles from events default role. // add roles from events default role.
addRecursive(checkedRoles, event.getDefaultRole()); addRecursive(checkedRoles, event.getDefaultRole());
} }
// add roles from accountEvents of the user
addRecursive(checkedRoles, productbean.getRolesFromAccountEvents(u)); if (!u.isAnonymous()) {
// add roles from accountEvents of the user
for (GroupMembership member : gmfacade.findMemberships(u)) { addRecursive(checkedRoles, productbean.getRolesFromAccountEvents(u));
if (member != null && member.getPlaceReservation() != null)
{ for (GroupMembership member : gmfacade.findMemberships(u)) {
addRecursive(checkedRoles, member.getPlaceReservation().getProvidesRole()); if (member != null && member.getPlaceReservation() != null)
if (member.getPlaceReservation().getProduct() != null)
{ {
addRecursive(checkedRoles, member.getPlaceReservation().getProduct().getProvides()); addRecursive(checkedRoles, member.getPlaceReservation().getProvidesRole());
if (member.getPlaceReservation().getProduct() != null)
{
addRecursive(checkedRoles, member.getPlaceReservation().getProduct().getProvides());
}
} }
} }
} }
......
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,16 @@ public class RoleFacade extends IntegerPkGenericFacade<Role> { ...@@ -60,4 +61,16 @@ 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.equal(root.get(Role_.userSelectableRole), Boolean.TRUE));
List<Role> roles = getEm().createQuery(cq).getResultList();
return roles;
}
} }
...@@ -32,4 +32,6 @@ public interface LectureBeanLocal { ...@@ -32,4 +32,6 @@ public interface LectureBeanLocal {
public int userLectureSelectsLeft(LectureGroup group, EventUser user); public int userLectureSelectsLeft(LectureGroup group, EventUser user);
public int userLectureSelects(LectureGroup group, EventUser user); public int userLectureSelects(LectureGroup group, EventUser user);
public boolean isUserCanParticipate(EventUser user);
} }
...@@ -33,9 +33,13 @@ public interface RoleBeanLocal { ...@@ -33,9 +33,13 @@ 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);
Role addRole(EventUser eventuser, Role role); Role addRole(EventUser eventuser, Role role);
List<Role> listUserSelectableRoles();
} }
...@@ -7,6 +7,7 @@ package fi.codecrew.moya.model; ...@@ -7,6 +7,7 @@ package fi.codecrew.moya.model;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.persistence.Column; import javax.persistence.Column;
...@@ -63,7 +64,7 @@ public class Lecture extends GenericEntity { ...@@ -63,7 +64,7 @@ public class Lecture extends GenericEntity {
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
@Column(name = "start_time") @Column(name = "start_time")
private Calendar startTime; private Date startTime;
@Column(name = "hours", precision = 10, scale = 2) @Column(name = "hours", precision = 10, scale = 2)
private BigDecimal hours; private BigDecimal hours;
...@@ -133,17 +134,19 @@ public class Lecture extends GenericEntity { ...@@ -133,17 +134,19 @@ public class Lecture extends GenericEntity {
this.maxParticipantsCount = maxParticipantsCount; this.maxParticipantsCount = maxParticipantsCount;
} }
public Calendar getStartTime() { public Date getStartTime() {
if (startTime == null) { if (startTime == null) {
startTime = Calendar.getInstance(); startTime = new Date();
} }
return startTime; return startTime;
} }
public void setStartTime(Calendar startTime) { public void setStartTime(Date startTime) {
this.startTime = startTime; this.startTime = startTime;
} }
/*
@Transient
public Calendar getEndTime() { public Calendar getEndTime() {
if (getStartTime() == null || getHours() == null) if (getStartTime() == null || getHours() == null)
...@@ -155,7 +158,8 @@ public class Lecture extends GenericEntity { ...@@ -155,7 +158,8 @@ public class Lecture extends GenericEntity {
return endTime; return endTime;
} }
@Transient
public void setEndTime(Calendar endTime) { public void setEndTime(Calendar endTime) {
if (endTime == null || getStartTime() == null) { if (endTime == null || getStartTime() == null) {
...@@ -163,7 +167,7 @@ public class Lecture extends GenericEntity { ...@@ -163,7 +167,7 @@ public class Lecture extends GenericEntity {
} }
setHours(new BigDecimal((int) endTime.compareTo(getStartTime()) / 1000 / 60 / 60)); setHours(new BigDecimal((int) endTime.compareTo(getStartTime()) / 1000 / 60 / 60));
} }*/
public BigDecimal getHours() { public BigDecimal getHours() {
return hours; return hours;
...@@ -184,16 +188,16 @@ public class Lecture extends GenericEntity { ...@@ -184,16 +188,16 @@ public class Lecture extends GenericEntity {
newLecture.setName(getName()); newLecture.setName(getName());
newLecture.setHours(getHours()); newLecture.setHours(getHours());
newLecture.setMaxParticipantsCount(getMaxParticipantsCount()); newLecture.setMaxParticipantsCount(getMaxParticipantsCount());
newLecture.setStartTime( (Calendar) getStartTime().clone()); newLecture.setStartTime( (Date) getStartTime().clone());
newLecture.setOpenForRoles(new ArrayList<Role>(getOpenForRoles())); newLecture.setOpenForRoles(new ArrayList<Role>(getOpenForRoles()));
return newLecture; return newLecture;
} }
@Transient @Transient
public boolean isFull() { public boolean isFull() {
if (getMaxParticipantsCount() <= 0) { if (getMaxParticipantsCount() == null || getMaxParticipantsCount() <= 0) {
return false; return false;
} }
......
...@@ -73,6 +73,9 @@ public class Role extends GenericEntity { ...@@ -73,6 +73,9 @@ public class Role extends GenericEntity {
@ManyToOne @ManyToOne
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false) @JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event; private LanEvent event;
@Column(name = "user_selectable_role", nullable = true)
private boolean userSelectableRole;
@ManyToMany @ManyToMany
@JoinTable(name = "roles_provided_by_org_roles", @JoinTable(name = "roles_provided_by_org_roles",
...@@ -208,12 +211,22 @@ public class Role extends GenericEntity { ...@@ -208,12 +211,22 @@ public class Role extends GenericEntity {
this.orgRoles = orgRoles; this.orgRoles = orgRoles;
} }
public List<Lecture> getLectures() { public List<Lecture> getLectures() {
return lectures; return lectures;
} }
public void setLectures(List<Lecture> lectures) { public void setLectures(List<Lecture> lectures) {
this.lectures = lectures; this.lectures = lectures;
}
public boolean isUserSelectableRole() {
return userSelectableRole;
}
public void setUserSelectableRole(boolean user_selectable_group) {
this.userSelectableRole = user_selectable_group;
} }
} }
...@@ -4,7 +4,8 @@ import fi.codecrew.moya.enums.BortalApplication; ...@@ -4,7 +4,8 @@ import fi.codecrew.moya.enums.BortalApplication;
public enum LecturePermission implements IAppPermission { public enum LecturePermission implements IAppPermission {
VIEW, VIEW,
PARTICIPATE,
MANAGE, MANAGE,
; ;
......
<!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:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:viewParam name="lecturegroupid" value="#{lectureView.lectureGroupId}" />
<f:event type="preRenderView" listener="#{lectureReportsView.initView()}" />
</f:metadata>
<ui:define rendered="#{lectureReportsView.lectureGroupsVisible}" name="title">
<h1>#{i18n['viewlectures.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="viewlecturesform">
<p:fieldset rendered="#{lectureReportsView.lectureGroupsVisible}" id="lectureGroups" legend="#{i18n['lecture.selectgroup']}">
<p:dataTable value="#{lectureReportsView.lectureGroups}" var="lectureGroup">
<p:column headerText="#{i18n['lectureGroup.name']}">
<h:outputText value="#{lectureGroup.name}" />
</p:column>
<p:column headerText="#{i18n['lectureGroup.description']}">
<h:outputText value="#{lectureGroup.description}" />
</p:column>
<p:column headerText="#{i18n['lectureGroup.selectCountUserInfo']}">
<h:outputText value="#{lectureGroup.selectCount}" />
</p:column>
<p:column>
<p:commandButton value="#{i18n['lectureGroup.view']}" actionListener="#{lectureReportsView.selectCurrentLectureGroup}" update=":viewlecturesform:participatedLectures :viewlecturesform:availableLectures :viewlecturesform:title" onerror="location.reload(true)" />
</p:column>
</p:dataTable>
</p:fieldset>
<h1>
<h:outputText id="title" value="#{lectureReportsView.currentLectureGroup.name}" />
</h1>
<p:fieldset id="availableLectures" legend="#{i18n['lecture.availableLectures']}">
<p:commandButton value="#{i18n['refresh']}" actionListener="#{lectureReportsView.refresh}" />
<p:dataTable value="#{lectureReportsView.lectures}" var="lecture">
<p:column style="width:16px">
<p:rowToggler />
</p:column>
<p:column headerText="#{i18n['lecture.name']}" sortBy="#{lecture.name}">
<h:outputText value="#{lecture.name}" />
</p:column>
<p:column headerText="#{i18n['lecture.description']}" sortBy="#{lecture.description}">
<h:outputText value="#{lecture.description}" />
</p:column>
<p:column headerText="#{i18n['lecture.hours']}" sortBy="#{lecture.hours}">
<h:outputText value="#{lecture.hours}" />
</p:column>
<p:column headerText="#{i18n['lecture.startTime']}" sortBy="#{lecture.startTime}">
<h:outputText value="#{lecture.startTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['lecture.participants']}" sortBy="#{lecture.participantsCount}">
<h:outputText value="#{lecture.participantsCount}" /> / <h:outputText value="#{lecture.maxParticipantsCount}" />
</p:column>
<p:column>
<h:outputText value="#{i18n['lecture.full']}" rendered="#{lecture.full}" />
</p:column>
<p:rowExpansion>
<p:dataTable value="#{lecture.participants}" var="user">
<p:column>
<h:outputText value="#{user.user.nick}" />
</p:column>
<p:column>
<h:outputText value="#{user.user.lastname}" />
</p:column>
<p:column>
<h:outputText value="#{user.user.firstnames}" />
</p:column>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
<p:commandButton value="#{i18n['refresh']}" actionListener="#{lectureReportsView.refresh}" />
</p:fieldset>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.startTime']}"> <p:column headerText="#{i18n['lecture.startTime']}">
<h:outputText value="#{lecture.startTime.time}"> <h:outputText value="#{lecture.startTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" /> <f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText> </h:outputText>
</p:column> </p:column>
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<p:inputText value="#{lectureView.currentLecture.maxParticipantsCount}" /> <p:inputText value="#{lectureView.currentLecture.maxParticipantsCount}" />
<p:outputLabel value="#{i18n['lecture.startTime']}" /> <p:outputLabel value="#{i18n['lecture.startTime']}" />
<p:calendar value="#{lectureView.currentLecture.startTime.time}" pattern="#{sessionHandler.datetimeFormat}" showOn="button" /> <p:calendar value="#{lectureView.currentLecture.startTime}" pattern="#{sessionHandler.datetimeFormat}" showOn="button" />
<p:outputLabel value="#{i18n['lecture.hours']}" /> <p:outputLabel value="#{i18n['lecture.hours']}" />
<p:inputText value="#{lectureView.currentLecture.hours}" /> <p:inputText value="#{lectureView.currentLecture.hours}" />
......
...@@ -14,6 +14,11 @@ ...@@ -14,6 +14,11 @@
<ui:define name="content"> <ui:define name="content">
<h:form id="viewlecturesform"> <h:form id="viewlecturesform">
<p:outputPanel styleClass="messagebox" rendered="#{!lectureUserView.participateActive}">
<h2><p:outputLabel value="#{i18n['lecture.participateNotActive.title']}" /></h2>
<p:outputLabel value="#{i18n['lecture.participateNotActive.message']}" />
</p:outputPanel>
<p:fieldset rendered="#{lectureUserView.lectureGroupsVisible}" id="lectureGroups" legend="#{i18n['lecture.selectgroup']}"> <p:fieldset rendered="#{lectureUserView.lectureGroupsVisible}" id="lectureGroups" legend="#{i18n['lecture.selectgroup']}">
<p:dataTable value="#{lectureUserView.lectureGroups}" var="lectureGroup"> <p:dataTable value="#{lectureUserView.lectureGroups}" var="lectureGroup">
...@@ -37,52 +42,52 @@ ...@@ -37,52 +42,52 @@
</h1> </h1>
<p:fieldset id="participatedLectures" legend="#{i18n['lecture.participatedLectures']} #{lectureUserView.currentGroupParticipateCount} / #{lectureUserView.currentLectureGroup.selectCount}"> <p:fieldset id="participatedLectures" rendered="#{lectureUserView.participateActive}" legend="#{i18n['lecture.participatedLectures']} #{lectureUserView.currentGroupParticipateCount} / #{lectureUserView.currentLectureGroup.selectCount}">
<p:dataTable value="#{lectureUserView.participatedLectures}" var="lecture"> <p:dataTable value="#{lectureUserView.participatedLectures}" var="lecture">
<p:column headerText="#{i18n['lecture.name']}"> <p:column headerText="#{i18n['lecture.name']}" style="width:125px">
<h:outputText value="#{lecture.name}" /> <h:outputText value="#{lecture.name}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.description']}"> <p:column headerText="#{i18n['lecture.description']}">
<h:outputText value="#{lecture.description}" /> <h:outputText value="#{lecture.description}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.hours']}"> <p:column headerText="#{i18n['lecture.hours']}" style="width:110px">
<h:outputText value="#{lecture.hours}" /> <h:outputText value="#{lecture.hours}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.startTime']}"> <p:column headerText="#{i18n['lecture.startTime']}" style="width:110px">
<h:outputText value="#{lecture.startTime.time}"> <h:outputText value="#{lecture.startTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" /> <f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText> </h:outputText>
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.participants']}"> <p:column headerText="#{i18n['lecture.participants']}" style="width:110px">
<h:outputText value="#{lecture.participantsCount}" /> / <h:outputText value="#{lecture.maxParticipantsCount}" /> <h:outputText value="#{lecture.participantsCount}" /> / <h:outputText value="#{lecture.maxParticipantsCount}" />
</p:column> </p:column>
<p:column> <p:column style="width:110px">
<p:commandButton value="#{i18n['lecture.unparticipate']}" actionListener="#{lectureUserView.unParticipateCurrent}" update=":viewlecturesform:availableLectures :viewlecturesform:participatedLectures" onerror="location.reload(true)" /> <p:commandButton value="#{i18n['lecture.unparticipate']}" actionListener="#{lectureUserView.unParticipateCurrent}" update=":viewlecturesform:availableLectures :viewlecturesform:participatedLectures" onerror="location.reload(true)" />
</p:column> </p:column>
</p:dataTable> </p:dataTable>
</p:fieldset> </p:fieldset>
<br /><br /> <br /><br />
<p:fieldset id="availableLectures" legend="#{i18n['lecture.availableLectures']}"> <p:fieldset id="availableLectures" legend="#{i18n['lecture.availableLectures']}" >
<p:dataTable value="#{lectureUserView.lectures}" var="lecture"> <p:dataTable value="#{lectureUserView.lectures}" var="lecture">
<p:column headerText="#{i18n['lecture.name']}"> <p:column headerText="#{i18n['lecture.name']}" sortBy="#{lecture.name}" style="width:125px">
<h:outputText value="#{lecture.name}" /> <h:outputText value="#{lecture.name}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.description']}"> <p:column headerText="#{i18n['lecture.description']}" sortBy="#{lecture.description}">
<h:outputText value="#{lecture.description}" /> <h:outputText value="#{lecture.description}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.hours']}"> <p:column headerText="#{i18n['lecture.hours']}" sortBy="#{lecture.hours}" style="width:110px">
<h:outputText value="#{lecture.hours}" /> <h:outputText value="#{lecture.hours}" />
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.startTime']}"> <p:column headerText="#{i18n['lecture.startTime']}" sortBy="#{lecture.startTime}" style="width:110px">
<h:outputText value="#{lecture.startTime.time}"> <h:outputText value="#{lecture.startTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" /> <f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText> </h:outputText>
</p:column> </p:column>
<p:column headerText="#{i18n['lecture.participants']}"> <p:column headerText="#{i18n['lecture.participants']}" sortBy="#{lecture.participantsCount}" style="width:110px">
<h:outputText value="#{lecture.participantsCount}" /> / <h:outputText value="#{lecture.maxParticipantsCount}" /> <h:outputText value="#{lecture.participantsCount}" /> / <h:outputText value="#{lecture.maxParticipantsCount}" />
</p:column> </p:column>
<p:column> <p:column style="width:80px">
<p:commandButton value="#{i18n['lecture.participate']}" rendered="#{!lectureUserView.currentGroupFull and !lecture.full}" actionListener="#{lectureUserView.participateCurrent}" update=":viewlecturesform:availableLectures :viewlecturesform:participatedLectures" onerror="location.reload(true)" /> <p:commandButton value="#{i18n['lecture.participate']}" rendered="#{!lectureUserView.currentGroupFull and !lecture.full and lectureUserView.participateActive}" actionListener="#{lectureUserView.participateCurrent}" update=":viewlecturesform:availableLectures :viewlecturesform:participatedLectures" onerror="location.reload(true)" />
<h:outputText value="#{i18n['lecture.full']}" rendered="#{lecture.full}" /> <h:outputText value="#{i18n['lecture.full']}" rendered="#{lecture.full}" />
<h:outputText value="#{i18n['lecture.groupFull']}" rendered="#{lectureUserView.currentGroupFull}" /> <h:outputText value="#{i18n['lecture.groupFull']}" rendered="#{lectureUserView.currentGroupFull}" />
</p:column> </p:column>
......
...@@ -100,8 +100,10 @@ ...@@ -100,8 +100,10 @@
</h:panelGrid> </h:panelGrid>
<br /> <br />
<h2><p:outputLabel value="#{i18n['bill.notes.title']}" /> </h2> <h:panelGroup rendered="#{productShopView.gatherBillInfo}">
<p:inputTextarea cols="50" rendered="#{productShopView.gatherBillInfo}" value="#{productShopView.otherInfo}" label="#{i18n['otherInfo']}" /> <h2><p:outputLabel value="#{i18n['bill.notes.title']}" /> </h2>
<p:inputTextarea cols="50" value="#{productShopView.otherInfo}" label="#{i18n['otherInfo']}" />
</h:panelGroup>
<br /> <br />
<p:commandButton onerror="location.reload(true);" action="#{cc.attrs.commitaction}" id="commitbutton-botton" value="#{cc.attrs.commitValue}" /> <p:commandButton onerror="location.reload(true);" action="#{cc.attrs.commitaction}" id="commitbutton-botton" value="#{cc.attrs.commitValue}" />
......
<?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.userSelectableRole']}" />
<p:selectBooleanCheckbox value="#{roleView.role.userSelectableRole}" />
<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>
<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>
...@@ -10,21 +9,20 @@ ...@@ -10,21 +9,20 @@
<composite:attribute name="creating" required="false" default="false" /> <composite:attribute name="creating" required="false" default="false" />
<composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" /> <composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
<composite:attribute name="camAlwaysOn" required="false" default="false" /> <composite:attribute name="camAlwaysOn" required="false" default="false" />
<composite:attribute name="showRoles" required="false" default="false" />
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" /> <h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:panelGrid columns="3" cellpadding="20" columnClasses="topalign,topalign,topalign">
<h:panelGrid columns="2">
<h:form id="userform" enctype="multipart/form-data"> <h:form id="userform" enctype="multipart/form-data">
<h:panelGroup> <h:panelGroup>
<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>
...@@ -80,103 +78,99 @@ ...@@ -80,103 +78,99 @@
</h:form> </h:form>
<h:form> <h:form>
<h:panelGroup> <h:panelGrid columns="2" columnClasses="topalign,topalign">
<table> <h:panelGroup>
<ui:fragment rendered="#{!cc.attrs.creating}"> <table>
<ui:fragment rendered="#{!cc.attrs.creating}">
<tr>
<td colspan="2"><b><h:outputLabel for="login" value="#{i18n['user.login']}" /></b><br /> <h:outputText value="#{userView.selectedUser.login}" id="login" /></td>
</tr>
</ui:fragment>
<tr> <tr>
<td colspan="2"><b><h:outputLabel for="login" value="#{i18n['user.login']}" /></b><br /> <td colspan="2"><b><h:outputLabel value="#{i18n['user.nick']}" for="nick" /> </b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<h:outputText value="#{userView.selectedUser.login}" id="login" />
</td>
</tr>
</ui:fragment>
<tr>
<td colspan="2"><b><h:outputLabel value="#{i18n['user.nick']}" for="nick" /> </b><br />
<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> </p:inplace></td>
</td> </tr>
</tr> <tr>
<tr> <td><b><h:outputLabel value="#{i18n['user.firstNames']}" for="firstnames" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<td><b><h:outputLabel value="#{i18n['user.firstNames']}" for="firstnames" /></b><br /> <p:inputText size="22" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.firstnames}" />
<p:inplace emptyLabel="#{i18n['user.insert']}"> </p:inplace></td>
<p:inputText size="22" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.firstnames}" /> <td><b><h:outputLabel value="#{i18n['user.lastName']}" for="lastname" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
</p:inplace> <p:inputText size="30" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.lastname}" />
</td> </p:inplace></td>
<td><b><h:outputLabel value="#{i18n['user.lastName']}" for="lastname" /></b><br /> </tr>
<p:inplace emptyLabel="#{i18n['user.insert']}"> <tr>
<p:inputText size="30" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.lastname}" /> <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:inplace> <f:selectItem id="undefined" itemLabel="#{i18n['user.sex.UNDEFINED']}" itemValue="UNDEFINED" />
</td> <f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" />
</tr> <f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" />
<tr> </p:selectOneMenu></td>
<td colspan="2"><b><h:outputLabel value="#{i18n['user.sex']}" for="sex" /></b> <br /> </tr>
<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" /> <tr>
<f:selectItem id="male" itemLabel="#{i18n['user.sex.MALE']}" itemValue="MALE" /> <td><b><h:outputLabel for="birthday" value="#{i18n['user.birthday']}" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<f:selectItem id="female" itemLabel="#{i18n['user.sex.FEMALE']}" itemValue="FEMALE" /> <p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" value="#{userView.selectedUser.birthday}">
</p:selectOneMenu> <f:convertDateTime pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
</td> </p:calendar>
</tr> </p:inplace> <h:message for="birthday" /></td>
<td><b><h:outputLabel for="age" value="#{i18n['user.age']}" /></b><br /> <h:outputText value="#{userView.selectedUser.user.age}">
<tr> <f:convertNumber minFractionDigits="2" maxFractionDigits="2" />
<td><b><h:outputLabel for="birthday" value="#{i18n['user.birthday']}" /></b><br /> </h:outputText></td>
<p:inplace emptyLabel="#{i18n['user.insert']}"> </tr>
<p:calendar id="birthday" navigator="true" yearRange="c-80:c-0" value="#{userView.selectedUser.birthday}"> </table>
<f:convertDateTime pattern="#{sessionHandler.dateFormat}" timeZone="#{sessionHandler.timezone}" />
</p:calendar> <table>
</p:inplace> <h:message for="birthday" /> <tr>
</td> <td colspan="2"><b><p:outputLabel value="#{i18n['user.address']}" for="address" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<td><b><h:outputLabel for="age" value="#{i18n['user.age']}" /></b><br /> <p:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.address}" />
<h:outputText value="#{userView.selectedUser.user.age}"> </p:inplace></td>
<f:convertNumber minFractionDigits="2" maxFractionDigits="2"/> </tr>
</h:outputText> <tr>
</td> <td><b><p:outputLabel value="#{i18n['user.zipCode']}" for="zip" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
</tr> <p:inputText styleClass="ui-input" size="7" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.zip}" />
</table> </p:inplace> <p:message for="zip" /></td>
<td><b><p:outputLabel value="#{i18n['user.town']}" for="town" /></b><br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
<table> <p:inputText styleClass="ui-input" size="25" id="town" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.town}" />
<tr> </p:inplace> <p:message for="town" /></td>
<td colspan="2"><b><p:outputLabel value="#{i18n['user.address']}" for="address" /></b><br /> </tr>
<p:inplace emptyLabel="#{i18n['user.insert']}"> <tr>
<p:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.address}" /> <td colspan="2"><b><h:outputLabel value="#{i18n['user.email']}" for="email" /></b> <br /> <p:inplace emptyLabel="#{i18n['user.insert']}">
</p:inplace> <p:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.email}" />
</td> </p:inplace></td>
</tr> </tr>
<tr> <tr>
<td><b><p:outputLabel value="#{i18n['user.zipCode']}" for="zip" /></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="zip" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.zip}" /> </p:inplace> <p:message for="phone" /></td>
</p:inplace> <p:message for="zip" /> </tr>
</td>
<td><b><p:outputLabel value="#{i18n['user.town']}" for="town" /></b><br /> </table>
<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: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:inplace> <p:message for="town" />
</td> </h:panelGroup>
</tr>
<tr> <h:panelGroup rendered="#{userView.showUserSelectableRoles and cc.attrs.showRoles}">
<td colspan="2"><b><h:outputLabel value="#{i18n['user.email']}" for="email" /></b> <br />
<p:inplace emptyLabel="#{i18n['user.insert']}"> <h2>
<p:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.email}" /> <h:outputText value="#{i18n['user.userSelectableRoles']}:" />
</p:inplace> </h2>
</td>
</tr> <p:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" value="#{userView.userSelectableRoles}">
<tr> <f:selectItems value="#{roleDataView.userSelectableRoles}" var="roleitem" itemLabel="#{roleitem.name}" itemValue="#{roleitem}" />
<td><b><p:outputLabel value="#{i18n['user.phone']}" for="phone" /></b><br /> </p:selectManyCheckbox>
<p:inplace emptyLabel="#{i18n['user.insert']}"> <div>
<p:inputText styleClass="ui-input" size="7" id="phone" disabled="#{!cc.attrs.creating and !userView.canSave}" value="#{userView.selectedUser.phone}" /> <h:message rendered="#{roleView.canReadRoles}" for="roles" />
</p:inplace> <p:message for="phone" /> </div>
</td> <h:commandButton action="#{userView.saveUserSelectableRoles}" value="#{i18n['user.saveUserSelectableRoles']}" />
</tr>
</h:panelGroup>
</table> </h:panelGrid>
<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:form> </h:form>
</h:panelGrid> </h:panelGrid>
</composite:implementation> </composite:implementation>
</html> </html>
......
...@@ -206,3 +206,15 @@ th, td { ...@@ -206,3 +206,15 @@ th, td {
padding-left: 10px; padding-left: 10px;
padding-top: 10px; padding-top: 10px;
} }
.topalign {
vertical-align: top;
padding-left: 20px;
}
.messagebox {
border: 1px red solid;
padding-left: 20px;
padding-right: 20px;
padding-bottom: 20px;
}
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<h1>#{i18n['user.edit.title']}</h1> <h1>#{i18n['user.edit.title']}</h1>
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" /> <users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" showRoles="true" />
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
...@@ -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.
...@@ -204,23 +201,26 @@ lanEventProperty.defaultValue = Default value ...@@ -204,23 +201,26 @@ lanEventProperty.defaultValue = Default value
lanEventProperty.save = Save lanEventProperty.save = Save
lanEventProperty.textValue = Text value lanEventProperty.textValue = Text value
lecture.availableLectures = Aihealueen kurssit ja luennot lecture.availableLectures = Aihealueen kurssit ja luennot
lecture.createLecture = Uuden tiedot lecture.createLecture = Uuden tiedot
lecture.createNew = Luo uusi lecture.createNew = Luo uusi
lecture.description = Kuvaus lecture.description = Kuvaus
lecture.groupFull = Kiinti\u00F6 t\u00E4ynn\u00E4 lecture.full = Kurssi t\u00E4ynn\u00E4
lecture.hours = Kesto, tunteja lecture.groupFull = Kiinti\u00F6 t\u00E4ynn\u00E4
lecture.maxParticipantsCount = Max. osallistujia lecture.hours = Kesto, tunteja
lecture.multicreate = Luo monta putkeen lecture.maxParticipantsCount = Max. osallistujia
lecture.name = Nimi lecture.multicreate = Luo monta putkeen
lecture.participants = Osallistujia lecture.name = Nimi
lecture.participate = Ilmoittaudu lecture.participants = Osallistujia
lecture.participatedLectures = Kurssi-ilmoittautumisesi lecture.participate = Ilmoittaudu
lecture.roles = Roolit lecture.participateNotActive.message = Voit ilmoittautua kursseille kun olet ostanut lipun tapahtumaan
lecture.saveLecture = Muokkaa lecture.participateNotActive.title = Osta ensiksi p\u00E4\u00E4sylippu
lecture.selectgroup = Valitse aihealue lecture.participatedLectures = Kurssi-ilmoittautumisesi
lecture.startTime = Aloitusaika lecture.roles = Roolit
lecture.unparticipate = Poista ilmoittautuminen lecture.saveLecture = Muokkaa
lecture.selectgroup = Valitse aihealue
lecture.startTime = Aloitusaika
lecture.unparticipate = Poista ilmoittautuminen
lectureGroup.createLectureGroup = Luo kurssikokonaisuus lectureGroup.createLectureGroup = Luo kurssikokonaisuus
lectureGroup.createNew = Luo uusi lectureGroup.createNew = Luo uusi
...@@ -253,7 +253,6 @@ navi.auth.login = frontpage ...@@ -253,7 +253,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
...@@ -294,6 +293,8 @@ productshop.plusTen = +10 ...@@ -294,6 +293,8 @@ productshop.plusTen = +10
reader.autopoll = Jatkuva lukijan seuraaminen reader.autopoll = Jatkuva lukijan seuraaminen
refresh = P\u00E4ivit\u00E4
registerleaflet.title = Rekisteriseloste registerleaflet.title = Rekisteriseloste
resetMail.header = Reset lost password resetMail.header = Reset lost password
...@@ -302,43 +303,40 @@ resetMail.username = Username ...@@ -302,43 +303,40 @@ 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.userSelectableRole = K\u00E4ytt\u00E4j\u00E4n valittavissaoleva rooli
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.lectureParticipants = Tarkastele osallistujia
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.saveUserSelectableRoles = Tallenna
user.unauthenticated = Kirjautumaton user.unauthenticated = Kirjautumaton
user.userSelectableRoles = Valitse yksi
usercart.downloadCsv = CSV usercart.downloadCsv = CSV
usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n
......
...@@ -284,11 +284,9 @@ compofile.uploadTime = Upload time ...@@ -284,11 +284,9 @@ compofile.uploadTime = Upload time
content.showContentEditLinks = Show content edit links content.showContentEditLinks = Show content edit links
delete = Delete
create = Create create = Create
delete = Delete
discount.active = Active discount.active = Active
discount.amountMax = Max amount discount.amountMax = Max amount
...@@ -555,23 +553,26 @@ layout.editBottom = Edit bottom content ...@@ -555,23 +553,26 @@ layout.editBottom = Edit bottom content
layout.editContent = Edit center layout.editContent = Edit center
layout.editTop = Edit topcontent layout.editTop = Edit topcontent
lecture.availableLectures = available lectures lecture.availableLectures = available lectures
lecture.createLecture = New lecture lecture.createLecture = New lecture
lecture.createNew = Create new lecture.createNew = Create new
lecture.description = Description lecture.description = Description
lecture.groupFull = Limit reached lecture.full = Lecture full
lecture.hours = Duration hours lecture.groupFull = Limit reached
lecture.maxParticipantsCount = Max participants lecture.hours = Duration hours
lecture.multicreate = Create multible in row lecture.maxParticipantsCount = Max participants
lecture.name = Name lecture.multicreate = Create multible in row
lecture.participants = Participants lecture.name = Name
lecture.participate = Participate lecture.participants = Participants
lecture.participatedLectures = Your lectures lecture.participate = Participate
lecture.roles = Roles lecture.participateNotActive.message = You can participate to lectures when you have bought a ticket to event.
lecture.saveLecture = Edit lecture.participateNotActive.title = Buy tickets before participating
lecture.selectgroup = Select lecturegroup lecture.participatedLectures = Your lectures
lecture.startTime = Start time lecture.roles = Roles
lecture.unparticipate = Remove participation lecture.saveLecture = Edit
lecture.selectgroup = Select lecturegroup
lecture.startTime = Start time
lecture.unparticipate = Remove participation
lectureGroup.createLectureGroup = Create lecturegroup lectureGroup.createLectureGroup = Create lecturegroup
lectureGroup.createNew = Create new lectureGroup.createNew = Create new
...@@ -940,6 +941,8 @@ readerevent.tagname = Tag ...@@ -940,6 +941,8 @@ readerevent.tagname = Tag
readerview.cards = Card ( printcount ) readerview.cards = Card ( printcount )
refresh = Refresh
registerleaflet.title = Register leaflet registerleaflet.title = Register leaflet
rejectcard.body = Body rejectcard.body = Body
...@@ -966,20 +969,25 @@ rfidevent.reader = Reader ...@@ -966,20 +969,25 @@ rfidevent.reader = Reader
rfidevent.searchuser = Search user rfidevent.searchuser = Search user
rfidevent.tag = Tag rfidevent.tag = Tag
role.cardtemplate = Cardtemplate role.cardtemplate = Cardtemplate
role.create = Create role role.create = Create role
role.description = Description role.description = Description
role.edit = Edit role.edit = Edit
role.edit.save = Save role.edit.save = Save
role.execute = (X) role.execute = (X)
role.name = Name role.name = Name
role.parents = Parents role.parents = Parents
role.permissionheader = Role permissions role.permissionheader = Role permissions
role.read = (R) role.read = (R)
role.savePermissions = Save permissions role.savePermissions = Save permissions
role.write = (W) role.userSelectableRole = User selectable role
role.write = (W)
roleView.save = Save changes
roleView.adduser = Add user
roleView.hidePermissioneditor = Hide permissioneditor
roleView.members = Users
roleView.save = Save changes
roleView.showPermissioneditor = Show permissioneditor
salespoint.edit = Edit salespoint.edit = Edit
salespoint.name = Name salespoint.name = Name
...@@ -1058,102 +1066,99 @@ sitepage.save = Save ...@@ -1058,102 +1066,99 @@ sitepage.save = Save
sitepagelist.header = Site pages sitepagelist.header = Site pages
submenu.NotImplementedYet = Not implemented
submenu.NotImplementedYet = Not implemented submenu.actionlog.messagelist = ActionLog
submenu.actionlog.messagelist = ActionLog submenu.actionlog.taskview = View tasks
submenu.actionlog.taskview = View tasks submenu.admin.adduser = Adduser
submenu.admin.adduser = Adduser submenu.admin.adduser.index = Adduser
submenu.admin.adduser.index = Adduser submenu.admin.adduser.login = Login
submenu.admin.adduser.login = Login submenu.admin.adduser.start = Welcome
submenu.admin.adduser.start = Welcome submenu.admin.adduser.update = Update profile picture
submenu.admin.adduser.update = Update profile picture submenu.admin.incoming.index = Incoming
submenu.admin.incoming.index = Incoming submenu.admin.incoming.printCard = Print card
submenu.admin.incoming.printCard = Print card submenu.admin.info.computerplaces = Computerplaces
submenu.admin.info.computerplaces = Computerplaces submenu.admin.info.general = General functions
submenu.admin.info.general = General functions submenu.admin.info.index = Info index
submenu.admin.info.index = Info index submenu.auth.login = Login
submenu.auth.login = Login submenu.auth.loginError = Login error
submenu.auth.loginError = Login error submenu.auth.loginSucessRedirect = Successfully logged in
submenu.auth.loginSucessRedirect = Successfully logged in submenu.auth.logout = Logout
submenu.auth.logout = Logout submenu.auth.logoutResponse = Logout successfull
submenu.auth.logoutResponse = Logout successfull submenu.auth.sendResetMail = Password reset
submenu.auth.sendResetMail = Password reset submenu.bill.billSummary = Bill summary
submenu.bill.billSummary = Bill summary submenu.bill.list = My bills
submenu.bill.list = My bills submenu.bill.listAll = All bills
submenu.bill.listAll = All bills submenu.eventorg.editEvent = Edit event
submenu.eventorg.editEvent = Edit event submenu.eventorg.list = Manage Event
submenu.eventorg.list = Manage Event submenu.feedback.index = U Mad?!
submenu.feedback.index = U Mad?! submenu.foodadmin.createTemplate = Create foodwave template
submenu.foodadmin.createTemplate = Create foodwave template submenu.foodadmin.listTemplates = List foodwave templates
submenu.foodadmin.listTemplates = List foodwave templates submenu.foodmanager.listFoodwaves = List active foodwaves
submenu.foodmanager.listFoodwaves = List active foodwaves submenu.foodwave.list = Foodwaves
submenu.foodwave.list = Foodwaves submenu.foodwave.listTemplates = Food provides
submenu.foodwave.listTemplates = Food provides submenu.index = Frontpage
submenu.index = Frontpage submenu.info.incoming = Incomingview
submenu.info.incoming = Incomingview submenu.info.index = Infoview
submenu.info.index = Infoview submenu.info.shop = Shop
submenu.info.shop = Shop submenu.lectureadmin.lectureParticipants = Lecture participants
submenu.license.manageCodes = Manage codes
submenu.license.viewCodes = View codes
submenu.map.create = Create map
submenu.map.list = List maps
submenu.networkassociation.index = Associations
submenu.orgrole.create = Create organisationrole
submenu.orgrole.list = Organisation roles
submenu.pages.create = Create content
submenu.pages.list = List pages
submenu.place.adminGroups = Account places
submenu.place.adminPlacemap = Placemap
submenu.place.editGroup = Edit group
submenu.place.insertToken = Insert placecode
submenu.place.myGroups = Place reservations
submenu.place.placemap = Placemap
submenu.poll.index = Polls
submenu.product.create = Create product
submenu.product.list = List products
submenu.role.create = Create role
submenu.role.list = Show Roles
submenu.shop.createBill = Purchase
submenu.shop.listReaders = List readers
submenu.shop.shopToUser = Shop to user
submenu.shop.showReaderEvents = Reader events
submenu.tournaments.admin.index = View and manage
submenu.tournaments.index = View and participate
submenu.tournaments.myparticipations = My Participations
submenu.user.accountEvents = Account events
submenu.user.changePassword = Change password
submenu.user.create = Create new user
submenu.user.edit = My information
submenu.user.foodwave = Food
submenu.user.gameids = Set GameIDs
submenu.user.invite = Invite friends
submenu.user.manageuserlinks = Manage users
submenu.user.other = Other
submenu.user.rolelinks = Manage roles
submenu.user.sendPicture = Send picture
submenu.user.shop = Shop
submenu.user.userlinks = User information
submenu.useradmin.accountEvents = Account events
submenu.useradmin.create = Create user
submenu.useradmin.createCardTemplate = Create cardtemplate
submenu.useradmin.edit = Edit user
submenu.useradmin.foodwaveshop = Food wave shop
submenu.useradmin.list = Search Users
submenu.useradmin.listCardTemplates = Card templates
submenu.useradmin.sendPicture = Send a picture
submenu.useradmin.showTakePicture = Show webcam
submenu.useradmin.validateUser = Validate user
submenu.utils.index = Administration utils
submenu.voting.admincompolist = Compos
submenu.voting.compolist = Compos
submenu.voting.create = Create new compo
submenu.voting.myEntries = My entries
submenu.voting.submitEntry = Submit entry
submenu.lectureadmin.manageLectureGroups = Management submenu.lectureadmin.manageLectureGroups = Management
submenu.lectures.viewLectures = Participate submenu.lectures.viewLectures = Participate
submenu.license.manageCodes = Manage codes
submenu.license.viewCodes = View codes
submenu.map.create = Create map
submenu.map.list = List maps
submenu.networkassociation.index = Associations
submenu.orgrole.create = Create organisationrole
submenu.orgrole.list = Organisation roles
submenu.pages.create = Create content
submenu.pages.list = List pages
submenu.place.adminGroups = Account places
submenu.place.adminPlacemap = Placemap
submenu.place.editGroup = Edit group
submenu.place.insertToken = Insert placecode
submenu.place.myGroups = Place reservations
submenu.place.placemap = Placemap
submenu.poll.index = Polls
submenu.product.create = Create product
submenu.product.list = List products
submenu.role.create = Create role
submenu.role.list = Show Roles
submenu.shop.createBill = Purchase
submenu.shop.listReaders = List readers
submenu.shop.shopToUser = Shop to user
submenu.shop.showReaderEvents = Reader events
submenu.tournaments.admin.index = View and manage
submenu.tournaments.index = View and participate
submenu.tournaments.myparticipations = My Participations
submenu.user.accountEvents = Account events
submenu.user.changePassword = Change password
submenu.user.create = Create new user
submenu.user.edit = My information
submenu.user.foodwave = Food
submenu.user.gameids = Set GameIDs
submenu.user.invite = Invite friends
submenu.user.manageuserlinks = Manage users
submenu.user.other = Other
submenu.user.rolelinks = Manage roles
submenu.user.sendPicture = Send picture
submenu.user.shop = Shop
submenu.user.userlinks = User information
submenu.useradmin.accountEvents = Account events
submenu.useradmin.create = Create user
submenu.useradmin.createCardTemplate = Create cardtemplate
submenu.useradmin.edit = Edit user
submenu.useradmin.foodwaveshop = Food wave shop
submenu.useradmin.list = Search Users
submenu.useradmin.listCardTemplates = Card templates
submenu.useradmin.sendPicture = Send a picture
submenu.useradmin.showTakePicture = Show webcam
submenu.useradmin.validateUser = Validate user
submenu.utils.index = Administration utils
submenu.voting.admincompolist = Compos
submenu.voting.compolist = Compos
submenu.voting.create = Create new compo
submenu.voting.myEntries = My entries
submenu.voting.submitEntry = Submit entry
subnavi.billing = Billing subnavi.billing = Billing
subnavi.cards = Cards subnavi.cards = Cards
...@@ -1392,6 +1397,7 @@ user.save = Save ...@@ -1392,6 +1397,7 @@ user.save = Save
user.saveFailed = Save failed, Not enough permissions! user.saveFailed = Save failed, Not enough permissions!
user.saveRoles = Save roles user.saveRoles = Save roles
user.saveSuccessfull = Changes saved successfully user.saveSuccessfull = Changes saved successfully
user.saveUserSelectableRoles = Save
user.search = Search user.search = Search
user.searchUser = Search user user.searchUser = Search user
user.sendPicture = Send image user.sendPicture = Send image
...@@ -1406,6 +1412,7 @@ user.superadmin = Superadmin ...@@ -1406,6 +1412,7 @@ user.superadmin = Superadmin
user.thisIsCurrentImage = Current image user.thisIsCurrentImage = Current image
user.town = City user.town = City
user.uploadimage = Send image user.uploadimage = Send image
user.userSelectableRoles = Select one
user.username = Username user.username = Username
user.validate.notUniqueUsername = Username already exists. Please select another. user.validate.notUniqueUsername = Username already exists. Please select another.
user.validateUser.commit = Send user.validateUser.commit = Send
......
...@@ -197,7 +197,6 @@ card.massprint.title = Tulosta kaikki ...@@ -197,7 +197,6 @@ card.massprint.title = Tulosta kaikki
cardCode.code = Koodi cardCode.code = Koodi
cardCode.type = Tyyppi cardCode.type = Tyyppi
cardObjectData.create = Liit\u00E4 kuvia cardObjectData.create = Liit\u00E4 kuvia
cardObjectData.edit = Muokkaa cardObjectData.edit = Muokkaa
cardObjectData.save = Tallenna cardObjectData.save = Tallenna
...@@ -286,11 +285,9 @@ compofile.uploadTime = Tallennusaika ...@@ -286,11 +285,9 @@ compofile.uploadTime = Tallennusaika
content.showContentEditLinks = N\u00E4yt\u00E4 sis\u00E4ll\u00F6nmuokkauslinkit content.showContentEditLinks = N\u00E4yt\u00E4 sis\u00E4ll\u00F6nmuokkauslinkit
delete = Poista
create = Luo create = Luo
delete = Poista
discount.active = Aktiivinen discount.active = Aktiivinen
discount.amountMax = Enimm\u00E4ism\u00E4\u00E4r\u00E4 discount.amountMax = Enimm\u00E4ism\u00E4\u00E4r\u00E4
...@@ -566,23 +563,26 @@ layout.editBottom = Muokkaa alasis\u00E4lt\u00F6\u00E4 ...@@ -566,23 +563,26 @@ layout.editBottom = Muokkaa alasis\u00E4lt\u00F6\u00E4
layout.editContent = Muokkaa sis\u00E4lt\u00F6\u00E4 layout.editContent = Muokkaa sis\u00E4lt\u00F6\u00E4
layout.editTop = Muokkaa yl\u00E4sis\u00E4lt\u00F6\u00E4 layout.editTop = Muokkaa yl\u00E4sis\u00E4lt\u00F6\u00E4
lecture.availableLectures = Aihealueen kurssit ja luennot lecture.availableLectures = Aihealueen kurssit ja luennot
lecture.createLecture = Uuden tiedot lecture.createLecture = Uuden tiedot
lecture.createNew = Luo uusi lecture.createNew = Luo uusi
lecture.description = Kuvaus lecture.description = Kuvaus
lecture.groupFull = Kiinti\u00F6 t\u00E4ynn\u00E4 lecture.full = Kurssi t\u00E4ynn\u00E4
lecture.hours = Kesto tunteina lecture.groupFull = Kiinti\u00F6 t\u00E4ynn\u00E4
lecture.maxParticipantsCount = Osallistujia enint. lecture.hours = Kesto tunteina
lecture.multicreate = Luo monta putkeen lecture.maxParticipantsCount = Osallistujia enint.
lecture.name = Nimi lecture.multicreate = Luo monta putkeen
lecture.participants = Osallistujia lecture.name = Nimi
lecture.participate = Ilmoittaudu lecture.participants = Osallistujia
lecture.participatedLectures = Ilmoittautumisesi lecture.participate = Ilmoittaudu
lecture.roles = Roolit lecture.participateNotActive.message = Voit ilmoittautua kursseille vasta kun olet ostanut lipun tapahtumaan. Osta lippu valitsemalla vasemmalta Kauppa -> Osta tuotteita.
lecture.saveLecture = Muokkaa lecture.participateNotActive.title = Aloita ostamalla lippu tapahtumaan
lecture.selectgroup = Valitse aihealue lecture.participatedLectures = Ilmoittautumisesi
lecture.startTime = Aloitusaika lecture.roles = Roolit
lecture.unparticipate = Poista ilmoittautuminen lecture.saveLecture = Muokkaa
lecture.selectgroup = Valitse aihealue
lecture.startTime = Aloitusaika
lecture.unparticipate = Poista ilmoittautuminen
lectureGroup.createLectureGroup = Luo kurssikokonaisuus lectureGroup.createLectureGroup = Luo kurssikokonaisuus
lectureGroup.createNew = Luo uusi lectureGroup.createNew = Luo uusi
...@@ -696,10 +696,8 @@ newsgroup.writerRole = Kirjoittajaryhm\u00E4 ...@@ -696,10 +696,8 @@ newsgroup.writerRole = Kirjoittajaryhm\u00E4
newslist.header = Uutisryhm\u00E4t newslist.header = Uutisryhm\u00E4t
off = Poissa off = Poissa
on = P\u00E4\u00E4ll\u00E4 on = P\u00E4\u00E4ll\u00E4
org.hibernate.validator.constraints.Email.message = V\u00E4\u00E4rin muotoiltu s\u00E4hk\u00F6postiosoite org.hibernate.validator.constraints.Email.message = V\u00E4\u00E4rin muotoiltu s\u00E4hk\u00F6postiosoite
...@@ -928,6 +926,8 @@ readerevent.tagname = Tagi ...@@ -928,6 +926,8 @@ readerevent.tagname = Tagi
readerview.cards = Kortit ( tulostuslkm ) readerview.cards = Kortit ( tulostuslkm )
refresh = P\u00E4ivit\u00E4
registerleaflet.title = Rekisteriseloste registerleaflet.title = Rekisteriseloste
rejectcard.body = Viestin sis\u00E4lt\u00F6 rejectcard.body = Viestin sis\u00E4lt\u00F6
...@@ -954,17 +954,22 @@ rfidevent.reader = Lukija ...@@ -954,17 +954,22 @@ rfidevent.reader = Lukija
rfidevent.searchuser = Hae k\u00E4ytt\u00E4j\u00E4\u00E4 rfidevent.searchuser = Hae k\u00E4ytt\u00E4j\u00E4\u00E4
rfidevent.tag = T\u00E4gi rfidevent.tag = T\u00E4gi
role.cardtemplate = Korttipohja role.cardtemplate = Korttipohja
role.create = Luo rooli role.create = Luo rooli
role.description = Kuvaus role.description = Kuvaus
role.edit = Muokkaa role.edit = Muokkaa
role.edit.save = Tallenna role.edit.save = Tallenna
role.name = Nimi role.name = Nimi
role.parents = Periytyy role.parents = Periytyy
role.permissionheader = Roolin oikeudet role.permissionheader = Roolin oikeudet
role.savePermissions = Tallenna oikeudet role.savePermissions = Tallenna oikeudet
role.userSelectableRole = K\u00E4ytt\u00E4j\u00E4n valittavissaoleva rooli
roleView.save = Tallenna muutokset
roleView.adduser = Lis\u00E4\u00E4 k\u00E4ytt\u00E4j\u00E4
roleView.hidePermissioneditor = Piilota oikeusasetukset
roleView.members = K\u00E4ytt\u00E4j\u00E4t
roleView.save = Tallenna muutokset
roleView.showPermissioneditor = N\u00E4yt\u00E4 oikeusasetukset
salespoint.edit = Muokkaa salespoint.edit = Muokkaa
salespoint.name = Nimi salespoint.name = Nimi
...@@ -1041,105 +1046,102 @@ sitepage.save = Tallenna ...@@ -1041,105 +1046,102 @@ sitepage.save = Tallenna
sitepagelist.header = Sivuston sis\u00E4ll\u00F6t sitepagelist.header = Sivuston sis\u00E4ll\u00F6t
submenu.NotImplementedYet = Toteuttamatta
submenu.NotImplementedYet = Toteuttamatta submenu.actionlog.messagelist = ActionLog
submenu.actionlog.messagelist = ActionLog submenu.actionlog.taskview = N\u00E4yt\u00E4 toiminnat
submenu.actionlog.taskview = N\u00E4yt\u00E4 toiminnat submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys submenu.admin.adduser.login = Kirjaudu sis\u00E4\u00E4n
submenu.admin.adduser.login = Kirjaudu sis\u00E4\u00E4n submenu.admin.adduser.start = Tervetuloa
submenu.admin.adduser.start = Tervetuloa submenu.admin.adduser.update = P\u00E4ivit\u00E4 profiilikuva
submenu.admin.adduser.update = P\u00E4ivit\u00E4 profiilikuva submenu.admin.incoming.index = Sis\u00E4\u00E4ntulo
submenu.admin.incoming.index = Sis\u00E4\u00E4ntulo submenu.admin.incoming.printCard = Kortin tulostus
submenu.admin.incoming.printCard = Kortin tulostus submenu.admin.info.computerplaces = Konepaikat
submenu.admin.info.computerplaces = Konepaikat submenu.admin.info.general = Yleisi\u00E4 linkkej\u00E4
submenu.admin.info.general = Yleisi\u00E4 linkkej\u00E4 submenu.admin.info.index = Infosivu
submenu.admin.info.index = Infosivu submenu.auth.login = Kirjaudu
submenu.auth.login = Kirjaudu submenu.auth.loginError = Kirjautuminen ep\u00E4onnistui
submenu.auth.loginError = Kirjautuminen ep\u00E4onnistui submenu.auth.loginSucessRedirect = Sis\u00E4\u00E4nkirjautuminen onnistui
submenu.auth.loginSucessRedirect = Sis\u00E4\u00E4nkirjautuminen onnistui submenu.auth.logout = Kirjaudu ulos
submenu.auth.logout = Kirjaudu ulos submenu.auth.logoutResponse = Uloskirjautuminen onnistui
submenu.auth.logoutResponse = Uloskirjautuminen onnistui submenu.auth.sendResetMail = Salasanan palautus
submenu.auth.sendResetMail = Salasanan palautus submenu.bill.billSummary = Laskujen yhteenveto
submenu.bill.billSummary = Laskujen yhteenveto submenu.bill.list = N\u00E4yt\u00E4 omat laskut
submenu.bill.list = N\u00E4yt\u00E4 omat laskut submenu.bill.listAll = Kaikki laskut
submenu.bill.listAll = Kaikki laskut submenu.eventorg.editEvent = Tapahtuman tiedot
submenu.eventorg.editEvent = Tapahtuman tiedot submenu.eventorg.list = Organisaation hallinta
submenu.eventorg.list = Organisaation hallinta submenu.feedback.index = Vituttaako?
submenu.feedback.index = Vituttaako? submenu.foodadmin.createTemplate = Luo tilauspohja
submenu.foodadmin.createTemplate = Luo tilauspohja submenu.foodadmin.listTemplates = Muokkaa tilauspohjia
submenu.foodadmin.listTemplates = Muokkaa tilauspohjia submenu.foodmanager.listFoodwaves = Aktiiviset ruokatilaukset
submenu.foodmanager.listFoodwaves = Aktiiviset ruokatilaukset submenu.foodwave.list = Ruokatilaukset
submenu.foodwave.list = Ruokatilaukset submenu.frontpage = Etusivu
submenu.frontpage = Etusivu submenu.index = Etusivu
submenu.index = Etusivu submenu.info.incoming = Sis\u00E4\u00E4ntulo
submenu.info.incoming = Sis\u00E4\u00E4ntulo submenu.info.index = Infon\u00E4kym\u00E4
submenu.info.index = Infon\u00E4kym\u00E4 submenu.info.shop = Kauppa
submenu.info.shop = Kauppa submenu.lectureadmin.lectureParticipants = Kurssiosallistujat
submenu.license.manageCodes = Hallinnoi lisenssej\u00E4
submenu.license.viewCodes = N\u00E4yt\u00E4 koodit
submenu.map.create = Uusi kartta
submenu.map.list = N\u00E4yt\u00E4 kartat
submenu.networkassociation.index = Assosiaatiot
submenu.orgrole.create = Luo j\u00E4rjest\u00E4j\u00E4rooli
submenu.orgrole.list = J\u00E4rjest\u00E4j\u00E4roolit
submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4
submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t
submenu.place.adminGroups = Omat paikat
submenu.place.adminPlacemap = Konepaikat
submenu.place.editGroup = Muokkaa ryhm\u00E4\u00E4
submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi
submenu.place.myGroups = Omat paikkavaraukset
submenu.place.placemap = Paikkakartta
submenu.poll.index = Kyselyt
submenu.product.create = Uusi tuote
submenu.product.list = Listaa tuotteet
submenu.role.create = Luo rooli
submenu.role.list = N\u00E4yt\u00E4 roolit
submenu.shop.createBill = Osta tuotteita
submenu.shop.listReaders = N\u00E4yt\u00E4 lukijat
submenu.shop.shopToUser = Osta k\u00E4ytt\u00E4j\u00E4lle
submenu.shop.showReaderEvents = Lukijan tapahtumat
submenu.tournaments.admin.index = Katsele ja hallinnoi
submenu.tournaments.index = Listaa turnaukset
submenu.tournaments.myparticipations = Omat ilmoittautumiset
submenu.user.accountEvents = Tilitapahtumat
submenu.user.changePassword = Vaihda salasana
submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4
submenu.user.createCardTemplate = Luo korttiryhm\u00E4
submenu.user.edit = Omat tiedot
submenu.user.foodwave = Ruoka
submenu.user.gameids = Aseta Peli-IDt
submenu.user.invite = Kutsu yst\u00E4vi\u00E4
submenu.user.list = Kaikki k\u00E4ytt\u00E4j\u00E4t
submenu.user.listCardTemplates = Korttiryhm\u00E4t
submenu.user.manageuserlinks = Hallitse k\u00E4ytt\u00E4ji\u00E4
submenu.user.other = Muuta
submenu.user.rolelinks = Hallitse rooleja
submenu.user.sendPicture = L\u00E4het\u00E4 kuva
submenu.user.shop = Kauppaan
submenu.user.userlinks = Muokkaa tietoja
submenu.useradmin.accountEvents = Tunnuksen tapahtumat
submenu.useradmin.create = Luo uusi k\u00E4ytt\u00E4j\u00E4
submenu.useradmin.createCardTemplate = Luo uusi korttipohja
submenu.useradmin.edit = Muokkaa k\u00E4ytt\u00E4j\u00E4\u00E4
submenu.useradmin.foodwaveshop = Ruokatilauskauppa
submenu.useradmin.list = Etsi K\u00E4ytt\u00E4ji\u00E4
submenu.useradmin.listCardTemplates = Listaa korttipohjat
submenu.useradmin.sendPicture = L\u00E4het\u00E4 kuva
submenu.useradmin.showTakePicture = N\u00E4yt\u00E4 webcam
submenu.useradmin.validateUser = Validoi k\u00E4ytt\u00E4j\u00E4
submenu.utils.index = Yll\u00E4pitoty\u00F6kalut
submenu.voting.admincompolist = Kilpailut
submenu.voting.compolist = Kilpailut
submenu.voting.create = Uusi kilpailu
submenu.voting.myEntries = Omat entryt
submenu.voting.submitEntry = L\u00E4het\u00E4 entry
submenu.lectureadmin.manageLectureGroups = Hallinnoi submenu.lectureadmin.manageLectureGroups = Hallinnoi
submenu.lectures.viewLectures = Ilmoittaudu submenu.lectures.viewLectures = Ilmoittaudu
submenu.license.manageCodes = Hallinnoi lisenssej\u00E4
submenu.license.viewCodes = N\u00E4yt\u00E4 koodit
submenu.map.create = Uusi kartta
submenu.map.list = N\u00E4yt\u00E4 kartat
submenu.networkassociation.index = Assosiaatiot
submenu.orgrole.create = Luo j\u00E4rjest\u00E4j\u00E4rooli
submenu.orgrole.list = J\u00E4rjest\u00E4j\u00E4roolit
submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4
submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t
submenu.place.adminGroups = Omat paikat
submenu.place.adminPlacemap = Konepaikat
submenu.place.editGroup = Muokkaa ryhm\u00E4\u00E4
submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi
submenu.place.myGroups = Omat paikkavaraukset
submenu.place.placemap = Paikkakartta
submenu.poll.index = Kyselyt
submenu.product.create = Uusi tuote
submenu.product.list = Listaa tuotteet
submenu.role.create = Luo rooli
submenu.role.list = N\u00E4yt\u00E4 roolit
submenu.shop.createBill = Osta tuotteita
submenu.shop.listReaders = N\u00E4yt\u00E4 lukijat
submenu.shop.shopToUser = Osta k\u00E4ytt\u00E4j\u00E4lle
submenu.shop.showReaderEvents = Lukijan tapahtumat
submenu.tournaments.admin.index = Katsele ja hallinnoi
submenu.tournaments.index = Listaa turnaukset
submenu.tournaments.myparticipations = Omat ilmoittautumiset
submenu.user.accountEvents = Tilitapahtumat
submenu.user.changePassword = Vaihda salasana
submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4
submenu.user.createCardTemplate = Luo korttiryhm\u00E4
submenu.user.edit = Omat tiedot
submenu.user.foodwave = Ruoka
submenu.user.gameids = Aseta Peli-IDt
submenu.user.invite = Kutsu yst\u00E4vi\u00E4
submenu.user.list = Kaikki k\u00E4ytt\u00E4j\u00E4t
submenu.user.listCardTemplates = Korttiryhm\u00E4t
submenu.user.manageuserlinks = Hallitse k\u00E4ytt\u00E4ji\u00E4
submenu.user.other = Muuta
submenu.user.rolelinks = Hallitse rooleja
submenu.user.sendPicture = L\u00E4het\u00E4 kuva
submenu.user.shop = Kauppaan
submenu.user.userlinks = Muokkaa tietoja
submenu.useradmin.accountEvents = Tunnuksen tapahtumat
submenu.useradmin.create = Luo uusi k\u00E4ytt\u00E4j\u00E4
submenu.useradmin.createCardTemplate = Luo uusi korttipohja
submenu.useradmin.edit = Muokkaa k\u00E4ytt\u00E4j\u00E4\u00E4
submenu.useradmin.foodwaveshop = Ruokatilauskauppa
submenu.useradmin.list = Etsi K\u00E4ytt\u00E4ji\u00E4
submenu.useradmin.listCardTemplates = Listaa korttipohjat
submenu.useradmin.sendPicture = L\u00E4het\u00E4 kuva
submenu.useradmin.showTakePicture = N\u00E4yt\u00E4 webcam
submenu.useradmin.validateUser = Validoi k\u00E4ytt\u00E4j\u00E4
submenu.utils.index = Yll\u00E4pitoty\u00F6kalut
submenu.voting.admincompolist = Kilpailut
submenu.voting.compolist = Kilpailut
submenu.voting.create = Uusi kilpailu
submenu.voting.myEntries = Omat entryt
submenu.voting.submitEntry = L\u00E4het\u00E4 entry
subnavi.billing = Laskutus subnavi.billing = Laskutus
subnavi.cards = Kortit subnavi.cards = Kortit
...@@ -1376,6 +1378,7 @@ user.roles = Roolit ...@@ -1376,6 +1378,7 @@ user.roles = Roolit
user.rolesave = Tallenna roolit user.rolesave = Tallenna roolit
user.save = Tallenna user.save = Tallenna
user.saveRoles = Tallenna roolit user.saveRoles = Tallenna roolit
user.saveUserSelectableRoles = Tallenna
user.search = Hae user.search = Hae
user.searchUser = Hae k\u00E4ytt\u00E4j\u00E4\u00E4 user.searchUser = Hae k\u00E4ytt\u00E4j\u00E4\u00E4
user.sendPicture = Kuvan l\u00E4hetys user.sendPicture = Kuvan l\u00E4hetys
...@@ -1390,6 +1393,7 @@ user.superadmin = Superadmin ...@@ -1390,6 +1393,7 @@ user.superadmin = Superadmin
user.thisIsCurrentImage = Nykyinen kuva user.thisIsCurrentImage = Nykyinen kuva
user.town = Kaupunki user.town = Kaupunki
user.uploadimage = L\u00E4het\u00E4 kuva user.uploadimage = L\u00E4het\u00E4 kuva
user.userSelectableRoles = Valitse yksi
user.username = K\u00E4ytt\u00E4j\u00E4tunnus user.username = K\u00E4ytt\u00E4j\u00E4tunnus
user.validate.notUniqueUsername = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus user.validate.notUniqueUsername = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus
user.validateUser.commit = L\u00E4het\u00E4 user.validateUser.commit = L\u00E4het\u00E4
......
...@@ -120,6 +120,7 @@ public class AuthView extends GenericCDIView { ...@@ -120,6 +120,7 @@ public class AuthView extends GenericCDIView {
} }
HttpServletRequest request = getRequest(); HttpServletRequest request = getRequest();
if (request.getUserPrincipal() != null) { if (request.getUserPrincipal() != null) {
logger.info("Principal not empty. need to logout first"); logger.info("Principal not empty. need to logout first");
......
...@@ -54,4 +54,8 @@ public class RoleDataView extends GenericCDIView { ...@@ -54,4 +54,8 @@ public class RoleDataView extends GenericCDIView {
} }
return roles; return roles;
} }
public List<Role> getUserSelectableRoles() {
return rolebean.listUserSelectableRoles();
}
} }
...@@ -94,6 +94,9 @@ public class UserView extends GenericCDIView { ...@@ -94,6 +94,9 @@ public class UserView extends GenericCDIView {
private transient CardTemplateBeanLocal cardBean; private transient CardTemplateBeanLocal cardBean;
private List<Role> usersRoles; private List<Role> usersRoles;
private List<Role> userSelectableRoles = null;
@EJB @EJB
private transient RoleBeanLocal rolebean; private transient RoleBeanLocal rolebean;
@EJB @EJB
...@@ -161,7 +164,7 @@ public class UserView extends GenericCDIView { ...@@ -161,7 +164,7 @@ public class UserView extends GenericCDIView {
/** /**
* This is the user we are currently editing, if that is not found we user * This is the user we are currently editing, if that is not found we use
* current user * current user
* *
* @return * @return
...@@ -188,6 +191,17 @@ public class UserView extends GenericCDIView { ...@@ -188,6 +191,17 @@ public class UserView extends GenericCDIView {
return null; return null;
} }
public List<Role> getUserSelectableRoles() {
if (userSelectableRoles == null && user != null)
{
userSelectableRoles = rolebean.getRoles(getSelectedUser());
}
return userSelectableRoles;
}
public List<Role> getUsersRoles() { public List<Role> getUsersRoles() {
if (usersRoles == null && user != null) if (usersRoles == null && user != null)
{ {
...@@ -327,6 +341,12 @@ public class UserView extends GenericCDIView { ...@@ -327,6 +341,12 @@ public class UserView extends GenericCDIView {
} }
public String saveUser() { public String saveUser() {
if(userSelectableRoles != null) {
saveUserSelectableRoles();
}
logger.info("Saving user"); logger.info("Saving user");
if (permbean.getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY)) { if (permbean.getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY)) {
...@@ -481,6 +501,10 @@ public class UserView extends GenericCDIView { ...@@ -481,6 +501,10 @@ public class UserView extends GenericCDIView {
public void setUsersRoles(List<Role> usersRoles) { public void setUsersRoles(List<Role> usersRoles) {
this.usersRoles = usersRoles; this.usersRoles = usersRoles;
} }
public void setUserSelectableRoles(List<Role> usersRoles) {
this.userSelectableRoles = usersRoles;
}
public String getUsername() { public String getUsername() {
return username; return username;
...@@ -532,4 +556,25 @@ public class UserView extends GenericCDIView { ...@@ -532,4 +556,25 @@ public class UserView extends GenericCDIView {
public void setLayoutview(LayoutView layoutview) { public void setLayoutview(LayoutView layoutview) {
this.layoutview = layoutview; this.layoutview = layoutview;
} }
public String saveUserSelectableRoles()
{
rolebean.saveUserSelectableRoles(user, userSelectableRoles);
userSelectableRoles = null;
return null;
}
public boolean isShowUserSelectableRoles() {
return (rolebean.listUserSelectableRoles().size() >= 1);
}
} }
package fi.codecrew.moya.web.lecture;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.LectureBeanLocal;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.user.UserView;
@Named
@ConversationScoped
public class LectureReportsView extends GenericCDIView {
private static final long serialVersionUID = 1L;
@Inject
UserView userView;
@EJB
LectureBeanLocal lectureBean;
@EJB
EventBeanLocal eventBean;
ListDataModel<LectureGroup> lectureGroups = null;
ListDataModel<Lecture> lectures = null;
ListDataModel<Lecture> participatedLectures = null;
LectureGroup currentLectureGroup;
public void initView() {
if (super.requirePermissions(LecturePermission.MANAGE)) {
super.beginConversation();
}
}
public void refresh() {
this.lectures = null;
}
public boolean isLectureGroupsVisible() {
if(lectureBean.getLectureGroups().size() <= 1)
return false;
return true;
}
public ListDataModel<LectureGroup> getLectureGroups() {
lectureGroups = new ListDataModel<LectureGroup>(lectureBean.getLectureGroups());
return lectureGroups;
}
public void selectCurrentLectureGroup() {
if (lectureGroups != null && lectureGroups.isRowAvailable()) {
currentLectureGroup = lectureGroups.getRowData();
lectures = null;
}
}
public LectureGroup getCurrentLectureGroup() {
List<LectureGroup> groups = lectureBean.getLectureGroups();
if (currentLectureGroup == null && groups.size() > 0) {
currentLectureGroup = groups.get(0);
}
return currentLectureGroup;
}
public ListDataModel<Lecture> getLectures() {
if (currentLectureGroup == null)
return new ListDataModel<Lecture>();
if(lectures == null)
lectures = new ListDataModel<Lecture>(lectureBean.getLecturesByLectureGroup(getCurrentLectureGroup()));
return lectures;
}
public int getCurrentGroupParticipateCount() {
return lectureBean.userLectureSelects(getCurrentLectureGroup(), userView.getCurrentUser());
}
}
...@@ -10,6 +10,7 @@ import javax.inject.Named; ...@@ -10,6 +10,7 @@ import javax.inject.Named;
import fi.codecrew.moya.beans.EventBeanLocal; import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.LectureBeanLocal; import fi.codecrew.moya.beans.LectureBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.apps.LecturePermission; import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.model.Lecture; import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup; import fi.codecrew.moya.model.LectureGroup;
...@@ -31,6 +32,7 @@ public class LectureUserView extends GenericCDIView { ...@@ -31,6 +32,7 @@ public class LectureUserView extends GenericCDIView {
@EJB @EJB
EventBeanLocal eventBean; EventBeanLocal eventBean;
ListDataModel<LectureGroup> lectureGroups = null; ListDataModel<LectureGroup> lectureGroups = null;
ListDataModel<Lecture> lectures = null; ListDataModel<Lecture> lectures = null;
ListDataModel<Lecture> participatedLectures = null; ListDataModel<Lecture> participatedLectures = null;
...@@ -49,6 +51,10 @@ public class LectureUserView extends GenericCDIView { ...@@ -49,6 +51,10 @@ public class LectureUserView extends GenericCDIView {
return false; return false;
return true; return true;
} }
public boolean isParticipateActive() {
return lectureBean.isUserCanParticipate(userView.getCurrentUser());
}
public ListDataModel<LectureGroup> getLectureGroups() { public ListDataModel<LectureGroup> getLectureGroups() {
lectureGroups = new ListDataModel<LectureGroup>(lectureBean.getLectureGroups()); lectureGroups = new ListDataModel<LectureGroup>(lectureBean.getLectureGroups());
...@@ -78,7 +84,8 @@ public class LectureUserView extends GenericCDIView { ...@@ -78,7 +84,8 @@ public class LectureUserView extends GenericCDIView {
if (currentLectureGroup == null) if (currentLectureGroup == null)
return new ListDataModel<Lecture>(); return new ListDataModel<Lecture>();
lectures = new ListDataModel<Lecture>(lectureBean.findAvailableLectures(getCurrentLectureGroup(), userView.getCurrentUser())); if(lectures == null)
lectures = new ListDataModel<Lecture>(lectureBean.findAvailableLectures(getCurrentLectureGroup(), userView.getCurrentUser()));
return lectures; return lectures;
} }
...@@ -90,6 +97,9 @@ public class LectureUserView extends GenericCDIView { ...@@ -90,6 +97,9 @@ public class LectureUserView extends GenericCDIView {
} }
public void participateCurrent() { public void participateCurrent() {
if(!isParticipateActive()) {
return;
}
if (lectures != null && lectures.isRowAvailable()) { if (lectures != null && lectures.isRowAvailable()) {
Lecture lecture = lectures.getRowData(); Lecture lecture = lectures.getRowData();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!