Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -r1b2fdc94c23d3b1a863c9a5654cde3e6bccc4d7e -rf8455d42afaa3aec85b69606f71fb95c4a9e7371 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 1b2fdc94c23d3b1a863c9a5654cde3e6bccc4d7e) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision f8455d42afaa3aec85b69606f71fb95c4a9e7371) @@ -296,6 +296,19 @@ * related learning designs, etc. * @param userId */ - public void removeUser(Integer userId); + public void removeUser(Integer userId) throws Exception; + + /** + * Determines whether a user has associated learning designs, progress data, etc. + * @param user + * @return Boolean + */ + public Boolean userHasData(User user); + + /** + * Sets user's disabled flag to true, and removes their organisation memberships. + * @param userId + */ + public void disableUser(Integer userId); } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r4c885f9ce404071ebdb626b74499543010776361 -rf8455d42afaa3aec85b69606f71fb95c4a9e7371 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 4c885f9ce404071ebdb626b74499543010776361) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision f8455d42afaa3aec85b69606f71fb95c4a9e7371) @@ -510,13 +510,14 @@ * related learning designs, etc. * @param userId */ - public void removeUser(Integer userId) { + public void removeUser(Integer userId) throws Exception { User user = (User)findById(User.class,userId); if ( user != null ) { - // check that the user doesn't have any contents - move that logic from the action to a - // method call in the service. throw an exception if they do have contents + if ( userHasData(user) ) { + throw new Exception("Cannot remove User ID "+userId+". User has data."); + } // write out an entry in the audit log. @@ -553,4 +554,54 @@ } } + public Boolean userHasData(User user) { + if (user.getLearnerProgresses()!=null) { + if (!user.getLearnerProgresses().isEmpty()) { + log.debug("user has data, learnerProgresses: "+user.getLearnerProgresses().size()); + return true; + } + } + if (user.getUserToolSessions()!=null) { + if (!user.getUserToolSessions().isEmpty()) { + log.debug("user has data, userToolSessions: "+user.getUserToolSessions().size()); + return true; + } + } + if (user.getLearningDesigns()!=null) { + if (!user.getLearningDesigns().isEmpty()) { + log.debug("user has data, learningDesigns: "+user.getLearningDesigns().size()); + return true; + } + } + if (user.getLessons()!=null) { + if (!user.getLessons().isEmpty()) { + log.debug("user has data, lessons: "+user.getLessons().size()); + return true; + } + } + if (user.getUserGroups()!=null) { + if (!user.getUserGroups().isEmpty()) { + log.debug("user has data, userGroups: "+user.getUserGroups().size()); + return true; + } + } + return false; + } + + public void disableUser(Integer userId) { + + User user = (User)findById(User.class,userId); + user.setDisabledFlag(true); + Set uos = user.getUserOrganisations(); + Iterator iter = uos.iterator(); + while(iter.hasNext()) { + UserOrganisation uo = (UserOrganisation)iter.next(); + log.debug("removing membership of: "+uo.getOrganisation().getName()); + delete(uo); + iter.remove(); + } + log.debug("disabling user "+user.getLogin()); + save(user); + } + } \ No newline at end of file