Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserBasicListAction.java =================================================================== diff -u -r36301c5c3e71d8a4b4ca4e8ef5f7901abadf4e5e -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserBasicListAction.java (.../UserBasicListAction.java) (revision 36301c5c3e71d8a4b4ca4e8ef5f7901abadf4e5e) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserBasicListAction.java (.../UserBasicListAction.java) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -18,11 +18,11 @@ * * http://www.gnu.org/licenses/gpl.txt * **************************************************************** - */ - -/* $Id$ */ -package org.lamsfoundation.lams.admin.web.action; + */ +/* $Id$ */ +package org.lamsfoundation.lams.admin.web.action; + import java.util.ArrayList; import java.util.List; @@ -44,7 +44,7 @@ import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; - + /** * @author jliew * @@ -53,60 +53,62 @@ * @struts:action-forward name="basiclist" path="/user/basiclist.jsp" */ public class UserBasicListAction extends Action { - - private static IUserManagementService service; - - public ActionForward execute(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) throws Exception { - - service = AdminServiceProxy.getService(getServlet().getServletContext()); - HttpSession session = SessionManager.getSession(); - if (session != null) { - UserDTO userDto = (UserDTO)session.getAttribute(AttributeNames.USER); - if (userDto != null) { - // get inputs - Integer userId = userDto.getUserID(); - Integer orgId = WebUtil.readIntParam(request, "orgId", true); - String potential = WebUtil.readStrParam(request, "potential", true); - if (orgId != null) { - if (!StringUtils.equals(potential, "1")) { - // list users in org - List users = service.getUsersFromOrganisation(orgId); - request.setAttribute("users", users); - } else { - // get all potential users of this org instead... filters results according to user's roles - // get group - Organisation org = (Organisation)service.findById(Organisation.class, orgId); - Organisation group; - if (org != null) { - if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { - group = org.getParentOrganisation(); - } else { - group = org; - } - // get users - List users = new ArrayList(); - if (request.isUserInRole(Role.SYSADMIN) || service.isUserGlobalGroupAdmin()) { - users = service.getAllUsers(org.getOrganisationId()); - } else if (service.isUserInRole(userId, group.getOrganisationId(), Role.GROUP_ADMIN) - || service.isUserInRole(userId, group.getOrganisationId(), Role.GROUP_MANAGER)) { - if (group.getCourseAdminCanBrowseAllUsers()){ - users = service.getAllUsers(org.getOrganisationId()); - } else if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { - users = service.getUsersFromOrganisation(group.getOrganisationId(), orgId); - } - } - request.setAttribute("users", users); - } - } + + private static IUserManagementService service; + + @Override + public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + + UserBasicListAction.service = AdminServiceProxy.getService(getServlet().getServletContext()); + HttpSession session = SessionManager.getSession(); + if (session != null) { + UserDTO userDto = (UserDTO) session.getAttribute(AttributeNames.USER); + if (userDto != null) { + // get inputs + Integer userId = userDto.getUserID(); + Integer orgId = WebUtil.readIntParam(request, "orgId", true); + String potential = WebUtil.readStrParam(request, "potential", true); + if (orgId != null) { + if (!StringUtils.equals(potential, "1")) { + // list users in org + List users = UserBasicListAction.service.getUsersFromOrganisation(orgId); + request.setAttribute("users", users); + } else { + // get all potential users of this org instead... filters results according to user's roles + // get group + Organisation org = (Organisation) UserBasicListAction.service.findById(Organisation.class, + orgId); + Organisation group; + if (org != null) { + if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { + group = org.getParentOrganisation(); + } else { + group = org; + } + // get users + List users = new ArrayList(); + if (request.isUserInRole(Role.SYSADMIN) + || UserBasicListAction.service.isUserGlobalGroupAdmin()) { + users = UserBasicListAction.service.getAllUsers(org.getOrganisationId()); + } else if (UserBasicListAction.service.isUserInRole(userId, group.getOrganisationId(), + Role.GROUP_ADMIN) + || UserBasicListAction.service.isUserInRole(userId, group.getOrganisationId(), + Role.GROUP_MANAGER)) { + if (group.getCourseAdminCanBrowseAllUsers()) { + users = UserBasicListAction.service.getAllUsers(org.getOrganisationId()); + } else if (org.getOrganisationType().getOrganisationTypeId() + .equals(OrganisationType.CLASS_TYPE)) { + users = UserBasicListAction.service.findUsers(null, group.getOrganisationId(), + orgId); } + } + request.setAttribute("users", users); } + } } - - return mapping.findForward("basiclist"); + } } - -} - \ No newline at end of file + return mapping.findForward("basiclist"); + } +} \ No newline at end of file Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserSearchSingleTermAction.java =================================================================== diff -u -r6452b7bb53f1f0eb5a340fd488a733a9a6bd1415 -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserSearchSingleTermAction.java (.../UserSearchSingleTermAction.java) (revision 6452b7bb53f1f0eb5a340fd488a733a9a6bd1415) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserSearchSingleTermAction.java (.../UserSearchSingleTermAction.java) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -18,11 +18,11 @@ * * http://www.gnu.org/licenses/gpl.txt * **************************************************************** - */ - -/* $Id$ */ -package org.lamsfoundation.lams.admin.web.action; + */ +/* $Id$ */ +package org.lamsfoundation.lams.admin.web.action; + import java.util.ArrayList; import java.util.List; @@ -44,7 +44,7 @@ import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; - + /** * @author jliew * @@ -54,56 +54,60 @@ */ public class UserSearchSingleTermAction extends Action { - private static IUserManagementService service; - - public ActionForward execute(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) throws Exception { - - service = AdminServiceProxy.getService(getServlet().getServletContext()); - String term = WebUtil.readStrParam(request, "term", true); - Integer orgId = WebUtil.readIntParam(request, "orgId", true); - - if (StringUtils.isNotBlank(term)) { - List users = new ArrayList(); - if (orgId != null) { - // filter results according to user's roles - Organisation org = (Organisation)service.findById(Organisation.class, orgId); - Organisation group; - if (org != null) { - HttpSession session = SessionManager.getSession(); - if (session != null) { - UserDTO userDto = (UserDTO)session.getAttribute(AttributeNames.USER); - if (userDto != null) { - Integer userId = userDto.getUserID(); - if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { - group = org.getParentOrganisation(); - } else { - group = org; - } - // get search results, filtered according to orgId - if (request.isUserInRole(Role.SYSADMIN) || service.isUserGlobalGroupAdmin()) { - users = service.searchUserSingleTerm(term, orgId); - } else if (service.isUserInRole(userId, group.getOrganisationId(), Role.GROUP_ADMIN) - || service.isUserInRole(userId, group.getOrganisationId(), Role.GROUP_MANAGER)) { - if (group.getCourseAdminCanBrowseAllUsers()){ - users = service.searchUserSingleTerm(term, orgId); - } else if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { - users = service.searchUserSingleTerm(term, group.getOrganisationId(), orgId); - } - } - } - } + private static IUserManagementService service; + + @Override + public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws Exception { + + UserSearchSingleTermAction.service = AdminServiceProxy.getService(getServlet().getServletContext()); + String term = WebUtil.readStrParam(request, "term", true); + Integer orgId = WebUtil.readIntParam(request, "orgId", true); + + if (StringUtils.isNotBlank(term)) { + List users = new ArrayList(); + if (orgId != null) { + // filter results according to user's roles + Organisation org = (Organisation) UserSearchSingleTermAction.service.findById(Organisation.class, + orgId); + Organisation group; + if (org != null) { + HttpSession session = SessionManager.getSession(); + if (session != null) { + UserDTO userDto = (UserDTO) session.getAttribute(AttributeNames.USER); + if (userDto != null) { + Integer userId = userDto.getUserID(); + if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { + group = org.getParentOrganisation(); + } else { + group = org; + } + // get search results, filtered according to orgId + if (request.isUserInRole(Role.SYSADMIN) + || UserSearchSingleTermAction.service.isUserGlobalGroupAdmin()) { + users = UserSearchSingleTermAction.service.findUsers(term, orgId); + } else if (UserSearchSingleTermAction.service.isUserInRole(userId, + group.getOrganisationId(), Role.GROUP_ADMIN) + || UserSearchSingleTermAction.service.isUserInRole(userId, + group.getOrganisationId(), Role.GROUP_MANAGER)) { + if (group.getCourseAdminCanBrowseAllUsers()) { + users = UserSearchSingleTermAction.service.findUsers(term, orgId); + } else if (org.getOrganisationType().getOrganisationTypeId() + .equals(OrganisationType.CLASS_TYPE)) { + users = UserSearchSingleTermAction.service.findUsers(term, + group.getOrganisationId(), orgId); } - } else { - // if there's no orgId param, search all users - users = service.searchUserSingleTerm(term); + } } - request.setAttribute("users", users); + } } - - return mapping.findForward("basiclist"); + } else { + // if there's no orgId param, search all users + users = UserSearchSingleTermAction.service.findUsers(term); + } + request.setAttribute("users", users); } + + return mapping.findForward("basiclist"); + } } - \ No newline at end of file Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rf295ad79de8fe9d221c166fa90587d0be2fdda5b -ra627849a2ed5e825df33ae4bd8372d8c9deed13b Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/web/FindUserLessonsAction.java =================================================================== diff -u -r4ab4ba6ef63a831648ca63ca4d91edd4c0fba55f -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_central/src/java/org/lamsfoundation/lams/web/FindUserLessonsAction.java (.../FindUserLessonsAction.java) (revision 4ab4ba6ef63a831648ca63ca4d91edd4c0fba55f) +++ lams_central/src/java/org/lamsfoundation/lams/web/FindUserLessonsAction.java (.../FindUserLessonsAction.java) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -2,16 +2,14 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; @@ -42,72 +40,62 @@ * @struts.action-forward name="success-getResults" path="/findUserLessons.jsp" */ public class FindUserLessonsAction extends DispatchAction { - private static final Logger log = Logger.getLogger(FindUserLessonsAction.class); - private static IUserManagementService userManagementService; private static ILessonService lessonService; private static ISecurityService securityService; public ActionForward getResults(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { - String query = WebUtil.readStrParam(request, "query", true); - Integer courseID = WebUtil.readIntParam(request, "courseID", true); - Integer classID = WebUtil.readIntParam(request, "classID", true); + Integer courseID = WebUtil.readIntParam(request, "courseID"); - if (courseID == null) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing course ID"); - return null; - } - - User viewer = getUserManagementService().getUserByLogin(request.getRemoteUser()); + User viewer = (User) getUserManagementService().findById(User.class, getUserId()); if (!getSecurityService().isGroupMonitor(courseID, viewer.getUserId(), "find user lessons", false)) { response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a monitor in the organisation"); return null; } - if (query != null) { - Organisation group = (Organisation) getUserManagementService().findById(Organisation.class, courseID); - Set users = getUserSet(query, group); + String query = null; + List users = new LinkedList(); + Organisation group = (Organisation) getUserManagementService().findById(Organisation.class, courseID); + // if an exact user was chosen from autocomplete list, display lessons just for him + Integer userID = WebUtil.readIntParam(request, "userID", true); + if (userID != null) { + User user = (User) getUserManagementService().findById(User.class, userID); + users.add(user); + query = user.getFirstName() + " " + user.getLastName(); + } else { + // if a generic query was entered, look for all users who match the query + query = WebUtil.readStrParam(request, "query", true); + if (query != null) { + users = getUserManagementService().findUsers(query, group.getOrganisationId(), true); + } + } - Map> userLessonsMap = new HashMap>(); - for (User user : users) { - // get all lessons for 'user' in 'group' and add to lessons map - List lessons = (getLessonService().getLessonsByGroupAndUser(user.getUserId(), - group.getOrganisationId())); + Map> userLessonsMap = new HashMap>(); + for (User user : users) { + // get all lessons for 'user' in 'group' and add to lessons map + List lessons = getLessonService().getLessonsByGroupAndUser(user.getUserId(), + group.getOrganisationId()); - List lessonDTOs = new ArrayList(); - for (Lesson lesson : lessons) { - LessonDTO dto = new LessonDTO(lesson); - // flag to display monitor link only if user is staff member of lesson - dto.setDisplayMonitor(lesson.getLessonClass().isStaffMember(viewer)); - lessonDTOs.add(dto); - } - - userLessonsMap.put(user, lessonDTOs); + List lessonDTOs = new ArrayList(); + for (Lesson lesson : lessons) { + LessonDTO dto = new LessonDTO(lesson); + // flag to display monitor link only if user is staff member of lesson + dto.setDisplayMonitor(lesson.getLessonClass().isStaffMember(viewer)); + lessonDTOs.add(dto); } - request.setAttribute("userLessonsMap", userLessonsMap); + userLessonsMap.put(user, lessonDTOs); } + request.setAttribute("userLessonsMap", userLessonsMap); // set attributes request.setAttribute("courseID", courseID); - request.setAttribute("classID", classID); request.setAttribute("originalQuery", query); return mapping.findForward("success-getResults"); } - @SuppressWarnings("unchecked") - private Set getUserSet(String query, Organisation rootOrg) { - Set userSet = new HashSet(); - String[] tokens = query.trim().split("\\s+"); // Separated by "whitespace" - for (String token : tokens) { - userSet.addAll(getUserManagementService().searchUserSingleTerm(token, rootOrg.getOrganisationId(), true)); - } - - return userSet; - } - public ActionForward autocomplete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Integer courseID = WebUtil.readIntParam(request, "courseID", true); @@ -119,19 +107,20 @@ String query = WebUtil.readStrParam(request, "term", true); Organisation rootOrg = (Organisation) getUserManagementService().findById(Organisation.class, courseID); - Set userSet = getUserSet(query, rootOrg); + List userSet = getUserManagementService().findUsers(query, rootOrg.getOrganisationId(), true); JSONArray jsonArray = new JSONArray(); for (User user : userSet) { JSONObject jsonObject = new JSONObject(); - jsonObject.put("value", user.getFirstName() + " " + user.getLastName()); + jsonObject.put("label", user.getFirstName() + " " + user.getLastName()); + jsonObject.put("value", user.getUserId()); jsonArray.put(jsonObject); } response.setContentType("application/json;charset=utf-8"); response.getWriter().print(jsonArray); return null; } - + private Integer getUserId() { HttpSession ss = SessionManager.getSession(); UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); @@ -140,8 +129,8 @@ private IUserManagementService getUserManagementService() { if (FindUserLessonsAction.userManagementService == null) { - WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() - .getServletContext()); + WebApplicationContext wac = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); FindUserLessonsAction.userManagementService = (IUserManagementService) wac .getBean(CentralConstants.USER_MANAGEMENT_SERVICE_BEAN_NAME); } @@ -150,17 +139,17 @@ private ILessonService getLessonService() { if (FindUserLessonsAction.lessonService == null) { - WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() - .getServletContext()); + WebApplicationContext ctx = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); FindUserLessonsAction.lessonService = (ILessonService) ctx.getBean("lessonService"); } return FindUserLessonsAction.lessonService; } private ISecurityService getSecurityService() { if (FindUserLessonsAction.securityService == null) { - WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() - .getServletContext()); + WebApplicationContext ctx = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); FindUserLessonsAction.securityService = (ISecurityService) ctx.getBean("securityService"); } return FindUserLessonsAction.securityService; Index: lams_central/web/css/index.css =================================================================== diff -u -re3d9b5058708c037f27b31cdd1d83fe15a7d8a95 -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_central/web/css/index.css (.../index.css) (revision e3d9b5058708c037f27b31cdd1d83fe15a7d8a95) +++ lams_central/web/css/index.css (.../index.css) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -29,7 +29,7 @@ .dialogContainer iframe { width: 100%; - height: 99.4%; + height: 99%; border: none; } Index: lams_central/web/findUserLessons.jsp =================================================================== diff -u -r0b21b8479579a696c38d7de120285a08f5bf1e4e -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_central/web/findUserLessons.jsp (.../findUserLessons.jsp) (revision 0b21b8479579a696c38d7de120285a08f5bf1e4e) +++ lams_central/web/findUserLessons.jsp (.../findUserLessons.jsp) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -18,57 +18,52 @@ + li.ui-menu-item { + list-style: none; + } + - + - - - - - +
- - - - + + + +
- +
@@ -91,13 +86,18 @@
- + Index: lams_central/web/includes/javascript/groupDisplay.js =================================================================== diff -u -rf295ad79de8fe9d221c166fa90587d0be2fdda5b -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_central/web/includes/javascript/groupDisplay.js (.../groupDisplay.js) (revision f295ad79de8fe9d221c166fa90587d0be2fdda5b) +++ lams_central/web/includes/javascript/groupDisplay.js (.../groupDisplay.js) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -364,8 +364,8 @@ var id = "dialogSearchLesson" + orgID; showDialog(id, { 'orgID' : orgID, - 'height' : 400, - 'width' : 600, + 'height' : 500, + 'width' : 1000, 'title' : LABELS.SEARCH_LESSON_TITLE, 'open' : function() { var orgID = $(this).dialog('option', 'orgID'); Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java =================================================================== diff -u -r51e6dce474861837e1e86838bcbc1b1efba971e3 -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java (.../IUserDAO.java) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java (.../IUserDAO.java) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -9,24 +9,35 @@ * Interface defining User DAO methods. */ public interface IUserDAO extends IBaseDAO { + List getAllUsers(); + List findUsers(Integer filteredOrgId); + /** * 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 + * @param searchPhrase + * 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); - + List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchPhrase); + /** * Count total number of users excluding disabled ones and applying searchString filter. - * - * @param searchString - * @return */ - int getCountUsers(String searchString); -} + int getCountUsers(String searchPhrase); + + List findUsers(String searchPhrase); + + List findUsers(String searchPhrase, Integer filteredOrgId); + + List findUsers(String searchPhrase, Integer orgId, Integer filteredOrgId); + + List findUsers(String searchPhrase, Integer orgId, boolean includeChildOrgs); + + List findUsersWithEmail(String email); +} \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java =================================================================== diff -u -r51e6dce474861837e1e86838bcbc1b1efba971e3 -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java (.../UserDAO.java) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java (.../UserDAO.java) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -15,87 +15,139 @@ * Hibernate implementation of IUserDAO */ public class UserDAO extends LAMSBaseDAO implements IUserDAO { - + + @SuppressWarnings("unchecked") @Override - public List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchString) { - - String GET_USERS = "SELECT user.userId, user.login, user.firstName, user.lastName, user.email" + - " FROM " + User.class.getName() + " user " + - " WHERE user.disabledFlag=0 "; + public List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchPhrase) { + StringBuilder queryBuilder = new StringBuilder( + "SELECT user.userId, user.login, user.firstName, user.lastName, user.email FROM User user WHERE user.disabledFlag=0 "); // support for custom search from a toolbar - GET_USERS = addNameSearch(GET_USERS, searchString); + UserDAO.addNameSearch(queryBuilder, "user", searchPhrase); //order by - GET_USERS +=" ORDER BY CASE " + - " WHEN :sortBy='userId' THEN user.userId " + - " WHEN :sortBy='login' THEN user.login " + - " WHEN :sortBy='firstName' THEN user.firstName " + - " WHEN :sortBy='lastName' THEN user.lastName " + - " WHEN :sortBy='email' THEN user.email " + - " END " + sortOrder; + queryBuilder + .append(" ORDER BY CASE WHEN :sortBy='userId' THEN user.userId WHEN :sortBy='login' THEN user.login WHEN :sortBy='firstName'" + + " THEN user.firstName WHEN :sortBy='lastName' THEN user.lastName WHEN :sortBy='email' THEN user.email END ") + .append(sortOrder); - Query query = getSession().createQuery(GET_USERS); + Query query = getSession().createQuery(queryBuilder.toString()); query.setString("sortBy", sortBy); query.setFirstResult(page * size); query.setMaxResults(size); List list = query.list(); - + //group by userId as long as it returns all completed visitLogs for each user List userDtos = new ArrayList(); - if (list != null && list.size() > 0) { - for (Object[] element : list) { + for (Object[] element : list) { + Integer userId = ((Number) element[0]).intValue(); + String login = (String) element[1]; + String firstName = (String) element[2]; + String lastName = (String) element[3]; + String email = (String) element[4]; - Integer userId = ((Number) element[0]).intValue(); - String login = (String) element[1]; - String firstName = (String) element[2]; - String lastName = (String) element[3]; - String email = (String) element[4]; - - UserDTO userDto = new UserDTO(userId, firstName, lastName, login, null, null, null, email, - null, null, - null, null, null, null, - null, true, - null, false - ); + UserDTO userDto = new UserDTO(userId, firstName, lastName, login, null, null, null, email, null, null, null, + null, null, null, null, true, null, false); - userDtos.add(userDto); - } + userDtos.add(userDto); } return userDtos; } - + @Override - public int getCountUsers(String searchString) { - String GET_USERS = "SELECT count(*) FROM " + User.class.getName() + " user " - + " WHERE user.disabledFlag=0 "; + public int getCountUsers(String searchPhrase) { + StringBuilder queryBuilder = new StringBuilder("SELECT count(*) FROM User user WHERE user.disabledFlag=0 "); // support for custom search from a toolbar - GET_USERS = addNameSearch(GET_USERS, searchString); + UserDAO.addNameSearch(queryBuilder, "user", searchPhrase); - Query query = getSession().createQuery(GET_USERS); - - List list = query.list(); - if (list == null || list.size() == 0) { - return 0; - } else { - return ((Number) list.get(0)).intValue(); + Query query = getSession().createQuery(queryBuilder.toString()); + + Number count = (Number) query.uniqueResult(); + return count == null ? 0 : count.intValue(); + } + + @SuppressWarnings("unchecked") + @Override + public List findUsers(String searchPhrase) { + StringBuilder queryBuilder = new StringBuilder("SELECT u FROM User u WHERE u.disabledFlag=0 "); + UserDAO.addNameSearch(queryBuilder, "u", searchPhrase); + queryBuilder.append(" ORDER BY u.login"); + + return find(queryBuilder.toString()); + } + + @SuppressWarnings("unchecked") + @Override + public List findUsers(String searchPhrase, Integer filteredOrgId) { + StringBuilder queryBuilder = new StringBuilder( + "SELECT u FROM User u WHERE u.disabledFlag=0 AND u.userId NOT IN (SELECT uo.user.userId FROM UserOrganisation uo WHERE " + + "uo.organisation.organisationId=").append(filteredOrgId).append(")"); + UserDAO.addNameSearch(queryBuilder, "u", searchPhrase); + queryBuilder.append(" ORDER BY u.login"); + + return find(queryBuilder.toString()); + } + + @SuppressWarnings("unchecked") + @Override + public List findUsers(String searchPhrase, Integer orgId, Integer filteredOrgId) { + StringBuilder queryBuilder = new StringBuilder( + "SELECT uo.user FROM UserOrganisation uo WHERE uo.user.disabledFlag=0 AND uo.organisation.organisationId=") + .append(orgId) + .append(" AND uo.user.userId NOT IN (SELECT uo.user.userId FROM UserOrganisation uo WHERE uo.organisation.organisationId=") + .append(filteredOrgId).append(")"); + UserDAO.addNameSearch(queryBuilder, "uo.user", searchPhrase); + queryBuilder.append(" ORDER BY uo.user.login"); + + return find(queryBuilder.toString()); + } + + @SuppressWarnings("unchecked") + @Override + public List findUsers(String searchPhrase, Integer orgId, boolean includeChildOrgs) { + StringBuilder queryBuilder = new StringBuilder( + "SELECT u FROM User u WHERE u.disabledFlag=0 AND u.userId IN (SELECT uo.user.userId FROM UserOrganisation uo" + + " WHERE uo.organisation.organisationId=").append(orgId); + + if (includeChildOrgs) { + queryBuilder.append(" OR uo.organisation.parentOrganisation.organisationId=").append(orgId); } + queryBuilder.append(")"); + UserDAO.addNameSearch(queryBuilder, "u", searchPhrase); + queryBuilder.append(" ORDER BY u.login"); + + return find(queryBuilder.toString()); } - - private String addNameSearch(String query, String searchString) { - StringBuilder queryWithSearch = new StringBuilder(query); - - if (!StringUtils.isBlank(searchString)) { - String[] tokens = searchString.trim().split("\\s+"); + + @SuppressWarnings("unchecked") + @Override + public List getAllUsers() { + return find("FROM User u WHERE u.disabledFlag=0 ORDER BY u.login"); + } + + @SuppressWarnings("unchecked") + @Override + public List findUsers(Integer filteredOrgId) { + return find( + "FROM User u WHERE u.disabledFlag=0 AND u.userId NOT IN (SELECT uo.user.userId FROM UserOrganisation uo WHERE uo.organisation.organisationId=" + + filteredOrgId + ") ORDER BY u.login"); + } + + @SuppressWarnings("unchecked") + @Override + public List findUsersWithEmail(String email) { + return find("FROM User u WHERE u.email=\'" + StringEscapeUtils.escapeSql(email) + "\' ORDER BY u.login"); + } + + private static void addNameSearch(StringBuilder queryBuilder, String entityName, String searchPhrase) { + if (!StringUtils.isBlank(searchPhrase)) { + String[] tokens = StringEscapeUtils.escapeSql(searchPhrase).trim().split("\\s+"); for (String token : tokens) { String escToken = StringEscapeUtils.escapeSql(token); - queryWithSearch.append(" AND (user.firstName LIKE '%").append(escToken) - .append("%' OR user.lastName LIKE '%").append(escToken) - .append("%' OR user.login LIKE '%").append(escToken) - .append("%' OR user.email LIKE '%").append(escToken).append("%')"); + queryBuilder.append(" AND (").append(entityName).append(".firstName LIKE '%").append(escToken) + .append("%' OR ").append(entityName).append(".lastName LIKE '%").append(escToken) + .append("%' OR ").append(entityName).append(".login LIKE '%").append(escToken).append("%' OR ") + .append(entityName).append(".email LIKE '%").append(escToken).append("%')"); } } - - return queryWithSearch.toString(); } - -} +} \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -r51e6dce474861837e1e86838bcbc1b1efba971e3 -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -27,7 +27,6 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Vector; import org.lamsfoundation.lams.themes.Theme; @@ -479,7 +478,7 @@ Integer getCountUsers(); Integer getCountUsers(Integer authenticationMethodId); - + /** * Count total number of users excluding disabled ones and applying searchString filter. * @@ -499,7 +498,7 @@ * @param term * @return list of Users */ - List searchUserSingleTerm(String term); + List findUsers(String term); /** * Search users across login, first name, last name and email fields using the search term. Filters out disabled @@ -509,7 +508,7 @@ * @param filteredOrgId * @return list of Users */ - List searchUserSingleTerm(String term, Integer filteredOrgId); + List findUsers(String term, Integer filteredOrgId); /** * Search users across login, first name, last name and email fields using the search term. Filters out disabled @@ -520,7 +519,7 @@ * @param includeChildOrgs * @return list of Users */ - List searchUserSingleTerm(String term, Integer orgId, boolean includeChildOrgs); + List findUsers(String term, Integer orgId, boolean includeChildOrgs); /** * Search user members in orgId across login, first name, last name and email fields using the search term. Filters @@ -531,23 +530,24 @@ * @param filteredOrgId * @return list of Users */ - List searchUserSingleTerm(String term, Integer orgId, Integer filteredOrgId); + List findUsers(String term, Integer orgId, Integer filteredOrgId); /** * Get all users, except for disabled users. * * @return list of Users */ - List getAllUsers(); - + 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 + * @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); @@ -558,7 +558,7 @@ * @param optionalOrgId * @return list of Users */ - List getAllUsers(Integer filteredOrgId); + List getAllUsers(Integer filteredOrgId); /** * Get all users with the given Email. Email must not be empty Use a regex check to make sure the string is in @@ -567,18 +567,9 @@ * * @return list of Users */ - List getAllUsersWithEmail(String email); + List getAllUsersWithEmail(String email); /** - * Get all users in orgId, except for users that are members of filteredOrg. - * - * @param orgId - * @param filteredOrgId - * @return list of Users - */ - List getUsersFromOrganisation(Integer orgId, Integer filteredOrgId); - - /** * Tests whether user can edit the given org's details. * * @param userId Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r51e6dce474861837e1e86838bcbc1b1efba971e3 -ra627849a2ed5e825df33ae4bd8372d8c9deed13b --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 51e6dce474861837e1e86838bcbc1b1efba971e3) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision a627849a2ed5e825df33ae4bd8372d8c9deed13b) @@ -101,15 +101,15 @@ private IRoleDAO roleDAO; private IOrganisationDAO organisationDAO; - + private IUserDAO userDAO; private IUserOrganisationDAO userOrganisationDAO; protected MessageService messageService; private static IAuditService auditService; - + // --------------------------------------------------------------------- // Service Methods // --------------------------------------------------------------------- @@ -1096,13 +1096,13 @@ String message = messageService.getMessage("audit.user.create", args); getAuditService().log(moduleName, message); } - + @Override public Integer getCountUsers() { String query = "SELECT count(u) FROM User u"; return getFindIntegerResult(query); } - + @Override public int getCountUsers(String searchString) { return userDAO.getCountUsers(searchString); @@ -1162,89 +1162,46 @@ } @Override - public List searchUserSingleTerm(String term) { - term = StringEscapeUtils.escapeSql(term); - String query = "select u from User u where (u.login like '%" + term + "%' or u.firstName like '%" + term - + "%' or u.lastName like '%" + term + "%' or u.email like '%" + term + "%')" - + " and u.disabledFlag=0 order by u.login"; - List list = baseDAO.find(query); - return list; + public List findUsers(String searchPhrase) { + return userDAO.findUsers(searchPhrase); } @Override - public List searchUserSingleTerm(String term, Integer filteredOrgId) { - term = StringEscapeUtils.escapeSql(term); - String query = "select u from User u where (u.login like '%" + term + "%' or u.firstName like '%" + term - + "%' or u.lastName like '%" + term + "%' or u.email like '%" + term + "%')" - + " and u.disabledFlag=0 and u.userId not in (select uo.user.userId from UserOrganisation uo" - + " where uo.organisation.organisationId=" + filteredOrgId + ") order by u.login"; - List list = baseDAO.find(query); - return list; + public List findUsers(String searchPhrase, Integer filteredOrgId) { + return userDAO.findUsers(searchPhrase, filteredOrgId); } @Override - public List searchUserSingleTerm(String term, Integer orgId, Integer filteredOrgId) { - term = StringEscapeUtils.escapeSql(term); - String query = "select uo.user from UserOrganisation uo where (uo.user.login like '%" + term + "%'" - + " or uo.user.firstName like '%" + term + "%' or uo.user.lastName like '%" + term + "%'" - + " or uo.user.email like '%" + term + "%') and uo.user.disabledFlag=0" - + " and uo.organisation.organisationId=" + orgId + " and uo.user.userId not in" - + " (select uo.user.userId from UserOrganisation uo where uo.organisation.organisationId=" - + filteredOrgId + ") order by uo.user.login"; - List list = baseDAO.find(query); - return list; + public List findUsers(String searchPhrase, Integer orgId, Integer filteredOrgId) { + return userDAO.findUsers(searchPhrase, orgId, filteredOrgId); } @Override - public List searchUserSingleTerm(String term, Integer orgId, boolean includeChildOrgs) { - term = StringEscapeUtils.escapeSql(term); - String whereClause = ""; - if (includeChildOrgs) { - whereClause = " or uo.organisation.parentOrganisation.organisationId=" + orgId; - } - - String query = "select u from User u where (u.login like '%" + term + "%' or u.firstName like '%" + term - + "%' or u.lastName like '%" + term + "%' or u.email like '%" + term + "%')" - + " and u.disabledFlag=0 and u.userId in (select uo.user.userId from UserOrganisation uo" - + " where uo.organisation.organisationId=" + orgId + whereClause + ") order by u.login"; - List list = baseDAO.find(query); - return list; + public List findUsers(String searchPhrase, Integer orgId, boolean includeChildOrgs) { + return userDAO.findUsers(searchPhrase, orgId, includeChildOrgs); } @Override - public List getAllUsers() { - String query = "from User u where u.disabledFlag=0 order by u.login"; - return baseDAO.find(query); + public List getAllUsers() { + return userDAO.getAllUsers(); } - + @Override - public List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchString) { + 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) { - String query = "from User u where u.disabledFlag=0 and u.userId not in" - + " (select uo.user.userId from UserOrganisation uo where uo.organisation.organisationId=" - + filteredOrgId + ")" + " order by u.login"; - return baseDAO.find(query); + public List getAllUsers(Integer filteredOrgId) { + return userDAO.findUsers(filteredOrgId); } @Override - public List getAllUsersWithEmail(String email) { - String query = "from User u where u.email=\'" + email + "\' order by u.login"; - return baseDAO.find(query); + public List getAllUsersWithEmail(String email) { + return userDAO.findUsersWithEmail(email); } @Override - public List getUsersFromOrganisation(Integer orgId, Integer filteredOrgId) { - String query = "select uo.user from UserOrganisation uo where uo.organisation.organisationId=" + orgId - + " and uo.user.userId not in (select uo.user.userId from UserOrganisation uo" - + " where uo.organisation.organisationId=" + filteredOrgId + ") order by uo.user.login"; - return baseDAO.find(query); - } - - @Override public boolean canEditGroup(Integer userId, Integer orgId) { if (isUserSysAdmin() || isUserGlobalGroupAdmin()) { return true; @@ -1273,12 +1230,13 @@ return uos.size(); } + @SuppressWarnings("unchecked") @Override public User getUserDTOByOpenidURL(String openidURL) { - List results = baseDAO.findByProperty(User.class, "openidURL", openidURL); + List results = baseDAO.findByProperty(User.class, "openidURL", openidURL); return results.isEmpty() ? null : (User) results.get(0); } - + // --------------------------------------------------------------------- // Inversion of Control Methods - Method injection // --------------------------------------------------------------------- @@ -1305,7 +1263,7 @@ public void setOrganisationDAO(IOrganisationDAO organisationDAO) { this.organisationDAO = organisationDAO; } - + public void setUserDAO(IUserDAO userDAO) { this.userDAO = userDAO; }