Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -re13e23fd405b029e75a3b1895f90cf4cfe9d30ef -r197b20b70e857ae38790ebde37e29214a2a2c46e --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision e13e23fd405b029e75a3b1895f90cf4cfe9d30ef) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 197b20b70e857ae38790ebde37e29214a2a2c46e) @@ -707,23 +707,23 @@ } uo.setUserOrganisationRoles(uors); save(user); - // make sure group managers have monitor in each subgroup + // make sure group managers have monitor and learner in each subgroup checkGroupManager(user, org); } private void checkGroupManager(User user, Organisation org) { if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.COURSE_TYPE)) { if (hasRoleInOrganisation(user, Role.ROLE_GROUP_MANAGER, org)) { - setMonitorForGroupManager(user, org.getChildOrganisations()); + setRolesForGroupManager(user, org.getChildOrganisations()); } } else if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { if (hasRoleInOrganisation(user, Role.ROLE_GROUP_MANAGER, org.getParentOrganisation())) { - setMonitorForGroupManager(user, org.getParentOrganisation().getChildOrganisations()); + setRolesForGroupManager(user, org.getParentOrganisation().getChildOrganisations()); } } } - private void setMonitorForGroupManager(User user, Set childOrgs) { + private void setRolesForGroupManager(User user, Set childOrgs) { for (Object o : childOrgs) { Organisation org = (Organisation)o; @@ -735,28 +735,45 @@ Set uos = org.getUserOrganisations(); uos.add(uo); log.debug("added "+user.getLogin()+" to "+org.getName()); + uo = setRoleForUserOrganisation(uo, (Role)findById(Role.class, Role.ROLE_MONITOR)); + uo = setRoleForUserOrganisation(uo, (Role)findById(Role.class, Role.ROLE_LEARNER)); + save(uo); + return; } + // iterate through roles and add monitor and learner if don't already exist Set uors = uo.getUserOrganisationRoles(); if (uors!=null && !uors.isEmpty()) { boolean isMonitor = false; + boolean isLearner = false; for (UserOrganisationRole uor : uors) { if (uor.getRole().getName().equals(Role.MONITOR)) { isMonitor = true; + } else if (uor.getRole().getName().equals(Role.LEARNER)) { + isLearner = true; + } + if (isMonitor && isLearner) { break; } } - if (isMonitor) { - continue; + if (!isMonitor) { + uo = setRoleForUserOrganisation(uo, (Role)findById(Role.class, Role.ROLE_MONITOR)); } + if (!isLearner) { + uo = setRoleForUserOrganisation(uo, (Role)findById(Role.class, Role.ROLE_LEARNER)); + } + save(uo); } - 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); } } + + private UserOrganisation setRoleForUserOrganisation(UserOrganisation uo, Role role) { + UserOrganisationRole uor = new UserOrganisationRole(uo, role); + save(uor); + uo.addUserOrganisationRole(uor); + log.debug("setting role: "+uor.getRole().getName()+" in organisation: "+uor.getUserOrganisation().getOrganisation().getName()); + return uo; + } public List filterRoles(List rolelist, Boolean isSysadmin, OrganisationType orgType) { List allRoles = new ArrayList();