Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserRolesSaveAction.java =================================================================== diff -u -r7d91e93ee10b2f84a9a7cc6b83b0cacde0f7affc -r9771e3b0f4bd5fa446d2c7b19604a958c1fb3aaa --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserRolesSaveAction.java (.../UserRolesSaveAction.java) (revision 7d91e93ee10b2f84a9a7cc6b83b0cacde0f7affc) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserRolesSaveAction.java (.../UserRolesSaveAction.java) (revision 9771e3b0f4bd5fa446d2c7b19604a958c1fb3aaa) @@ -24,7 +24,6 @@ /* $Id$ */ package org.lamsfoundation.lams.admin.web; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -42,7 +41,6 @@ import org.apache.struts.action.DynaActionForm; import org.lamsfoundation.lams.admin.service.AdminServiceProxy; import org.lamsfoundation.lams.usermanagement.Organisation; -import org.lamsfoundation.lams.usermanagement.OrganisationType; import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; @@ -101,20 +99,9 @@ request.setAttribute("fullName", user.getFullName()); return mapping.findForward("userroles"); } + + service.setRolesForUserOrganisation(user, org, (List)Arrays.asList(roles)); - // if user is to be added to a class, make user a member of parent course also if not already - List orgs = new ArrayList(); - orgs.add(org); - OrganisationType orgType = org.getOrganisationType(); - Organisation parentOrg = org.getParentOrganisation(); - if (orgType.getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE) - && service.getUserOrganisation(userId, parentOrg.getOrganisationId())==null) { - orgs.add(parentOrg); - } - for (Organisation o : orgs) { - service.setRolesForUserOrganisation(user, o, (List)Arrays.asList(roles)); - } - return mapping.findForward("userlist"); } Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r4c272618da715b9f814eb81630e92abf2ef1a736 -r9771e3b0f4bd5fa446d2c7b19604a958c1fb3aaa Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r4c272618da715b9f814eb81630e92abf2ef1a736 -r9771e3b0f4bd5fa446d2c7b19604a958c1fb3aaa --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 4c272618da715b9f814eb81630e92abf2ef1a736) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 9771e3b0f4bd5fa446d2c7b19604a958c1fb3aaa) @@ -38,7 +38,6 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.learningdesign.dao.IGroupDAO; -import org.lamsfoundation.lams.usermanagement.dao.IRoleDAO; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.OrganisationType; import org.lamsfoundation.lams.usermanagement.Role; @@ -49,6 +48,7 @@ import org.lamsfoundation.lams.usermanagement.Workspace; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; import org.lamsfoundation.lams.usermanagement.WorkspaceWorkspaceFolder; +import org.lamsfoundation.lams.usermanagement.dao.IRoleDAO; import org.lamsfoundation.lams.usermanagement.dto.OrganisationDTO; import org.lamsfoundation.lams.usermanagement.dto.OrganisationDTOFactory; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -659,6 +659,12 @@ Set uos = org.getUserOrganisations(); uos.add(uo); } + + // if user is to be added to a class, make user a member of parent course also if not already + if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE) + && getUserOrganisation(user.getUserId(), org.getParentOrganisation().getOrganisationId())==null) { + setRolesForUserOrganisation(user, org.getParentOrganisation(), rolesList); + } List rolesCopy = new ArrayList(); rolesCopy.addAll(rolesList); @@ -687,18 +693,55 @@ Role role = (Role)findById(Role.class, Integer.parseInt(roleId)); UserOrganisationRole uor = new UserOrganisationRole(uo, role); save(uor); - log.debug("setting role: "+role.getName()); + log.debug("setting role: "+role.getName()+" in organisation: "+org.getName()); uors.add(uor); + // when a user gets these roles, they need a workspace if (role.getName().equals(Role.AUTHOR) || role.getName().equals(Role.AUTHOR_ADMIN) || role.getName().equals(Role.SYSADMIN)) { if (user.getWorkspace()==null) createWorkspaceForUser(user); } + // when a user becomes group manager, they need monitor role in subgroups + if (role.getName().equals(Role.COURSE_MANAGER)) { + if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.COURSE_TYPE)) { + setMonitorForGroupManager(user, org.getChildOrganisations()); + } + } } uo.setUserOrganisationRoles(uors); save(user); } + + private void setMonitorForGroupManager(User user, Set childOrgs) { + for (Object o : childOrgs) { + Organisation org = (Organisation)o; + + // add user to user organisation if doesn't exist + UserOrganisation uo = getUserOrganisation(user.getUserId(), org.getOrganisationId()); + if (uo == null) { + uo = new UserOrganisation(user, org); + save(uo); + Set uos = org.getUserOrganisations(); + uos.add(uo); + log.debug("added "+user.getLogin()+" to "+org.getName()); + } + + Set uors = uo.getUserOrganisationRoles(); + if (uors!=null && !uors.isEmpty()) { + for (UserOrganisationRole uor : uors) { + if (uor.getRole().getName().equals(Role.MONITOR)) { + return; + } + } + } + UserOrganisationRole monitor = new UserOrganisationRole(uo, + (Role)findById(Role.class, Role.ROLE_MONITOR)); + uo.addUserOrganisationRole(monitor); + log.debug("setting role: "+monitor.getRole().getName()+" in organisation: "+org.getName()); + save(uo); + } + } public List filterRoles(List rolelist, Boolean isSysadmin, OrganisationType orgType) { List allRoles = new ArrayList();