Commit 4a56db43 by Juho Juopperi

Merge branch 'eventorgrolerequest' into 'master'

Organisation Role management UI

Fix organisation role creation and update UI.

See merge request !268
2 parents 2b755c5c 25c27f86
......@@ -23,6 +23,8 @@ import java.util.List;
import javax.ejb.Local;
import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User;
@Local
public interface OrgRoleBeanLocal {
......@@ -35,4 +37,12 @@ public interface OrgRoleBeanLocal {
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 {
"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)",
});
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() {
......
......@@ -23,6 +23,7 @@ import java.util.HashSet;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
......@@ -30,11 +31,14 @@ import javax.ejb.Stateless;
import org.slf4j.Logger;
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.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.Role;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.utilities.jpa.GenericFacade;
/**
* Session Bean implementation class OrgRoleBean
......@@ -44,9 +48,7 @@ import fi.codecrew.moya.model.OrgRole;
@DeclareRoles({ UserPermission.S_READ_ORGROLES, UserPermission.S_WRITE_ORGROLES })
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
private EventBeanLocal eventBean;
......@@ -54,21 +56,30 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
@EJB
private OrgRoleFacade orgRoleFacade;
@EJB
private RoleBean rolebean;
@EJB
private UserFacade userFacade;
@EJB
private RoleFacade roleFacade;
public OrgRoleBean() {
}
@Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES, })
public List<OrgRole> listOrgRoles() {
return orgRoleFacade.findByOrganizer(eventBean.getCurrentEvent()
.getOrganiser());
return orgRoleFacade.findByOrganizer(eventBean.getCurrentEvent().getOrganiser());
}
@Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES, })
public OrgRole find(Integer id) {
return orgRoleFacade.find(id);
}
@Override
@RolesAllowed({ UserPermission.S_READ_ORGROLES, })
public List<OrgRole> getPossibleParents(OrgRole orgRole) {
List<OrgRole> roleList = orgRoleFacade.findAll();
......@@ -88,6 +99,7 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
return roleList;
}
@RolesAllowed({ UserPermission.S_READ_ORGROLES, })
private List<OrgRole> getAllChilds(OrgRole orgRole,
HashSet<OrgRole> checkedRoles) {
List<OrgRole> returnList = new ArrayList<OrgRole>();
......@@ -107,8 +119,68 @@ public class OrgRoleBean implements OrgRoleBeanLocal {
}
@Override
@RolesAllowed({ UserPermission.S_WRITE_ORGROLES })
public void create(OrgRole 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;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
......@@ -38,119 +40,142 @@ import javax.persistence.UniqueConstraint;
@Table(name = "org_roles", uniqueConstraints = { @UniqueConstraint(columnNames = { OrgRole.EVENTORG_ID_COLUMN, OrgRole.NAME_COLUMN }) })
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 EVENTORG_ID_COLUMN = "organisation_id";
protected static final String NAME_COLUMN = "role_name";
protected static final String EVENTORG_ID_COLUMN = "organisation_id";
@Column(name = NAME_COLUMN, nullable = false)
private String name;
@Column(name = NAME_COLUMN, nullable = false)
private String name;
@ManyToMany()
@JoinTable(name = "org_role_memberships",
joinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = User.ID_COLUMN) })
private List<User> users;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "org_role_memberships",
joinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = User.ID_COLUMN) })
private List<User> users;
@ManyToMany()
@JoinTable(name = "org_role_parents",
joinColumns = { @JoinColumn(name = "parent_id", referencedColumnName = OrgRole.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) })
private List<OrgRole> parents = new ArrayList<OrgRole>();
@ManyToMany()
@JoinTable(name = "org_role_parents",
joinColumns = { @JoinColumn(name = "parent_id", referencedColumnName = OrgRole.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) })
private List<OrgRole> parents = new ArrayList<OrgRole>();
@ManyToMany(mappedBy = "parents")
private List<OrgRole> children = new ArrayList<OrgRole>();
@ManyToMany(mappedBy = "parents")
private List<OrgRole> children = new ArrayList<OrgRole>();
@JoinColumn(nullable = false, name = EVENTORG_ID_COLUMN)
@ManyToOne()
private EventOrganiser eventOrganisation;
@JoinColumn(nullable = false, name = EVENTORG_ID_COLUMN)
@ManyToOne()
private EventOrganiser eventOrganisation;
@Column(nullable = false, name = "manage_organisation")
private boolean manageOrganisation = false;
@Column(nullable = false, name = "manage_organisation")
private boolean manageOrganisation = false;
@ManyToMany(mappedBy = "orgRoles")
private List<Role> eventRoles;
@ManyToMany(mappedBy = "orgRoles", fetch = FetchType.LAZY)
private List<Role> eventRoles;
@Column(name = "ldap_role", nullable = false)
private boolean ldapRole = false;
@Column(name = "ldap_role", nullable = false)
private boolean ldapRole = false;
@Column(name = "ldap_weight", nullable = false)
private int ldapWeight = 100;
@Column(name = "ldap_weight", nullable = false)
private int ldapWeight = 100;
public boolean isLdapRole() {
return ldapRole;
}
@Column(nullable = false, name = "user_requestable")
private boolean userRequestable = false;
public void setLdapRole(boolean ldapRole) {
this.ldapRole = ldapRole;
}
@Column(name = "notes")
@Lob
private String notes;
public int getLdapWeight() {
return ldapWeight;
}
public boolean isLdapRole() {
return ldapRole;
}
public void setLdapWeight(int ldapWeight) {
this.ldapWeight = ldapWeight;
}
public void setLdapRole(boolean ldapRole) {
this.ldapRole = ldapRole;
}
public OrgRole() {
super();
}
public int getLdapWeight() {
return ldapWeight;
}
public List<User> getUsers() {
return this.users;
}
public void setLdapWeight(int ldapWeight) {
this.ldapWeight = ldapWeight;
}
public void setUsers(List<User> users) {
this.users = users;
}
public OrgRole() {
super();
}
public String getName() {
return this.name;
}
public List<User> getUsers() {
return this.users;
}
public void setName(String name) {
this.name = name;
}
public void setUsers(List<User> users) {
this.users = users;
}
public List<OrgRole> getParents() {
return parents;
}
public String getName() {
return this.name;
}
public void setParents(List<OrgRole> parents) {
this.parents = parents;
}
public void setName(String name) {
this.name = name;
}
public List<OrgRole> getChildren() {
return children;
}
public List<OrgRole> getParents() {
return parents;
}
public void setChildren(List<OrgRole> children) {
this.children = children;
}
public void setParents(List<OrgRole> parents) {
this.parents = parents;
}
public List<Role> getEventRoles() {
return eventRoles;
}
public List<OrgRole> getChildren() {
return children;
}
public void setEventRoles(List<Role> eventRoles) {
this.eventRoles = eventRoles;
}
public void setChildren(List<OrgRole> children) {
this.children = children;
}
public EventOrganiser getEventOrganisation() {
return eventOrganisation;
}
public EventOrganiser getEventOrganisation() {
return eventOrganisation;
}
public void setEventOrganisation(EventOrganiser eventOrganisation) {
this.eventOrganisation = eventOrganisation;
}
public void setEventOrganisation(EventOrganiser eventOrganisation) {
this.eventOrganisation = eventOrganisation;
}
public boolean isManageOrganisation() {
return manageOrganisation;
}
public boolean isManageOrganisation() {
return manageOrganisation;
}
public void setManageOrganisation(boolean manageOrganisation) {
this.manageOrganisation = manageOrganisation;
}
public void setManageOrganisation(boolean 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 @@
<h:inputText size="50" id="bank2" value="#{eventorgView.eventorg.bankNumber2}" />
<h:message for="bank2" />
</h:panelGrid>
<h:commandButton id="commitbtn" action="#{eventorgView.saveEventorg()}" value="#{i18n['eventorg.save']}" />
</h:form>
......
<!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: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>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
......@@ -56,7 +57,7 @@
<p:message for="endTime" />
<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:selectItems value="#{themeSwitcherView.themes}" />
</p:themeSwitcher>
......@@ -64,7 +65,7 @@
<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:selectItems var="role" itemLabel="#{role.name}" value="#{eventorgView.event.roles}" />
</p:selectOneMenu>
......@@ -75,7 +76,18 @@
</p:fieldset>
</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>
<h:form id="newDomainForm" styleClass="moya_datatable2">
......@@ -95,7 +107,7 @@
</h:form>
<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:column>
<f:facet name="header">#{i18n['lanEventProperty.key']}</f:facet>
......@@ -131,7 +143,7 @@
<h:message for="propval" />
</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:outputLabel for="key" value="#{i18n['lanEventProperty.key']}" />
<h:outputText value="#{eventPropertyView.property.key}" id="key" />
......@@ -170,7 +182,7 @@
<h2>#{i18n['event.privateProperties.title']}</h2>
<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:column>
......
<!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"
<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">
<ui:composition
template="#{sessionHandler.template}">
<ui:param name="thispage" value="page.orgRole.create" />
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView"
listener="#{orgRoleView.initForCreate()}" />
<f:event type="preRenderView" listener="#{orgRoleView.initForCreate()}" />
</f:metadata>
<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: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
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui"
xmlns:orgrole="http://java.sun.com/jsf/composite/cditools/orgrole"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui"
xmlns:orgrole="http://java.sun.com/jsf/composite/cditools/orgrole">
<h:body>
<ui:composition
template="#{sessionHandler.template}">
<ui:composition template="#{sessionHandler.template}">
<ui:param name="thispage" value="page.orgrole.list" />
<f:metadata>
<f:event type="preRenderView" listener="#{orgRoleView.permissionList()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['orgrole.list.title']}</h1>
<h1>#{i18n['orgrole.list.title']}</h1>
</ui:define>
<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:composition>
</h:body>
</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 @@
*/
package fi.codecrew.moya.web.cdiview.user;
import java.util.HashSet;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.EventBeanLocal;
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.model.EventUser;
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;
@ConversationScoped
......@@ -37,17 +48,39 @@ public class OrgRoleView extends GenericCDIView {
private static final long serialVersionUID = -2492481531713504212L;
private OrgRole orgRole;
private Integer id;
@EJB
private transient OrgRoleBeanLocal orgRoleBean;
@EJB
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() {
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() {
if (requirePermissions(permbean.hasPermission(UserPermission.WRITE_ORGROLES))) {
OrgRole role = new OrgRole();
......@@ -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);
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() {
return orgRole;
}
......@@ -75,4 +144,20 @@ public class OrgRoleView extends GenericCDIView {
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
orgrole.create = Create
orgrole.edit = Edit orgrole
orgrole.list.title = Organization role list
orgrole.members.header = Members
orgrole.name = Name
orgrole.orgainisation = Organisation
orgrole.parents = Parent
orgrole.save = Save
orgrole.userRequestable = User requestable role
page.account.edit.header = Edit account events
page.account.list.header = Account events
......@@ -1160,6 +1164,7 @@ role.userSelectableRole = User selectable role
role.write = (W)
roleView.adduser = Add user
roleView.eventRoles = Eventroles
roleView.hidePermissioneditor = Hide permissioneditor
roleView.members = Users
roleView.save = Save changes
......
......@@ -833,8 +833,12 @@ org.hibernate.validator.constraints.Range.message = must be between {min} and {m
orgrole.create = Luo
orgrole.edit = Muokkaa j\u00E4rjest\u00E4j\u00E4roolia
orgrole.list.title = Lista organisaation rooleista
orgrole.members.header = Ryhm\u00E4n j\u00E4senet
orgrole.name = Nimi
orgrole.orgainisation = Organisaatio
orgrole.parents = Periytyy
orgrole.save = Tallenna
orgrole.userRequestable = K\u00E4ytt\u00E4j\u00E4n haettavissa
page.account.edit.header = Muokkaa tilitapahtumia
page.account.list.header = Tilitapahtumat
......@@ -1144,6 +1148,7 @@ role.savePermissions = Tallenna oikeudet
role.userSelectableRole = K\u00E4ytt\u00E4j\u00E4n valittavissaoleva rooli
roleView.adduser = Lis\u00E4\u00E4 k\u00E4ytt\u00E4j\u00E4
roleView.eventRoles = Tapahtumaroolit
roleView.hidePermissioneditor = Piilota oikeusasetukset
roleView.members = K\u00E4ytt\u00E4j\u00E4t
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!