Commit 25c27f86 by Tuomas Riihimäki

Organisation role management ui

1 parent 9914e624
...@@ -23,6 +23,8 @@ import java.util.List; ...@@ -23,6 +23,8 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.codecrew.moya.model.OrgRole; import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User;
@Local @Local
public interface OrgRoleBeanLocal { public interface OrgRoleBeanLocal {
...@@ -35,4 +37,12 @@ public interface OrgRoleBeanLocal { ...@@ -35,4 +37,12 @@ public interface OrgRoleBeanLocal {
void create(OrgRole orgRole); void create(OrgRole orgRole);
OrgRole save(OrgRole orgRole);
OrgRole addRole(User addableUser, OrgRole orgRole);
List<Role> getPossibleEventroles(OrgRole orgRole);
OrgRole addEventRole(Role eventRole, OrgRole orgRole);
} }
...@@ -284,6 +284,19 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -284,6 +284,19 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE products ADD shop_required_role INTEGER", "ALTER TABLE products ADD shop_required_role INTEGER",
"ALTER TABLE products ADD CONSTRAINT FK_products_shop_required_role FOREIGN KEY (shop_required_role) REFERENCES roles (id)", "ALTER TABLE products ADD CONSTRAINT FK_products_shop_required_role FOREIGN KEY (shop_required_role) REFERENCES roles (id)",
}); });
dbUpdates.add(new String[] {
"ALTER TABLE org_roles ADD user_requestable BOOLEAN NOT NULL DEFAULT FALSE",
"ALTER TABLE org_roles ADD notes TEXT",
});
dbUpdates.add(new String[] {
"CREATE TABLE org_role_requests (id INTEGER NOT NULL, handled_notes TEXT, meta json, request_date TIMESTAMPTZ NOT NULL, requeste_handled TIMESTAMPTZ, request_notes TEXT, handler_id INTEGER NOT NULL, requested_role INTEGER NOT NULL, user_id INTEGER NOT NULL, PRIMARY KEY (id))",
"ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_handler_id FOREIGN KEY (handler_id) REFERENCES users (id)",
"ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_requested_role FOREIGN KEY (requested_role) REFERENCES org_roles (id)",
"ALTER TABLE org_role_requests ADD CONSTRAINT FK_org_role_requests_user_id FOREIGN KEY (user_id) REFERENCES users (id)",
});
} }
public BootstrapBean() { public BootstrapBean() {
......
...@@ -23,6 +23,7 @@ import java.util.HashSet; ...@@ -23,6 +23,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
...@@ -30,11 +31,14 @@ import javax.ejb.Stateless; ...@@ -30,11 +31,14 @@ import javax.ejb.Stateless;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.codecrew.moya.facade.OrgRoleFacade;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.OrgRoleBeanLocal;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.facade.OrgRoleFacade;
import fi.codecrew.moya.facade.RoleFacade;
import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.model.OrgRole; import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.utilities.jpa.GenericFacade;
/** /**
* Session Bean implementation class OrgRoleBean * Session Bean implementation class OrgRoleBean
...@@ -44,9 +48,7 @@ import fi.codecrew.moya.model.OrgRole; ...@@ -44,9 +48,7 @@ import fi.codecrew.moya.model.OrgRole;
@DeclareRoles({ UserPermission.S_READ_ORGROLES, UserPermission.S_WRITE_ORGROLES }) @DeclareRoles({ UserPermission.S_READ_ORGROLES, UserPermission.S_WRITE_ORGROLES })
public class OrgRoleBean implements OrgRoleBeanLocal { public class OrgRoleBean implements OrgRoleBeanLocal {
@SuppressWarnings("unused") private static final Logger logger = LoggerFactory.getLogger(OrgRoleBean.class);
private static final Logger logger = LoggerFactory
.getLogger(OrgRoleBean.class);
@EJB @EJB
private EventBeanLocal eventBean; private EventBeanLocal eventBean;
...@@ -54,21 +56,30 @@ public class OrgRoleBean implements OrgRoleBeanLocal { ...@@ -54,21 +56,30 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
@EJB @EJB
private OrgRoleFacade orgRoleFacade; private OrgRoleFacade orgRoleFacade;
@EJB
private RoleBean rolebean;
@EJB
private UserFacade userFacade;
@EJB
private RoleFacade roleFacade;
public OrgRoleBean() { public OrgRoleBean() {
} }
@Override @Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES, })
public List<OrgRole> listOrgRoles() { public List<OrgRole> listOrgRoles() {
return orgRoleFacade.findByOrganizer(eventBean.getCurrentEvent() return orgRoleFacade.findByOrganizer(eventBean.getCurrentEvent().getOrganiser());
.getOrganiser());
} }
@Override @Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES, })
public OrgRole find(Integer id) { public OrgRole find(Integer id) {
return orgRoleFacade.find(id); return orgRoleFacade.find(id);
} }
@Override @Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES, })
public List<OrgRole> getPossibleParents(OrgRole orgRole) { public List<OrgRole> getPossibleParents(OrgRole orgRole) {
List<OrgRole> roleList = orgRoleFacade.findAll(); List<OrgRole> roleList = orgRoleFacade.findAll();
...@@ -88,6 +99,7 @@ public class OrgRoleBean implements OrgRoleBeanLocal { ...@@ -88,6 +99,7 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
return roleList; return roleList;
} }
@RolesAllowed({ UserPermission.S_READ_ORGROLES, })
private List<OrgRole> getAllChilds(OrgRole orgRole, private List<OrgRole> getAllChilds(OrgRole orgRole,
HashSet<OrgRole> checkedRoles) { HashSet<OrgRole> checkedRoles) {
List<OrgRole> returnList = new ArrayList<OrgRole>(); List<OrgRole> returnList = new ArrayList<OrgRole>();
...@@ -107,8 +119,68 @@ public class OrgRoleBean implements OrgRoleBeanLocal { ...@@ -107,8 +119,68 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
} }
@Override @Override
@RolesAllowed({ UserPermission.S_WRITE_ORGROLES })
public void create(OrgRole orgRole) { public void create(OrgRole orgRole) {
orgRoleFacade.create(orgRole); orgRoleFacade.create(orgRole);
} }
@Override
@RolesAllowed({ UserPermission.S_WRITE_ORGROLES })
public OrgRole addRole(User user, OrgRole orgRole) {
orgRole = orgRoleFacade.reload(orgRole);
user = userFacade.reload(user);
if (!orgRole.getUsers().contains(user)) {
orgRole.getUsers().add(user);
}
return orgRole;
}
@Override
@RolesAllowed({ UserPermission.S_WRITE_ORGROLES })
public OrgRole save(OrgRole orgRole) {
orgRole = orgRoleFacade.merge(orgRole);
return orgRole;
}
@Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES })
public List<Role> getPossibleEventroles(OrgRole orgRole) {
orgRole = orgRoleFacade.reload(orgRole);
List<Role> roles = rolebean.listRoles();
if (orgRole != null) {
HashSet<Role> childroles = new HashSet<Role>();
for (Role r : orgRole.getEventRoles()) {
RoleBean.getAllChildren(r, childroles);
}
roles.removeAll(childroles);
}
return roles;
}
@Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES })
public OrgRole addEventRole(Role eventRole, OrgRole orgRole) {
eventRole = roleFacade.reload(eventRole);
orgRole = orgRoleFacade.reload(orgRole);
if (eventRole.getOrgRoles() == null) {
eventRole.setOrgRoles(new ArrayList<>());
}
if (orgRole.getEventRoles() == null) {
orgRole.setEventRoles(new ArrayList<>());
}
if (!orgRole.getEventRoles().contains(orgRole)) {
orgRole.getEventRoles().add(eventRole);
}
if (!eventRole.getOrgRoles().contains(orgRole)) {
eventRole.getOrgRoles().add(orgRole);
}
return orgRole;
}
} }
...@@ -23,8 +23,10 @@ import java.util.List; ...@@ -23,8 +23,10 @@ import java.util.List;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.Table; import javax.persistence.Table;
...@@ -38,119 +40,142 @@ import javax.persistence.UniqueConstraint; ...@@ -38,119 +40,142 @@ import javax.persistence.UniqueConstraint;
@Table(name = "org_roles", uniqueConstraints = { @UniqueConstraint(columnNames = { OrgRole.EVENTORG_ID_COLUMN, OrgRole.NAME_COLUMN }) }) @Table(name = "org_roles", uniqueConstraints = { @UniqueConstraint(columnNames = { OrgRole.EVENTORG_ID_COLUMN, OrgRole.NAME_COLUMN }) })
public class OrgRole extends GenericEntity { public class OrgRole extends GenericEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
protected static final String NAME_COLUMN = "role_name"; protected static final String NAME_COLUMN = "role_name";
protected static final String EVENTORG_ID_COLUMN = "organisation_id"; protected static final String EVENTORG_ID_COLUMN = "organisation_id";
@Column(name = NAME_COLUMN, nullable = false) @Column(name = NAME_COLUMN, nullable = false)
private String name; private String name;
@ManyToMany() @ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "org_role_memberships", @JoinTable(name = "org_role_memberships",
joinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) }, joinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = User.ID_COLUMN) }) inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = User.ID_COLUMN) })
private List<User> users; private List<User> users;
@ManyToMany() @ManyToMany()
@JoinTable(name = "org_role_parents", @JoinTable(name = "org_role_parents",
joinColumns = { @JoinColumn(name = "parent_id", referencedColumnName = OrgRole.ID_COLUMN) }, joinColumns = { @JoinColumn(name = "parent_id", referencedColumnName = OrgRole.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) }) inverseJoinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) })
private List<OrgRole> parents = new ArrayList<OrgRole>(); private List<OrgRole> parents = new ArrayList<OrgRole>();
@ManyToMany(mappedBy = "parents") @ManyToMany(mappedBy = "parents")
private List<OrgRole> children = new ArrayList<OrgRole>(); private List<OrgRole> children = new ArrayList<OrgRole>();
@JoinColumn(nullable = false, name = EVENTORG_ID_COLUMN) @JoinColumn(nullable = false, name = EVENTORG_ID_COLUMN)
@ManyToOne() @ManyToOne()
private EventOrganiser eventOrganisation; private EventOrganiser eventOrganisation;
@Column(nullable = false, name = "manage_organisation") @Column(nullable = false, name = "manage_organisation")
private boolean manageOrganisation = false; private boolean manageOrganisation = false;
@ManyToMany(mappedBy = "orgRoles") @ManyToMany(mappedBy = "orgRoles", fetch = FetchType.LAZY)
private List<Role> eventRoles; private List<Role> eventRoles;
@Column(name = "ldap_role", nullable = false) @Column(name = "ldap_role", nullable = false)
private boolean ldapRole = false; private boolean ldapRole = false;
@Column(name = "ldap_weight", nullable = false) @Column(name = "ldap_weight", nullable = false)
private int ldapWeight = 100; private int ldapWeight = 100;
public boolean isLdapRole() { @Column(nullable = false, name = "user_requestable")
return ldapRole; private boolean userRequestable = false;
}
public void setLdapRole(boolean ldapRole) { @Column(name = "notes")
this.ldapRole = ldapRole; @Lob
} private String notes;
public int getLdapWeight() { public boolean isLdapRole() {
return ldapWeight; return ldapRole;
} }
public void setLdapWeight(int ldapWeight) { public void setLdapRole(boolean ldapRole) {
this.ldapWeight = ldapWeight; this.ldapRole = ldapRole;
} }
public OrgRole() { public int getLdapWeight() {
super(); return ldapWeight;
} }
public List<User> getUsers() { public void setLdapWeight(int ldapWeight) {
return this.users; this.ldapWeight = ldapWeight;
} }
public void setUsers(List<User> users) { public OrgRole() {
this.users = users; super();
} }
public String getName() { public List<User> getUsers() {
return this.name; return this.users;
} }
public void setName(String name) { public void setUsers(List<User> users) {
this.name = name; this.users = users;
} }
public List<OrgRole> getParents() { public String getName() {
return parents; return this.name;
} }
public void setParents(List<OrgRole> parents) { public void setName(String name) {
this.parents = parents; this.name = name;
} }
public List<OrgRole> getChildren() { public List<OrgRole> getParents() {
return children; return parents;
} }
public void setChildren(List<OrgRole> children) { public void setParents(List<OrgRole> parents) {
this.children = children; this.parents = parents;
} }
public List<Role> getEventRoles() { public List<OrgRole> getChildren() {
return eventRoles; return children;
} }
public void setEventRoles(List<Role> eventRoles) { public void setChildren(List<OrgRole> children) {
this.eventRoles = eventRoles; this.children = children;
} }
public EventOrganiser getEventOrganisation() { public EventOrganiser getEventOrganisation() {
return eventOrganisation; return eventOrganisation;
} }
public void setEventOrganisation(EventOrganiser eventOrganisation) { public void setEventOrganisation(EventOrganiser eventOrganisation) {
this.eventOrganisation = eventOrganisation; this.eventOrganisation = eventOrganisation;
} }
public boolean isManageOrganisation() { public boolean isManageOrganisation() {
return manageOrganisation; return manageOrganisation;
} }
public void setManageOrganisation(boolean manageOrganisation) { public void setManageOrganisation(boolean manageOrganisation) {
this.manageOrganisation = manageOrganisation; this.manageOrganisation = manageOrganisation;
} }
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public boolean isUserRequestable() {
return userRequestable;
}
public void setUserRequestable(boolean userRequestable) {
this.userRequestable = userRequestable;
}
public List<Role> getEventRoles() {
return eventRoles;
}
public void setEventRoles(List<Role> eventRoles) {
this.eventRoles = eventRoles;
}
} }
package fi.codecrew.moya.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "org_role_requests")
public class OrgRoleRequest extends GenericEntity {
private static final long serialVersionUID = 4011290481175842105L;
@Column(name = "request_date", nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date requestDate;
@Column(name = "requeste_handled", nullable = true, updatable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date requestHandled;
@ManyToOne()
@JoinColumn(name = "handler_id", nullable = false, updatable = false)
private User handler;
@ManyToOne()
@JoinColumn(name = "user_id", nullable = false)
private User user;
@ManyToOne()
@JoinColumn(name = "requested_role", nullable = false)
private OrgRole requestedRole;
@Lob
@Column(name = "request_notes")
private String requestNotes;
@Lob
@Column(name = "handled_notes")
private String handledNotes;
public Date getRequestDate() {
return requestDate;
}
public void setRequestDate(Date requestDate) {
this.requestDate = requestDate;
}
public Date getRequestHandled() {
return requestHandled;
}
public void setRequestHandled(Date requestHandled) {
this.requestHandled = requestHandled;
}
public User getHandler() {
return handler;
}
public void setHandler(User handler) {
this.handler = handler;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public OrgRole getRequestedRole() {
return requestedRole;
}
public void setRequestedRole(OrgRole requestedRole) {
this.requestedRole = requestedRole;
}
public String getRequestNotes() {
return requestNotes;
}
public void setRequestNotes(String requestNotes) {
this.requestNotes = requestNotes;
}
public String getHandledNotes() {
return handledNotes;
}
public void setHandledNotes(String handledNotes) {
this.handledNotes = handledNotes;
}
}
...@@ -57,7 +57,6 @@ ...@@ -57,7 +57,6 @@
<h:inputText size="50" id="bank2" value="#{eventorgView.eventorg.bankNumber2}" /> <h:inputText size="50" id="bank2" value="#{eventorgView.eventorg.bankNumber2}" />
<h:message for="bank2" /> <h:message for="bank2" />
</h:panelGrid> </h:panelGrid>
<h:commandButton id="commitbtn" action="#{eventorgView.saveEventorg()}" value="#{i18n['eventorg.save']}" /> <h:commandButton id="commitbtn" action="#{eventorgView.saveEventorg()}" value="#{i18n['eventorg.save']}" />
</h:form> </h:form>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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:p="http://primefaces.org/ui" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"> <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:p="http://primefaces.org/ui"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="#{sessionHandler.template}"> <ui:composition template="#{sessionHandler.template}">
<f:metadata> <f:metadata>
...@@ -56,7 +57,7 @@ ...@@ -56,7 +57,7 @@
<p:message for="endTime" /> <p:message for="endTime" />
<p:outputLabel for="themeSwitcher" value="#{i18n['event.theme']}:" /> <p:outputLabel for="themeSwitcher" value="#{i18n['event.theme']}:" />
<p:themeSwitcher value="#{eventorgView.event.theme}" id="themeSwitcher" var="t" style="width: 200px;" > <p:themeSwitcher value="#{eventorgView.event.theme}" id="themeSwitcher" var="t" style="width: 200px;">
<f:selectItem itemLabel="Choose Theme" itemValue="" /> <f:selectItem itemLabel="Choose Theme" itemValue="" />
<f:selectItems value="#{themeSwitcherView.themes}" /> <f:selectItems value="#{themeSwitcherView.themes}" />
</p:themeSwitcher> </p:themeSwitcher>
...@@ -64,7 +65,7 @@ ...@@ -64,7 +65,7 @@
<p:outputLabel for="defaultrole" value="#{i18n['event.defaultRole']}:" /> <p:outputLabel for="defaultrole" value="#{i18n['event.defaultRole']}:" />
<p:selectOneMenu id="defaultrole" converter="#{roleConverter}" value="#{eventorgView.event.defaultRole}" style="width: 200px;"> <p:selectOneMenu id="defaultrole" converter="#{roleConverter}" value="#{eventorgView.event.defaultRole}" style="width: 200px;">
<f:selectItem itemLabel="---" /> <f:selectItem itemLabel="---" />
<f:selectItems var="role" itemLabel="#{role.name}" value="#{eventorgView.event.roles}" /> <f:selectItems var="role" itemLabel="#{role.name}" value="#{eventorgView.event.roles}" />
</p:selectOneMenu> </p:selectOneMenu>
...@@ -75,7 +76,18 @@ ...@@ -75,7 +76,18 @@
</p:fieldset> </p:fieldset>
</h:form> </h:form>
<br /><br /><br /><br /><br />
<p:fieldset legend="Tools" toggleable="true" collapsed="true">
<h:form>
<p:selectOneMenu value="#{eventorgView.copyParty}" converter="#{lanEventConverter}">
<f:selectItems value="#{eventorgView.event.organiser.events}" var="e" itemLabel="#{e.name}" />
</p:selectOneMenu>
<h:commandButton action="#{eventorgView.copySiteContent}"/>
</h:form>
</p:fieldset>
<h2>#{i18n['event.domains.title']}</h2> <h2>#{i18n['event.domains.title']}</h2>
<h:form id="newDomainForm" styleClass="moya_datatable2"> <h:form id="newDomainForm" styleClass="moya_datatable2">
...@@ -95,7 +107,7 @@ ...@@ -95,7 +107,7 @@
</h:form> </h:form>
<h2>#{i18n['event.properties.title']}</h2> <h2>#{i18n['event.properties.title']}</h2>
<h:form id="propertyListForm" styleClass="moya_datatable2"> <h:form id="propertyListForm" styleClass="moya_datatable2">
<h:dataTable var="prop" id="propertyListTable" value="#{eventPropertyView.properties}"> <h:dataTable var="prop" id="propertyListTable" value="#{eventPropertyView.properties}">
<h:column> <h:column>
<f:facet name="header">#{i18n['lanEventProperty.key']}</f:facet> <f:facet name="header">#{i18n['lanEventProperty.key']}</f:facet>
...@@ -131,7 +143,7 @@ ...@@ -131,7 +143,7 @@
<h:message for="propval" /> <h:message for="propval" />
</h:form> </h:form>
<h:form id="propertyEditForm" rendered="#{!empty eventPropertyView.property}" enctype="#{eventPropertyView.property.key.data?'multipart/form-data':''}" styleClass="moya_datatable2"> <h:form id="propertyEditForm" rendered="#{!empty eventPropertyView.property}" enctype="#{eventPropertyView.property.key.data?'multipart/form-data':''}" styleClass="moya_datatable2">
<h:panelGrid columns="3"> <h:panelGrid columns="3">
<h:outputLabel for="key" value="#{i18n['lanEventProperty.key']}" /> <h:outputLabel for="key" value="#{i18n['lanEventProperty.key']}" />
<h:outputText value="#{eventPropertyView.property.key}" id="key" /> <h:outputText value="#{eventPropertyView.property.key}" id="key" />
...@@ -170,7 +182,7 @@ ...@@ -170,7 +182,7 @@
<h2>#{i18n['event.privateProperties.title']}</h2> <h2>#{i18n['event.privateProperties.title']}</h2>
<ui:fragment id="privatePropertyEditor" rendered="#{eventPropertyView.privatePropertyPermission}"> <ui:fragment id="privatePropertyEditor" rendered="#{eventPropertyView.privatePropertyPermission}">
<h:form id="privPropList" styleClass="moya_datatable2"> <h:form id="privPropList" styleClass="moya_datatable2">
<h:dataTable var="prop" value="#{eventPropertyView.privateProperties}"> <h:dataTable var="prop" value="#{eventPropertyView.privateProperties}">
<h:column> <h:column>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <html
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
xmlns:orgrole="http://java.sun.com/jsf/composite/cditools/orgrole" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:c="http://java.sun.com/jsp/jstl/core">
<ui:composition <ui:composition template="#{sessionHandler.template}">
template="#{sessionHandler.template}">
<ui:param name="thispage" value="page.orgRole.create" />
<f:metadata> <f:metadata>
<f:event type="preRenderView" <f:event type="preRenderView" listener="#{orgRoleView.initForCreate()}" />
listener="#{orgRoleView.initForCreate()}" />
</f:metadata> </f:metadata>
<ui:define name="content"> <ui:define name="content">
<orgrole:create /> <h:form>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['orgrole.name']}" />
<h:inputText value="#{orgRoleView.orgRole.name}" />
</h:panelGrid>
<h:commandButton id="createorgrole" value="#{i18n['orgrole.create']}" action="#{orgRoleView.create()}" />
</h:form>
</ui:define> </ui:define>
</ui:composition> </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:orgrole="http://java.sun.com/jsf/composite/cditools/orgrole"
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:event type="preRenderView" listener="#{orgRoleView.initForEdit()}" />
<f:viewParam name="id" value="#{orgRoleView.id}" />
</f:metadata>
<ui:define name="content">
<h:form>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['orgrole.organisation']}" />
<h:outputText value="#{orgRoleView.orgRole.eventOrganisation.organisation}" />
<h:outputText value="#{i18n['orgrole.name']}" />
<h:inputText value="#{orgRoleView.orgRole.name}" />
<h:outputText value="#{i18n['orgrole.parents']}" />
<h:selectManyCheckbox converter="#{orgRoleConverter}" layout="pageDirection" id="orgroleparents" value="#{orgRoleView.orgRole.parents}">
<f:selectItems var="par" itemLabel="#{par.name}" value="#{orgRoleView.possibleParents}" />
</h:selectManyCheckbox>
<h:outputText value="#{i18n['orgrole.userRequestable']}" />
<p:selectBooleanCheckbox value="#{orgRoleView.orgRole.userRequestable}" />
</h:panelGrid>
<p:inputTextarea rows="5" cols="50" value="#{orgRoleView.orgRole.notes}" />
<br />
<h:commandButton id="saveorgrole" value="#{i18n['orgrole.save']}" action="#{orgRoleView.save()}" />
</h:form>
<p:fieldset legend="#{i18n['roleView.eventRoles']}" collapsed="true" toggleable="true">
<h:form id="roleform">
<h:outputText value="#{i18n['orgRoleView.addRole']}" />
<h:selectOneMenu value="#{orgRoleView.eventRole}" converter="#{roleConverter}">
<f:selectItem itemLabel="----" />
<f:selectItems value="#{orgRoleView.availableEventRoles}" var="r" itemLabel="#{r.name}" />
</h:selectOneMenu>
<p:commandButton update=":roleform,:rolelist" action="#{orgRoleView.addEventRole}" value="#{i18n['orgRoleView.addEventRole']}" />
</h:form>
<p:dataTable border="1" id="rolelist" value="#{orgRoleView.orgRole.eventRoles}" var="role">
<p:column rowHeader="#{i18n['role.name']}">
<h:outputText value="#{role.name}" />
</p:column>
<p:column rowHeader="#{i18n['lanEvent.name']}">
<h:outputText value="#{role.event.name}" />
</p:column>
<p:column>
<p:commandButton action="#{orgRoleView.removeRole}"/>
</p:column>
</p:dataTable>
</p:fieldset>
<p:fieldset legend="#{i18n['roleView.members']}" collapsed="true" toggleable="true">
<h:form id="addmember">
<h:outputText value="#{i18n['roleView.adduser']}" />
<p:autoComplete id="useradder" value="#{orgRoleView.addableUser}" completeMethod="#{orgRoleView.searchUser}" converter="#{userConverter}" var="usr" itemValue="#{usr}" itemLabel="#{usr.shortUserDescriptor}">
<p:ajax onerror="location.reload(true);" update=":addmember,:memberlist" event="itemSelect" listener="#{orgRoleView.addUser}" />
</p:autoComplete>
</h:form>
<h:dataTable border="1" id="memberlist" value="#{orgRoleView.orgRole.users}" var="usr">
<h:column rowHeader="#{i18n['user.login']}">
<h:outputText value="#{usr.login}" />
</h:column>
<h:column rowHeader="#{i18n['user.nick']}">
<h:outputText value="#{usr.nick}" />
</h:column>
<h:column rowHeader="#{i18n['user.wholeName']}">
<h:outputText value="#{usr.wholeName}" />
</h:column>
<h:column rowHeader="#{i18n['user.email']}">
<h:outputText value="#{usr.email}" />
</h:column>
</h:dataTable>
</p:fieldset>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:orgrole="http://java.sun.com/jsf/composite/cditools/orgrole">
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
xmlns:orgrole="http://java.sun.com/jsf/composite/cditools/orgrole"
>
<h:body> <h:body>
<ui:composition <ui:composition template="#{sessionHandler.template}">
template="#{sessionHandler.template}">
<ui:param name="thispage" value="page.orgrole.list" /> <ui:param name="thispage" value="page.orgrole.list" />
<f:metadata> <f:metadata>
<f:event type="preRenderView" listener="#{orgRoleView.permissionList()}" /> <f:event type="preRenderView" listener="#{orgRoleView.permissionList()}" />
</f:metadata> </f:metadata>
<ui:define name="title"> <ui:define name="title">
<h1>#{i18n['orgrole.list.title']}</h1> <h1>#{i18n['orgrole.list.title']}</h1>
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<orgrole:list />
<h:form id="orgrolelist" styleClass="moya_datatable2">
<h:dataTable border="1" id="user" value="#{orgRoleDataView.orgRoles}" var="orgRole">
<h:column>
<f:facet name="header">
<h:outputText value="#" />
</f:facet>
<h:outputText value="#{orgRole.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['orgrole.name']}" />
</f:facet>
<h:outputText value="#{orgRole.name}" />
</h:column>
<h:column>
<h:link outcome="/orgrole/edit" value="#{i18n['orgrole.edit']}">
<f:param name="id" value="#{orgRole.id}" />
</h:link>
</h:column>
</h:dataTable>
</h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
</html> </html>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"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"
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:orgrole="http://java.sun.com/jsf/composite/tools/orgrole">
<composite:interface>
</composite:interface>
<composite:implementation>
<h:form>
<ui:include src="form.xhtml" />
<h:commandButton id="createorgrole" value="#{i18n['orgrole.create']}"
action="#{orgRoleView.create()}" />
</h:form>
</composite:implementation>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"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"
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">
<ui:composition>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['orgrole.name']}" />
<h:inputText value="#{orgRoleView.orgRole.name}" />
<h:outputText value="#{i18n['orgrole.parents']}" />
<h:selectManyCheckbox converter="#{orgRoleConverter}"
layout="pageDirection" id="orgroleparents"
value="#{orgRoleView.orgRole.parents}">
<f:selectItems var="par" itemLabel="#{par.name}"
value="#{orgRoleView.possibleParents}" />
</h:selectManyCheckbox>
</h:panelGrid>
</ui:composition>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"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"
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">
<composite:interface>
</composite:interface>
<composite:implementation>
<h:form id="orgrolelist" styleClass="moya_datatable2">
<h:dataTable border="1" id="user" value="#{orgRoleDataView.orgRoles}"
var="orgRole">
<h:column>
<f:facet name="header">
<h:outputText value="#" />
</f:facet>
<h:outputText value="#{orgRole.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['orgrole.name']}" />
</f:facet>
<h:outputText value="#{orgRole.name}" />
</h:column>
<h:column>
<h:link outcome="/orgrole/edit" value="#{i18n['orgrole.edit']}">
<f:param name="orgroleid" value="#{orgRole.id}" />
</h:link>
</h:column>
</h:dataTable>
</h:form>
</composite:implementation>
</html>
\ No newline at end of file
...@@ -18,16 +18,27 @@ ...@@ -18,16 +18,27 @@
*/ */
package fi.codecrew.moya.web.cdiview.user; package fi.codecrew.moya.web.cdiview.user;
import java.util.HashSet;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.EventBeanLocal; import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.OrgRoleBeanLocal; import fi.codecrew.moya.beans.OrgRoleBeanLocal;
import fi.codecrew.moya.beans.RoleBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.OrgRole; import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.util.UserSearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
@ConversationScoped @ConversationScoped
...@@ -37,17 +48,39 @@ public class OrgRoleView extends GenericCDIView { ...@@ -37,17 +48,39 @@ public class OrgRoleView extends GenericCDIView {
private static final long serialVersionUID = -2492481531713504212L; private static final long serialVersionUID = -2492481531713504212L;
private OrgRole orgRole; private OrgRole orgRole;
private Integer id;
@EJB @EJB
private transient OrgRoleBeanLocal orgRoleBean; private transient OrgRoleBeanLocal orgRoleBean;
@EJB @EJB
private transient EventBeanLocal eventBean; private transient EventBeanLocal eventBean;
@EJB
private transient UserBeanLocal userbean;
@EJB
private transient RoleBeanLocal rolebean;
private User addableUser;
private Role eventRole;
private static final Logger logger = LoggerFactory.getLogger(OrgRoleView.class);
public void permissionList() { public void permissionList() {
requirePermissions(permbean.hasPermission(UserPermission.READ_ORGROLES)); requirePermissions(permbean.hasPermission(UserPermission.READ_ORGROLES));
} }
public List<Role> getAvailableEventRoles() {
List<Role> ret = orgRoleBean.getPossibleEventroles(orgRole);
return ret;
}
public String addEventRole() {
orgRole = orgRoleBean.addEventRole(eventRole, orgRole);
eventRole = null;
return null;
}
public void initForCreate() { public void initForCreate() {
if (requirePermissions(permbean.hasPermission(UserPermission.WRITE_ORGROLES))) { if (requirePermissions(permbean.hasPermission(UserPermission.WRITE_ORGROLES))) {
OrgRole role = new OrgRole(); OrgRole role = new OrgRole();
...@@ -57,12 +90,48 @@ public class OrgRoleView extends GenericCDIView { ...@@ -57,12 +90,48 @@ public class OrgRoleView extends GenericCDIView {
} }
} }
public String create() public void initForEdit() {
if (requirePermissions(permbean.hasPermission(UserPermission.WRITE_ORGROLES))) {
orgRole = orgRoleBean.find(id);
super.beginConversation();
}
}
public List<User> searchUser(String user)
{
// By default this returns only 20 first results.
UserSearchQuery usq = new UserSearchQuery();
usq.setSearch(user);
usq.setOnlyThisEvent(false);
SearchResult<User> ret = userbean.getUsers(usq);
return ret.getResults();
}
public void addUser()
{ {
logger.info("Adding user {} to orgrole {}", addableUser, orgRole);
orgRole = orgRoleBean.addRole(addableUser, orgRole);
addableUser = null;
}
public String create() {
orgRoleBean.create(orgRole); orgRoleBean.create(orgRole);
return "edit"; return "edit";
} }
public String save() {
orgRole = orgRoleBean.save(orgRole);
return "edit";
}
public User getAddableUser() {
return addableUser;
}
public void setAddableUser(User addableUser) {
this.addableUser = addableUser;
}
public OrgRole getOrgRole() { public OrgRole getOrgRole() {
return orgRole; return orgRole;
} }
...@@ -75,4 +144,20 @@ public class OrgRoleView extends GenericCDIView { ...@@ -75,4 +144,20 @@ public class OrgRoleView extends GenericCDIView {
return orgRoleBean.getPossibleParents(getOrgRole()); return orgRoleBean.getPossibleParents(getOrgRole());
} }
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Role getEventRole() {
return eventRole;
}
public void setEventRole(Role eventRole) {
this.eventRole = eventRole;
}
} }
...@@ -822,8 +822,12 @@ org.hibernate.validator.constraints.Range.message = must be between {min} and {m ...@@ -822,8 +822,12 @@ org.hibernate.validator.constraints.Range.message = must be between {min} and {m
orgrole.create = Create orgrole.create = Create
orgrole.edit = Edit orgrole orgrole.edit = Edit orgrole
orgrole.list.title = Organization role list orgrole.list.title = Organization role list
orgrole.members.header = Members
orgrole.name = Name orgrole.name = Name
orgrole.orgainisation = Organisation
orgrole.parents = Parent orgrole.parents = Parent
orgrole.save = Save
orgrole.userRequestable = User requestable role
page.account.edit.header = Edit account events page.account.edit.header = Edit account events
page.account.list.header = Account events page.account.list.header = Account events
...@@ -1160,6 +1164,7 @@ role.userSelectableRole = User selectable role ...@@ -1160,6 +1164,7 @@ role.userSelectableRole = User selectable role
role.write = (W) role.write = (W)
roleView.adduser = Add user roleView.adduser = Add user
roleView.eventRoles = Eventroles
roleView.hidePermissioneditor = Hide permissioneditor roleView.hidePermissioneditor = Hide permissioneditor
roleView.members = Users roleView.members = Users
roleView.save = Save changes roleView.save = Save changes
......
...@@ -833,8 +833,12 @@ org.hibernate.validator.constraints.Range.message = must be between {min} and {m ...@@ -833,8 +833,12 @@ org.hibernate.validator.constraints.Range.message = must be between {min} and {m
orgrole.create = Luo orgrole.create = Luo
orgrole.edit = Muokkaa j\u00E4rjest\u00E4j\u00E4roolia orgrole.edit = Muokkaa j\u00E4rjest\u00E4j\u00E4roolia
orgrole.list.title = Lista organisaation rooleista orgrole.list.title = Lista organisaation rooleista
orgrole.members.header = Ryhm\u00E4n j\u00E4senet
orgrole.name = Nimi orgrole.name = Nimi
orgrole.orgainisation = Organisaatio
orgrole.parents = Periytyy orgrole.parents = Periytyy
orgrole.save = Tallenna
orgrole.userRequestable = K\u00E4ytt\u00E4j\u00E4n haettavissa
page.account.edit.header = Muokkaa tilitapahtumia page.account.edit.header = Muokkaa tilitapahtumia
page.account.list.header = Tilitapahtumat page.account.list.header = Tilitapahtumat
...@@ -1144,6 +1148,7 @@ role.savePermissions = Tallenna oikeudet ...@@ -1144,6 +1148,7 @@ role.savePermissions = Tallenna oikeudet
role.userSelectableRole = K\u00E4ytt\u00E4j\u00E4n valittavissaoleva rooli role.userSelectableRole = K\u00E4ytt\u00E4j\u00E4n valittavissaoleva rooli
roleView.adduser = Lis\u00E4\u00E4 k\u00E4ytt\u00E4j\u00E4 roleView.adduser = Lis\u00E4\u00E4 k\u00E4ytt\u00E4j\u00E4
roleView.eventRoles = Tapahtumaroolit
roleView.hidePermissioneditor = Piilota oikeusasetukset roleView.hidePermissioneditor = Piilota oikeusasetukset
roleView.members = K\u00E4ytt\u00E4j\u00E4t roleView.members = K\u00E4ytt\u00E4j\u00E4t
roleView.save = Tallenna muutokset roleView.save = Tallenna muutokset
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!