Index: lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java =================================================================== diff -u -rcf6d7efc47ede2354c592c6d2ba54d1fe112df98 -r9d6c499e9e59826c9683b30af19e580403aa8a41 --- lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java (.../ImportService.java) (revision cf6d7efc47ede2354c592c6d2ba54d1fe112df98) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/service/ImportService.java (.../ImportService.java) (revision 9d6c499e9e59826c9683b30af19e580403aa8a41) @@ -568,7 +568,7 @@ } if (!hasError) { - service.setRolesForUserOrganisation(user, org, roles); + service.setRolesForUserOrganisation(user, org.getOrganisationId(), roles); log.debug("added: "+login+" to: "+org.getName()+" with roles: "+roles); } } Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserOrgRoleSaveAction.java =================================================================== diff -u -r5143bd24541db598c3b0e3059db23ebda42d3387 -r9d6c499e9e59826c9683b30af19e580403aa8a41 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserOrgRoleSaveAction.java (.../UserOrgRoleSaveAction.java) (revision 5143bd24541db598c3b0e3059db23ebda42d3387) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserOrgRoleSaveAction.java (.../UserOrgRoleSaveAction.java) (revision 9d6c499e9e59826c9683b30af19e580403aa8a41) @@ -83,8 +83,6 @@ Integer orgId = (Integer)userOrgRoleForm.getOrgId(); log.debug("orgId: "+orgId); - Organisation organisation = (Organisation)service.findById(Organisation.class, orgId); - request.setAttribute("org",orgId); request.getSession().removeAttribute("UserOrgRoleForm"); @@ -107,12 +105,14 @@ request.setAttribute("orgId", orgId); return mapping.findForward("userorg"); } - service.setRolesForUserOrganisation(user, organisation, (List)Arrays.asList(roleIds)); - if (organisation.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { - if (service.getUserOrganisation(bean.getUserId(), organisation.getParentOrganisation().getOrganisationId())==null) { - service.setRolesForUserOrganisation(user, organisation.getParentOrganisation(), (List)Arrays.asList(roleIds)); - } - } + service.setRolesForUserOrganisation(user, orgId, (List)Arrays.asList(roleIds)); + // FMALIKOFF 5/7/7 Commented out the following code that set the roles in the course if the current org is a class, as the logic + // is done in service.setRolesForUserOrganisation() + //if (organisation.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { + // if (service.getUserOrganisation(bean.getUserId(), organisation.getParentOrganisation().getOrganisationId())==null) { + // service.setRolesForUserOrganisation(user, organisation.getParentOrganisation(), (List)Arrays.asList(roleIds)); + // } + //} } return mapping.findForward("userlist"); } Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserRolesSaveAction.java =================================================================== diff -u -r9771e3b0f4bd5fa446d2c7b19604a958c1fb3aaa -r9d6c499e9e59826c9683b30af19e580403aa8a41 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserRolesSaveAction.java (.../UserRolesSaveAction.java) (revision 9771e3b0f4bd5fa446d2c7b19604a958c1fb3aaa) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserRolesSaveAction.java (.../UserRolesSaveAction.java) (revision 9d6c499e9e59826c9683b30af19e580403aa8a41) @@ -100,7 +100,7 @@ return mapping.findForward("userroles"); } - service.setRolesForUserOrganisation(user, org, (List)Arrays.asList(roles)); + service.setRolesForUserOrganisation(user, orgId, (List)Arrays.asList(roles)); return mapping.findForward("userlist"); } Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/ImportV1ContentsSaveAction.java =================================================================== diff -u -r28df655237a2f6befc10475bc4f54b3ac1dd5957 -r9d6c499e9e59826c9683b30af19e580403aa8a41 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/ImportV1ContentsSaveAction.java (.../ImportV1ContentsSaveAction.java) (revision 28df655237a2f6befc10475bc4f54b3ac1dd5957) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/ImportV1ContentsSaveAction.java (.../ImportV1ContentsSaveAction.java) (revision 9d6c499e9e59826c9683b30af19e580403aa8a41) @@ -169,16 +169,15 @@ if (v1user.getRoleIds().contains(V1UserDTO.ROLE_CORE)) { ArrayList roles = new ArrayList(); roles.add(Role.ROLE_SYSADMIN.toString()); - service.setRolesForUserOrganisation(user, service.getRootOrganisation(), roles); + service.setRolesForUserOrganisation(user, service.getRootOrganisation().getOrganisationId(), roles); } for (V1OrgRightDTO v1orgRight : v1user.getOrgRights()) { // the org was not selected to be imported if (orgIdsMap.get(v1orgRight.getOrgSid())==null) { continue; } List roles = getV2RoleIds(v1user.getRoleIds(), v1orgRight); - Organisation org = (Organisation)service.findById(Organisation.class, orgIdsMap.get(v1orgRight.getOrgSid())); - service.setRolesForUserOrganisation(user, org, roles); + service.setRolesForUserOrganisation(user, orgIdsMap.get(v1orgRight.getOrgSid()), roles); } } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -r2e362eb2427ed96a5acbfbaabe8c0b2c707f8e27 -r9d6c499e9e59826c9683b30af19e580403aa8a41 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 2e362eb2427ed96a5acbfbaabe8c0b2c707f8e27) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 9d6c499e9e59826c9683b30af19e580403aa8a41) @@ -326,10 +326,10 @@ * Set the roles for the specified user and organisation using the roleIds in rolesList. * If userOrganisation exists, will also remove roles that are not in rolesList. * @param user - * @param org + * @param orgId * @param rolesList */ - public void setRolesForUserOrganisation(User user, Organisation org, List rolesList); + public void setRolesForUserOrganisation(User user, Integer organisationId, List rolesList); /** * Returns list of roles suitable for the given orgType. Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r289fb356abfcf0f7993661b8dae2046272878294 -r9d6c499e9e59826c9683b30af19e580403aa8a41 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 289fb356abfcf0f7993661b8dae2046272878294) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 9d6c499e9e59826c9683b30af19e580403aa8a41) @@ -651,10 +651,22 @@ /** * (non-Javadoc) - * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#setRolesForUserOrganisation(org.lamsfoundation.lams.usermanagement.User, org.lamsfoundation.lams.usermanagement.Organisation, java.util.List) + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#setRolesForUserOrganisation(org.lamsfoundation.lams.usermanagement.User, java.lang.Integer, java.util.List) */ - public void setRolesForUserOrganisation(User user, Organisation org, List rolesList) { + public void setRolesForUserOrganisation(User user, Integer organisationId, List rolesList) { + + // Don't pass in the org from the web layer. The import for roles doesn't use the HIbernate open session + // filter, so it may throw a lazy loading exception when it tried to access the org.UserOrganisations set + // if org has come from the web layer. + Organisation org = (Organisation) findById(Organisation.class, organisationId); + setRolesForUserOrganisation(user, org, rolesList); + } + + private void setRolesForUserOrganisation(User user, Organisation org, List rolesList) { + // The private version of setRolesForUserOrganisation can pass around the org safely as we are within + // our transation, so no lazy loading errors. This is more efficient for recursive calls to this method. + UserOrganisation uo = getUserOrganisation(user.getUserId(), org.getOrganisationId()); if (uo == null) { uo = new UserOrganisation(user, org);