Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserAction.java =================================================================== diff -u -rc21c3386cec2ee819ba267d84d532676d2f4990d -r894443d6dede3a9dbd40a31d03e869e2342e44ee --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserAction.java (.../UserAction.java) (revision c21c3386cec2ee819ba267d84d532676d2f4990d) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserAction.java (.../UserAction.java) (revision 894443d6dede3a9dbd40a31d03e869e2342e44ee) @@ -26,8 +26,10 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -45,6 +47,9 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.UserOrganisation; import org.lamsfoundation.lams.usermanagement.UserOrganisationRole; +import org.lamsfoundation.lams.usermanagement.Workspace; +import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; +import org.lamsfoundation.lams.usermanagement.WorkspaceWorkspaceFolder; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; @@ -68,6 +73,7 @@ * * @struts:action-forward name="user" path=".user" * @struts:action-forward name="userlist" path="/usermanage.do" + * @struts:action-forward name="remove" path=".remove" */ public class UserAction extends LamsDispatchAction { @@ -138,18 +144,76 @@ return mapping.findForward("user"); } + // determine whether to disable or delete user based on their lams data public ActionForward remove(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { + + Integer orgId = WebUtil.readIntParam(request,"orgId"); Integer userId = WebUtil.readIntParam(request,"userId",true); - log.debug("removing userid: "+userId); - getService().deleteById(User.class,userId); + User user = (User)getService().findById(User.class,userId); + + Boolean hasData = userHasData(user); + + log.debug("user has data: "+hasData); + request.setAttribute("method", (hasData?"disable":"delete")); + request.setAttribute("orgId",orgId); + request.setAttribute("userId",userId); + return mapping.findForward("remove"); + } + + public ActionForward disable(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + Integer orgId = WebUtil.readIntParam(request,"orgId"); + Integer userId = WebUtil.readIntParam(request,"userId",true); + User user = (User)getService().findById(User.class,userId); + + user.setDisabledFlag(true); + log.debug("deleting userId="+userId+"'s userorgs"); + Set uos = user.getUserOrganisations(); + Iterator iter = uos.iterator(); + while(iter.hasNext()) { + getService().delete(iter.next()); + iter.remove(); + } + getService().save(user); + request.setAttribute("org",orgId); return mapping.findForward("userlist"); } + public ActionForward delete(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + + Integer orgId = WebUtil.readIntParam(request,"orgId"); + Integer userId = WebUtil.readIntParam(request,"userId",true); + User user = (User)getService().findById(User.class,userId); + Workspace workspace = user.getWorkspace(); + WorkspaceFolder wf = workspace.getDefaultFolder(); + Set wwfs = workspace.getWorkspaceWorkspaceFolders(); + + Iterator iter = wwfs.iterator(); + if (iter.hasNext()) { + WorkspaceWorkspaceFolder wwf = (WorkspaceWorkspaceFolder)iter.next(); + if (!iter.hasNext()) { + log.debug("deleting wkspc_wkspc_folder: "+wwf.getId()); + getService().delete(wwf); + getService().delete(wf); + getService().delete(workspace); + getService().delete(user); + log.debug("deleted user: "+userId); + } + } + + request.setAttribute("org",orgId); + return mapping.findForward("userlist"); + } private List filterRoles(List rolelist, Boolean isSysadmin, OrganisationType orgType){ List allRoles = new ArrayList(); @@ -168,6 +232,41 @@ return allRoles; } + // check user has done anything + private Boolean userHasData(User user) { + if (user.getLearnerProgresses()!=null) { + if (!user.getLearnerProgresses().isEmpty()) { + log.debug("learnerProgresses: "+user.getLearnerProgresses().size()); + return true; + } + } + if (user.getUserToolSessions()!=null) { + if (!user.getUserToolSessions().isEmpty()) { + log.debug("userToolSessions: "+user.getUserToolSessions().size()); + return true; + } + } + if (user.getLearningDesigns()!=null) { + if (!user.getLearningDesigns().isEmpty()) { + log.debug("learningDesigns: "+user.getLearningDesigns().size()); + return true; + } + } + if (user.getLessons()!=null) { + if (!user.getLessons().isEmpty()) { + log.debug("lessons: "+user.getLessons().size()); + return true; + } + } + if (user.getUserGroups()!=null) { + if (!user.getUserGroups().isEmpty()) { + log.debug("userGroups: "+user.getUserGroups().size()); + return true; + } + } + return false; + } + @SuppressWarnings("unchecked") private IUserManagementService getService(){ if(service==null){ Index: lams_admin/web/WEB-INF/tiles/tiles-defs.xml =================================================================== diff -u -r01b89b75ded089dcc3c5556072c411eb92815ed3 -r894443d6dede3a9dbd40a31d03e869e2342e44ee --- lams_admin/web/WEB-INF/tiles/tiles-defs.xml (.../tiles-defs.xml) (revision 01b89b75ded089dcc3c5556072c411eb92815ed3) +++ lams_admin/web/WEB-INF/tiles/tiles-defs.xml (.../tiles-defs.xml) (revision 894443d6dede3a9dbd40a31d03e869e2342e44ee) @@ -2,6 +2,11 @@ + + + + + Index: lams_admin/web/remove.jsp =================================================================== diff -u --- lams_admin/web/remove.jsp (revision 0) +++ lams_admin/web/remove.jsp (revision 894443d6dede3a9dbd40a31d03e869e2342e44ee) @@ -0,0 +1,42 @@ +<%@ page contentType="text/html; charset=utf-8" language="java" %> + +<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="tags-logic" prefix="logic" %> +<%@ taglib uri="tags-core" prefix="c" %> +<%@ taglib uri="tags-fmt" prefix="fmt" %> + +
+ +

Disable User

+

 

+

This user has lesson and/or sequence data associated with it and cannot be deleted.   +User will be disabled instead, maintaining their data, but the account will +be treated as deleted.  It will not appear in group/subgroup lists, nor +will the user be able to login.
+You can enable the user account again by editing the user's profile.

+ + + + + +
+'" /> +'" /> +
+
+ + +

Delete User

+

 

+

User has no associated data and can be safely removed.  Are you sure you want to delete this account?

+ + + + + +
+'" /> +'" /> +
+
+
\ No newline at end of file