Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/usermanagement/UserOrganisation.hbm.xml =================================================================== diff -u -r07578aaa7f526c0c1b537c127cf5f88e0410d472 -r48eb3881563dc0f2576c2df926f47a75424e1e84 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/usermanagement/UserOrganisation.hbm.xml (.../UserOrganisation.hbm.xml) (revision 07578aaa7f526c0c1b537c127cf5f88e0410d472) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/usermanagement/UserOrganisation.hbm.xml (.../UserOrganisation.hbm.xml) (revision 48eb3881563dc0f2576c2df926f47a75424e1e84) @@ -103,4 +103,15 @@ + + + + SELECT {userOrganisation.*} + FROM lams_user_organisation {userOrganisation}, lams_organisation o + WHERE {userOrganisation}.user_id = :userId + AND {userOrganisation}.organisation_id != :orgId + AND o.organisation_id = {userOrganisation}.organisation_id + AND o.parent_organisation_id != :orgId + + Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== diff -u -rbb419b22571ecd3406c59785cd4d8bc899938ca4 -r48eb3881563dc0f2576c2df926f47a75424e1e84 --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision bb419b22571ecd3406c59785cd4d8bc899938ca4) +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 48eb3881563dc0f2576c2df926f47a75424e1e84) @@ -98,6 +98,7 @@ + @@ -340,6 +341,10 @@ + + + + Fisheye: Tag 6633f5d5c7844c27582a9b323fead87fac99dfd5 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/IUserOrganisationDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 6633f5d5c7844c27582a9b323fead87fac99dfd5 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserOrganisationDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -rc2a96caab480d04c02dc7a90e719fc0bb9af6a50 -r48eb3881563dc0f2576c2df926f47a75424e1e84 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision c2a96caab480d04c02dc7a90e719fc0bb9af6a50) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 48eb3881563dc0f2576c2df926f47a75424e1e84) @@ -489,4 +489,13 @@ * @return */ public ForgotPasswordRequest getForgotPasswordRequest(String key); + + /** + * Remove given user from groups other than the specified one. Doesn't remove + * user from subgroups of the specified group if any. + * @param userId + * @param orgId + * @return number of deleted rows. + */ + public int removeUserFromOtherGroups(Integer userId, Integer orgId); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/LdapService.java =================================================================== diff -u -r60b4757cf25429b45747670da240442c677e9dd1 -r48eb3881563dc0f2576c2df926f47a75424e1e84 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/LdapService.java (.../LdapService.java) (revision 60b4757cf25429b45747670da240442c677e9dd1) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/LdapService.java (.../LdapService.java) (revision 48eb3881563dc0f2576c2df926f47a75424e1e84) @@ -325,19 +325,7 @@ } // if the user is a member of any other groups, remove them if (Configuration.getAsBoolean(ConfigurationKeys.LDAP_ONLY_ONE_ORG)) { - List uos = service.findByProperty(UserOrganisation.class, "user", user); - if (uos != null) { - for (Object obj : uos) { - UserOrganisation uo = (UserOrganisation) obj; - Organisation currentOrg = uo.getOrganisation(); - if (currentOrg.getOrganisationType().getOrganisationTypeId().equals( - OrganisationType.COURSE_TYPE)) { - if (!currentOrg.equals(org)) { - service.deleteUserOrganisation(user, currentOrg); - } - } - } - } + service.removeUserFromOtherGroups(userId, org.getOrganisationId()); } // now convert the roles to lams roles and add the user to the // org @@ -520,8 +508,7 @@ break; } } else { - log - .error("Couldn't find login attribute for user using attribute name: " + log.error("Couldn't find login attribute for user using attribute name: " + Configuration.get(ConfigurationKeys.LDAP_LOGIN_ATTR) + ". Dumping attributes..."); NamingEnumeration enumAttrs = attrs.getAll(); Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r183737e7a950da43f140416a8ec09018c20aec08 -r48eb3881563dc0f2576c2df926f47a75424e1e84 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 183737e7a950da43f140416a8ec09018c20aec08) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 48eb3881563dc0f2576c2df926f47a75424e1e84) @@ -52,6 +52,7 @@ import org.lamsfoundation.lams.usermanagement.WorkspaceWorkspaceFolder; import org.lamsfoundation.lams.usermanagement.dao.IOrganisationDAO; import org.lamsfoundation.lams.usermanagement.dao.IRoleDAO; +import org.lamsfoundation.lams.usermanagement.dao.IUserOrganisationDAO; import org.lamsfoundation.lams.usermanagement.dto.CollapsedOrgDTO; import org.lamsfoundation.lams.usermanagement.dto.OrganisationDTO; import org.lamsfoundation.lams.usermanagement.dto.OrganisationDTOFactory; @@ -92,6 +93,7 @@ private IGroupDAO groupDAO; private IRoleDAO roleDAO; private IOrganisationDAO organisationDAO; + private IUserOrganisationDAO userOrganisationDAO; protected MessageService messageService; private static IAuditService auditService; @@ -132,6 +134,10 @@ public void setOrganisationDAO(IOrganisationDAO organisationDAO) { this.organisationDAO = organisationDAO; } + + public void setUserOrganisationDAO(IUserOrganisationDAO userOrganisationDAO) { + this.userOrganisationDAO = userOrganisationDAO; + } public void save(Object object) { try{ @@ -1122,4 +1128,10 @@ List results = baseDAO.findByProperty(ForgotPasswordRequest.class,"requestKey",key); return results.isEmpty() ? null : (ForgotPasswordRequest)results.get(0); } + + public int removeUserFromOtherGroups(Integer userId, Integer orgId) { + List uos = userOrganisationDAO.userOrganisationsNotById(userId, orgId); + deleteAll(uos); + return uos.size(); + } } \ No newline at end of file