Index: lams_admin/conf/xdoclet/struts-forms.xml =================================================================== diff -u -rd0a703641dee45b84a2cd9a011376a8f0d72c9fb -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_admin/conf/xdoclet/struts-forms.xml (.../struts-forms.xml) (revision d0a703641dee45b84a2cd9a011376a8f0d72c9fb) +++ lams_admin/conf/xdoclet/struts-forms.xml (.../struts-forms.xml) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -62,12 +62,6 @@ - - - - - - Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserSearchAction.java =================================================================== diff -u -r301b444dedf83e9caa28a69f3d70b84942181052 -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserSearchAction.java (.../UserSearchAction.java) (revision 301b444dedf83e9caa28a69f3d70b84942181052) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/UserSearchAction.java (.../UserSearchAction.java) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -24,101 +24,132 @@ /* $Id$ */ package org.lamsfoundation.lams.admin.web; -import java.util.ArrayList; -import java.util.HashMap; +import java.io.IOException; import java.util.List; -import java.util.Map; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.log4j.Logger; -import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; -import org.apache.struts.action.DynaActionForm; +import org.apache.tomcat.util.json.JSONArray; +import org.apache.tomcat.util.json.JSONException; +import org.apache.tomcat.util.json.JSONObject; import org.lamsfoundation.lams.admin.service.AdminServiceProxy; import org.lamsfoundation.lams.usermanagement.Role; -import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.action.LamsDispatchAction; /** * @author jliew - * - */ - -/** - * struts doclets * - * @struts:action path="/usersearch" - * name="UserSearchForm" - * input=".usersearchlist" - * scope="request" - * validate="false" + * @struts:action path="/usersearch" parameter="dispatch" input=".usersearchlist" scope="request" validate="false" * - * @struts:action-forward name="usersearchlist" - * path=".usersearchlist" + * @struts:action-forward name="usersearchlist" path=".usersearchlist" */ -public class UserSearchAction extends Action { - - private static Logger log = Logger.getLogger(UserSearchAction.class); - private static IUserManagementService service; - private static MessageService messageService; +public class UserSearchAction extends LamsDispatchAction { - public ActionForward execute(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) throws Exception { - - if (service == null) { - service = AdminServiceProxy.getService(getServlet().getServletContext()); - } - if (messageService == null) { - messageService = AdminServiceProxy.getMessageService(getServlet().getServletContext()); - } - DynaActionForm userSearchForm = (DynaActionForm)form; - - if(!(request.isUserInRole(Role.SYSADMIN) || service.isUserGlobalGroupAdmin())){ - log.debug("user not sysadmin or global group admin"); - ActionMessages errors = new ActionMessages(); - errors.add("authorisation",new ActionMessage("error.authorisation")); - saveErrors(request,errors); - request.setAttribute("isSysadmin",false); - return mapping.findForward("usersearchlist"); - } - - Boolean showAll = (Boolean)userSearchForm.get("showAll"); - Boolean searched = (Boolean)userSearchForm.get("searched"); - String term = ((String)userSearchForm.getString("term")).trim(); - - if (searched) { - List userList = new ArrayList(); - if (showAll) { - Map objectProperties = new HashMap(); - objectProperties.put("disabledFlag",false); - userList = service.findByProperties(User.class,objectProperties); - } else { - userList = service.searchUserSingleTerm(term); - } - if (userList.isEmpty()) { - ActionMessages messages = new ActionMessages(); - messages.add("results",new ActionMessage("msg.results.none")); - saveMessages(request,messages); - } - - request.setAttribute("userList", userList); - String[] args = { new Integer(userList.size()).toString() }; - request.setAttribute("numUsers", messageService.getMessage("label.number.of.users", args)); - } - - userSearchForm.set("showAll", false); - userSearchForm.set("searched", true); - - return mapping.findForward("usersearchlist"); + private static Logger log = Logger.getLogger(UserSearchAction.class); + private static IUserManagementService service; + private static MessageService messageService; + + public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + initServices(); + + if (!(request.isUserInRole(Role.SYSADMIN) || service.isUserGlobalGroupAdmin())) { + log.debug("user not sysadmin or global group admin"); + + request.setAttribute("errorName", "UserSearchAction authorisation"); + request.setAttribute("errorMessage", messageService.getMessage("error.authorisation")); + return mapping.findForward("error"); } - + + return mapping.findForward("usersearchlist"); + } + + /** + * Returns list of paged users. + */ + public ActionForward getPagedUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse res) throws IOException, ServletException, JSONException { + initServices(); + + // the organisation type of the children + String searchString = WebUtil.readStrParam(request, "fcol[1]", true); + + // paging parameters of tablesorter + int size = WebUtil.readIntParam(request, "size"); + int page = WebUtil.readIntParam(request, "page"); + Integer isSort1 = WebUtil.readIntParam(request, "column[0]", true); + Integer isSort2 = WebUtil.readIntParam(request, "column[1]", true); + Integer isSort3 = WebUtil.readIntParam(request, "column[2]", true); + Integer isSort4 = WebUtil.readIntParam(request, "column[3]", true); + Integer isSort5 = WebUtil.readIntParam(request, "column[4]", true); + + String sortBy = "userId"; + String sortOrder = "DESC"; + if (isSort1 != null) { + sortBy = "userId"; + sortOrder = isSort1.equals(0) ? "ASC" : "DESC"; + + } else if (isSort2 != null) { + sortBy = "login"; + sortOrder = isSort2.equals(0) ? "ASC" : "DESC"; + + } else if (isSort3 != null) { + sortBy = "firstName"; + sortOrder = isSort3.equals(0) ? "ASC" : "DESC"; + + } else if (isSort4 != null) { + sortBy = "lastName"; + sortOrder = isSort4.equals(0) ? "ASC" : "DESC"; + + } else if (isSort5 != null) { + sortBy = "email"; + sortOrder = isSort5.equals(0) ? "ASC" : "DESC"; + } + + List userDtos = service.getAllUsersPaged(page, size, sortBy, sortOrder, searchString); + + JSONObject responcedata = new JSONObject(); + responcedata.put("total_rows", service.getCountUsers(searchString)); + + JSONArray rows = new JSONArray(); + for (UserDTO userDto: userDtos) { + + JSONObject responseRow = new JSONObject(); + responseRow.put("userId", userDto.getUserID()); + responseRow.put("login", StringEscapeUtils.escapeHtml(userDto.getLogin())); + String firstName = userDto.getFirstName() == null ? "" : userDto.getFirstName(); + responseRow.put("firstName", StringEscapeUtils.escapeHtml(firstName)); + String lastName = userDto.getLastName() == null ? "" : userDto.getLastName(); + responseRow.put("lastName", StringEscapeUtils.escapeHtml(lastName)); + String email = userDto.getEmail() == null ? "" : userDto.getEmail(); + responseRow.put("email", StringEscapeUtils.escapeHtml(email)); + + rows.put(responseRow); + } + responcedata.put("rows", rows); + res.setContentType("application/json;charset=utf-8"); + res.getWriter().print(new String(responcedata.toString())); + return null; + } + + private void initServices() { + if (service == null) { + service = AdminServiceProxy.getService(getServlet().getServletContext()); + } + if (messageService == null) { + messageService = AdminServiceProxy.getMessageService(getServlet().getServletContext()); + } + } + } Index: lams_admin/web/error.jsp =================================================================== diff -u -rf0c2b8f197da1cd58d9df772e6f0ef072d656602 -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_admin/web/error.jsp (.../error.jsp) (revision f0c2b8f197da1cd58d9df772e6f0ef072d656602) +++ lams_admin/web/error.jsp (.../error.jsp) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -62,11 +62,10 @@ Index: lams_admin/web/userorg.jsp =================================================================== diff -u -r48ed00ae83293d10aae53149bd06ee25598c9432 -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_admin/web/userorg.jsp (.../userorg.jsp) (revision 48ed00ae83293d10aae53149bd06ee25598c9432) +++ lams_admin/web/userorg.jsp (.../userorg.jsp) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -1,10 +1,28 @@ <%@ include file="/taglibs.jsp"%> - + + + - -

Index: lams_admin/web/usersearchlist.jsp =================================================================== diff -u -rbc0efcd16c662d94ea7090a43358ec83f3422397 -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_admin/web/usersearchlist.jsp (.../usersearchlist.jsp) (revision bc0efcd16c662d94ea7090a43358ec83f3422397) +++ lams_admin/web/usersearchlist.jsp (.../usersearchlist.jsp) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -1,110 +1,189 @@ <%@ include file="/taglibs.jsp"%> + - - - - + + + + + + +

+ + + +

+

+ +

+

- " onclick="javascript:document.location='user.do?method=edit'" /> + " onclick=javascript:document.location='user.do?method=edit' />

- - +

- -

-
- - - - - - - - - - - - - - +
+ - - - - - - + + + + + + - - - + + + +
- - - - - - - - - - - [">] -   - [">] -   - [">] - - - [&returnUrl=admin/usersearch.do">] - - + + + + + + + + + + + +
- - -
- -
-
- - - - - + + +
+ + + + + +
- - Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r41e881a8b2eb1cbfe219fe28bc63d6725d303763 -r51e6dce474861837e1e86838bcbc1b1efba971e3 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== diff -u -r9c603f82a3332d5e2e5b290bcc550f263c09a8f8 -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 9c603f82a3332d5e2e5b290bcc550f263c09a8f8) +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -48,6 +48,7 @@ + @@ -463,6 +464,10 @@ + + + + Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -0,0 +1,32 @@ +package org.lamsfoundation.lams.usermanagement; + +import java.util.List; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; + +/** + * Interface defining User DAO methods. + */ +public interface IUserDAO extends IBaseDAO { + + /** + * Get all users (paged), except for disabled users. + * + * @param page + * @param size + * @param sortBy + * @param sortOrder + * @param searchString filters results by course name. It can be null and then doesn't affect results + * @return paged list of users + */ + List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchString); + + /** + * Count total number of users excluding disabled ones and applying searchString filter. + * + * @param searchString + * @return + */ + int getCountUsers(String searchString); +} Fisheye: Tag 6633f5d5c7844c27582a9b323fead87fac99dfd5 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserOrganisationDAO.java =================================================================== diff -u -rb6ed1309cf89ecede6717145c629d7cb3b842582 -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserOrganisationDAO.java (.../UserOrganisationDAO.java) (revision b6ed1309cf89ecede6717145c629d7cb3b842582) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserOrganisationDAO.java (.../UserOrganisationDAO.java) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -32,7 +32,6 @@ /** * @author jliew - * */ @Repository public class UserOrganisationDAO extends LAMSBaseDAO implements IUserOrganisationDAO { Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -r41bb651a1488681fd9ca663ead283b47defdc408 -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 41bb651a1488681fd9ca663ead283b47defdc408) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -479,6 +479,14 @@ Integer getCountUsers(); Integer getCountUsers(Integer authenticationMethodId); + + /** + * Count total number of users excluding disabled ones and applying searchString filter. + * + * @param searchString + * @return + */ + int getCountUsers(String searchString); List getActiveCourseIdsByUser(Integer userId, boolean isSysadmin); @@ -531,6 +539,18 @@ * @return list of Users */ List getAllUsers(); + + /** + * Get all users (paged), except for disabled users. + * + * @param page + * @param size + * @param sortBy + * @param sortOrder + * @param searchString filters results by course name. It can be null and then doesn't affect results + * @return paged list of users + */ + List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchString); /** * Get all users, except for disabled users and users that are members of filteredOrg. Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r41bb651a1488681fd9ca663ead283b47defdc408 -r51e6dce474861837e1e86838bcbc1b1efba971e3 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 41bb651a1488681fd9ca663ead283b47defdc408) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) @@ -44,6 +44,7 @@ import org.lamsfoundation.lams.learningdesign.dao.IGroupDAO; import org.lamsfoundation.lams.themes.Theme; import org.lamsfoundation.lams.usermanagement.ForgotPasswordRequest; +import org.lamsfoundation.lams.usermanagement.IUserDAO; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.OrganisationGroup; import org.lamsfoundation.lams.usermanagement.OrganisationGrouping; @@ -100,56 +101,19 @@ private IRoleDAO roleDAO; private IOrganisationDAO organisationDAO; + + private IUserDAO userDAO; private IUserOrganisationDAO userOrganisationDAO; protected MessageService messageService; private static IAuditService auditService; + + // --------------------------------------------------------------------- + // Service Methods + // --------------------------------------------------------------------- - private IAuditService getAuditService() { - if (UserManagementService.auditService == null) { - WebApplicationContext ctx = WebApplicationContextUtils - .getWebApplicationContext(SessionManager.getServletContext()); - UserManagementService.auditService = (IAuditService) ctx.getBean("auditService"); - } - return UserManagementService.auditService; - } - - /** - * Set i18n MessageService - */ - public void setMessageService(MessageService messageService) { - this.messageService = messageService; - } - - /** - * Get i18n MessageService - */ - public MessageService getMessageService() { - return messageService; - } - - public void setBaseDAO(IBaseDAO baseDAO) { - this.baseDAO = baseDAO; - } - - public void setGroupDAO(IGroupDAO groupDAO) { - this.groupDAO = groupDAO; - } - - public void setRoleDAO(IRoleDAO roleDAO) { - this.roleDAO = roleDAO; - } - - public void setOrganisationDAO(IOrganisationDAO organisationDAO) { - this.organisationDAO = organisationDAO; - } - - public void setUserOrganisationDAO(IUserOrganisationDAO userOrganisationDAO) { - this.userOrganisationDAO = userOrganisationDAO; - } - @Override public void save(Object object) { try { @@ -1132,12 +1096,17 @@ String message = messageService.getMessage("audit.user.create", args); getAuditService().log(moduleName, message); } - + @Override public Integer getCountUsers() { - String query = "select count(u) from User u"; + String query = "SELECT count(u) FROM User u"; return getFindIntegerResult(query); } + + @Override + public int getCountUsers(String searchString) { + return userDAO.getCountUsers(searchString); + } @Override public Integer getCountUsers(Integer authenticationMethodId) { @@ -1247,6 +1216,11 @@ String query = "from User u where u.disabledFlag=0 order by u.login"; return baseDAO.find(query); } + + @Override + public List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchString) { + return userDAO.getAllUsersPaged(page, size, sortBy, sortOrder, searchString); + } @Override public List getAllUsers(Integer filteredOrgId) { @@ -1304,4 +1278,48 @@ List results = baseDAO.findByProperty(User.class, "openidURL", openidURL); return results.isEmpty() ? null : (User) results.get(0); } + + // --------------------------------------------------------------------- + // Inversion of Control Methods - Method injection + // --------------------------------------------------------------------- + + /** + * Set i18n MessageService + */ + public void setMessageService(MessageService messageService) { + this.messageService = messageService; + } + + public void setBaseDAO(IBaseDAO baseDAO) { + this.baseDAO = baseDAO; + } + + public void setGroupDAO(IGroupDAO groupDAO) { + this.groupDAO = groupDAO; + } + + public void setRoleDAO(IRoleDAO roleDAO) { + this.roleDAO = roleDAO; + } + + public void setOrganisationDAO(IOrganisationDAO organisationDAO) { + this.organisationDAO = organisationDAO; + } + + public void setUserDAO(IUserDAO userDAO) { + this.userDAO = userDAO; + } + + public void setUserOrganisationDAO(IUserOrganisationDAO userOrganisationDAO) { + this.userOrganisationDAO = userOrganisationDAO; + } + + private IAuditService getAuditService() { + if (UserManagementService.auditService == null) { + WebApplicationContext ctx = WebApplicationContextUtils + .getWebApplicationContext(SessionManager.getServletContext()); + UserManagementService.auditService = (IAuditService) ctx.getBean("auditService"); + } + return UserManagementService.auditService; + } } \ No newline at end of file