Index: lams_central/src/java/org/lamsfoundation/lams/web/planner/PedagogicalPlannerAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/planner/PedagogicalPlannerAction.java,v diff -u -r1.29 -r1.30 --- lams_central/src/java/org/lamsfoundation/lams/web/planner/PedagogicalPlannerAction.java 4 Jan 2010 05:48:40 -0000 1.29 +++ lams_central/src/java/org/lamsfoundation/lams/web/planner/PedagogicalPlannerAction.java 8 Jan 2010 03:26:47 -0000 1.30 @@ -1647,23 +1647,35 @@ Vector potentialUsersVector = getUserManagementService().getUsersFromOrganisationByRole(orgId, Role.AUTHOR_ADMIN, false, true); + // list existing users (inherited role from parent nodes) + Set allInheritedUsers = getPedagogicalPlannerDAO().getInheritedNodeUsers(nodeUid, Role.ROLE_AUTHOR_ADMIN); + ArrayList filteredInheritedUsers = new ArrayList(); + for (Object o : allInheritedUsers) { + User u = (User) o; + // filter existing users of the actual node + if (existingUsers.contains(u)) { + continue; + } + filteredInheritedUsers.add(u); + } + // filter existing users from list of potential users - List potentialUsers = new ArrayList(); + ArrayList potentialUsers = new ArrayList(); for (Object o : potentialUsersVector) { User u = (User) o; - if (existingUsers.contains(u)) { + if (existingUsers.contains(u) || allInheritedUsers.contains(u)) { continue; } // filter self if (StringUtils.equals(u.getLogin(), request.getRemoteUser())) { continue; } potentialUsers.add(u); - // TODO filter nodeEditor of parent node } request.setAttribute("existingUsers", existingUsers); request.setAttribute("potentialUsers", potentialUsers); + request.setAttribute("inheritedUsers", filteredInheritedUsers); return mapping.findForward("editAuthors"); } else { Index: lams_common/src/java/org/lamsfoundation/lams/planner/dao/PedagogicalPlannerDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/planner/dao/PedagogicalPlannerDAO.java,v diff -u -r1.5 -r1.6 --- lams_common/src/java/org/lamsfoundation/lams/planner/dao/PedagogicalPlannerDAO.java 17 Dec 2009 06:29:39 -0000 1.5 +++ lams_common/src/java/org/lamsfoundation/lams/planner/dao/PedagogicalPlannerDAO.java 8 Jan 2010 03:26:47 -0000 1.6 @@ -24,6 +24,7 @@ package org.lamsfoundation.lams.planner.dao; import java.util.List; +import java.util.Set; import org.lamsfoundation.lams.planner.PedagogicalPlannerSequenceNode; @@ -46,6 +47,8 @@ List getNodeUsers(Long nodeUid, Integer roleId); + Set getInheritedNodeUsers(Long nodeUid, Integer roleId); + void saveNodeRole(Integer userId, Long nodeUid, Integer roleId); void removeNodeRole(Integer userId, Long nodeUid, Integer roleId); Index: lams_common/src/java/org/lamsfoundation/lams/planner/dao/hibernate/PedagogicalPlannerDAOHibernate.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/planner/dao/hibernate/PedagogicalPlannerDAOHibernate.java,v diff -u -r1.8 -r1.9 --- lams_common/src/java/org/lamsfoundation/lams/planner/dao/hibernate/PedagogicalPlannerDAOHibernate.java 4 Jan 2010 03:13:52 -0000 1.8 +++ lams_common/src/java/org/lamsfoundation/lams/planner/dao/hibernate/PedagogicalPlannerDAOHibernate.java 8 Jan 2010 03:26:47 -0000 1.9 @@ -23,6 +23,7 @@ /* $$Id$$ */ package org.lamsfoundation.lams.planner.dao.hibernate; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -54,6 +55,7 @@ + " AS n WHERE ((? IS NULL AND n.parent=NULL) OR n.parent.uid=?) AND n.order<=? ORDER BY n.order DESC"; private static final String GET_PLANNER_NODE_ROLE = "FROM " + PedagogicalPlannerNodeRole.class.getName() + " WHERE user.userId=? AND node.uid=? AND role.roleId=?"; + // TODO include inherited users private static final String GET_PLANNER_NODE_ROLE_USERS = "SELECT p.user FROM " + PedagogicalPlannerNodeRole.class.getName() + " AS p WHERE p.node.uid=? AND p.role.roleId=?"; @@ -154,6 +156,19 @@ new Object[] { nodeUid, roleId }); } + public Set getInheritedNodeUsers(Long nodeUid, Integer roleId) { + HashSet users = new HashSet(); // use set to avoid duplicates + + PedagogicalPlannerSequenceNode node = getByUid(nodeUid); + while (node.getParent() != null) { + PedagogicalPlannerSequenceNode parent = node.getParent(); + users.addAll(getNodeUsers(parent.getUid(), roleId)); + node = parent; + } + + return users; + } + public void saveNodeRole(Integer userId, Long nodeUid, Integer roleId) { PedagogicalPlannerSequenceNode node = getByUid(nodeUid); User user = (User) getHibernateTemplate().get(User.class, userId);