EditUserFormAction.java

  1. /*
  2.  * This software was designed and created by Jason Carroll.
  3.  * Copyright (c) 2002, 2003, 2004 Jason Carroll.
  4.  * The author can be reached at jcarroll@cowsultants.com
  5.  * ITracker website: http://www.cowsultants.com
  6.  * ITracker forums: http://www.cowsultants.com/phpBB/index.php
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it only under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  */

  18. package org.itracker.web.actions.admin.user;

  19. import org.apache.log4j.Logger;
  20. import org.apache.struts.action.*;
  21. import org.itracker.model.*;
  22. import org.itracker.model.util.UserUtilities;
  23. import org.itracker.services.ProjectService;
  24. import org.itracker.services.UserService;
  25. import org.itracker.web.actions.base.ItrackerBaseAction;
  26. import org.itracker.web.forms.UserForm;
  27. import org.itracker.web.util.Constants;
  28. import org.itracker.web.util.ServletContextUtils;

  29. import javax.servlet.ServletException;
  30. import javax.servlet.http.HttpServletRequest;
  31. import javax.servlet.http.HttpServletResponse;
  32. import javax.servlet.http.HttpSession;
  33. import java.io.IOException;
  34. import java.util.Collections;
  35. import java.util.HashMap;
  36. import java.util.List;

  37. public class EditUserFormAction extends ItrackerBaseAction {
  38.     private static final Logger log = Logger.getLogger(EditUserFormAction.class);

  39.     public ActionForward execute(ActionMapping mapping,
  40.                                  ActionForm form,
  41.                                  HttpServletRequest request,
  42.                                  HttpServletResponse response)
  43.             throws ServletException, IOException {

  44.         ActionMessages errors = new ActionMessages();

  45.         HttpSession session = request.getSession(true);
  46.         String action = request.getParameter("action");
  47.         String pageTitleKey;
  48.         String pageTitleArg = "";
  49.         boolean isUpdate = ( action != null && action.equals("update") );


  50.         try {

  51.             UserService userService = ServletContextUtils.getItrackerServices().getUserService();
  52.             ProjectService projectService = ServletContextUtils.getItrackerServices().getProjectService();

  53.             List<Project> projects;
  54.             User editUser = null;
  55.             HashMap<Integer, HashMap<String, Permission>> userPermissions = new HashMap<Integer, HashMap<String, Permission>>();

  56.             List<NameValuePair> permissionNames = UserUtilities.getPermissionTypeNames(getLocale(request));
  57.             UserForm userForm = (UserForm) form;

  58.             if (userForm == null) {
  59.                 userForm = new UserForm();
  60.             }

  61.             if ("create".equals(action)) {

  62.                 if (!userService.allowProfileCreation(null, null, UserUtilities.AUTH_TYPE_UNKNOWN, UserUtilities.REQ_SOURCE_WEB)) {
  63.                     errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.noprofilecreates"));
  64.                     saveErrors(request, errors);

  65.                     return mapping.findForward("error");
  66.                 }

  67.                 editUser = new User();
  68.                 editUser.setId(-1);
  69.                 editUser.setStatus(UserUtilities.STATUS_ACTIVE);
  70.                 userForm.setAction("create");
  71.                 userForm.setId(editUser.getId());

  72.             } else if ("update".equals(action)) {

  73.                 Integer userId = userForm.getId();

  74.                 if (userId == null) {
  75.                     errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invaliduser"));
  76.                 } else {

  77.                     editUser = userService.getUser(userId);

  78.                     if (editUser == null) {
  79.                         errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invaliduser"));
  80.                     } else {

  81.                         userForm.setAction("update");
  82.                         userForm.setId(editUser.getId());
  83.                         userForm.setLogin(editUser.getLogin());
  84.                         userForm.setFirstName(editUser.getFirstName());
  85.                         userForm.setLastName(editUser.getLastName());
  86.                         userForm.setEmail(editUser.getEmail());
  87.                         userForm.setSuperUser(editUser.isSuperUser());

  88.                         List<Permission> permissionList = userService.getPermissionsByUserId(editUser.getId());
  89.                         HashMap<String, Boolean> formPermissions = new HashMap<>();

  90.                         boolean allowProfileUpdate = userService.allowProfileUpdates(editUser, null, UserUtilities.AUTH_TYPE_UNKNOWN, UserUtilities.REQ_SOURCE_WEB);
  91.                         request.setAttribute("allowProfileUpdate", allowProfileUpdate);

  92.                         boolean allowPasswordUpdate = userService.allowPasswordUpdates(editUser, null, UserUtilities.AUTH_TYPE_UNKNOWN, UserUtilities.REQ_SOURCE_WEB);
  93.                         request.setAttribute("allowPasswordUpdate", allowPasswordUpdate);

  94.                         boolean allowPermissionUpdate = userService.allowPermissionUpdates(editUser, null, UserUtilities.AUTH_TYPE_UNKNOWN, UserUtilities.REQ_SOURCE_WEB);
  95.                         request.setAttribute("allowPermissionUpdate", allowPermissionUpdate);

  96.                         if (editUser.getId() > 0) {
  97.                             request.setAttribute("isUpdate", true);
  98.                         }

  99.                         for (int i = 0; i < permissionList.size(); i++) {

  100.                             log.debug("Processing permission type: " + permissionList.get(i).getPermissionType());

  101.                             //if getPermissionType returned -1, this is a SuperUser. He will still be able to set project permissions.  

  102.                             if (permissionList.size() > 0 && permissionList.get(0).getPermissionType() == PermissionType.USER_ADMIN) {

  103.                                 if (permissionList.size() > 1 && i != 0) {

  104.                                     Integer projectId = permissionList.get(i).getProject().getId();

  105.                                     if (userPermissions.get(projectId) == null) {
  106.                                         HashMap<String, Permission> projectPermissions = new HashMap<>();
  107.                                         userPermissions.put(permissionList.get(i).getProject().getId(), projectPermissions);
  108.                                     }

  109.                                     formPermissions.put(permissionList.get(i).getPermissionType().name(permissionList.get(i).getProject()), true);

  110.                                     PermissionType permissionType = permissionList.get(i).getPermissionType();

  111.                                     Permission thisPermission = permissionList.get(i);
  112.                                     HashMap<String, Permission> permissionHashMap = userPermissions.get(projectId);
  113.                                     permissionHashMap.put(String.valueOf(permissionType), thisPermission);

  114.                                 }

  115.                             } else {

  116.                                 Integer projectId = permissionList.get(i).getProject().getId();

  117.                                 if (userPermissions.get(projectId) == null) {
  118.                                     HashMap<String, Permission> projectPermissions = new HashMap<>();
  119.                                     userPermissions.put(permissionList.get(i).getProject().getId(), projectPermissions);
  120.                                 }

  121.                                 formPermissions.put(permissionList.get(i).getPermissionType().name(permissionList.get(i).getProject()), true);

  122.                                 PermissionType permissionType = permissionList.get(i).getPermissionType();

  123.                                 Permission thisPermission = permissionList.get(i);
  124.                                 HashMap<String, Permission> permissionHashMap =  userPermissions.get(projectId);
  125.                                 permissionHashMap.put(String.valueOf(permissionType), thisPermission);

  126.                             }

  127.                         }

  128.                         userForm.setPermissions(formPermissions);
  129.                     }
  130.                 }

  131.             } else {
  132.                 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.invalidaction"));
  133.             }

  134.             if (editUser == null) {
  135.                 return mapping.findForward("unauthorized");
  136.             }
  137.             if (isUpdate) {
  138.                 pageTitleKey = "itracker.web.admin.edituser.title.update";
  139.                 pageTitleArg = editUser.getLogin();

  140.             } else {
  141.                 pageTitleKey = "itracker.web.admin.edituser.title.create";
  142.             }

  143.             request.setAttribute("isUpdate", isUpdate);
  144.             request.setAttribute("pageTitleKey", pageTitleKey);
  145.             request.setAttribute("pageTitleArg", pageTitleArg);
  146.             if (errors.isEmpty()) {

  147.                 String userStatus = UserUtilities.getStatusName(editUser.getStatus());
  148.                 request.setAttribute("userStatus", userStatus);

  149.                 projects = projectService.getAllAvailableProjects();
  150.                 Collections.sort(projects, Project.PROJECT_COMPARATOR);
  151.                 request.setAttribute(Constants.PROJECTS_KEY, projects);

  152.                 request.setAttribute("userForm", userForm);
  153.                 session.setAttribute(Constants.EDIT_USER_KEY, editUser);
  154.                 session.setAttribute(Constants.EDIT_USER_PERMS_KEY, userPermissions);
  155.                 request.setAttribute("permissionNames", permissionNames);
  156.                 request.setAttribute("permissionRowColIdxes", new Integer[]{0, 1});
  157.                 saveToken(request);

  158.                 return mapping.findForward("edituserform");

  159.             }

  160.         } catch (Exception e) {
  161.             log.error("Exception while creating edit user form.", e);
  162.             errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("itracker.web.error.system"));
  163.         }

  164.         if (!errors.isEmpty()) {
  165.             saveErrors(request, errors);
  166.         }

  167.         return mapping.findForward("error");

  168.     }

  169. }