Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java =================================================================== diff -u -r44d47567374abedca7e5fcdd217209d30cc69c66 -r376e99b362b0ea18df73f848d310201270b26239 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java (.../OrgPasswordChangeAction.java) (revision 44d47567374abedca7e5fcdd217209d30cc69c66) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java (.../OrgPasswordChangeAction.java) (revision 376e99b362b0ea18df73f848d310201270b26239) @@ -27,6 +27,7 @@ import java.security.InvalidParameterException; import java.util.Collection; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.TreeSet; @@ -109,28 +110,31 @@ String sortColumn = WebUtil.readStrParam(request, AdminConstants.PARAM_SIDX, true); // fetch staff or learners - IUserManagementService userManagementService = AdminServiceProxy.getService(getServlet().getServletContext()); - String[] roles = role.equals("staff") ? new String[] { Role.AUTHOR, Role.MONITOR } - : new String[] { Role.LEARNER }; - List users = userManagementService.getAllUsersPaged(organisationID, roles, page - 1, rowLimit, - sortColumn, sortOrder, null); + List users = getUsersByRole(organisationID, role.equalsIgnoreCase("staff"), sortColumn, sortOrder); - // prepare data needed for paging - int totalUsers = userManagementService.getCountRoleForOrg(organisationID, - role.equals("staff") ? new Integer[] { Role.ROLE_AUTHOR, Role.ROLE_MONITOR } - : new Integer[] { Role.ROLE_LEARNER }, - null); - int totalPages = new Double( - Math.ceil(new Integer(totalUsers).doubleValue() / new Integer(rowLimit).doubleValue())).intValue(); + // paging + int totalPages = 1; + int totalUsers = users.size(); + if (rowLimit < users.size()) { + totalPages = new Double( + Math.ceil(new Integer(users.size()).doubleValue() / new Integer(rowLimit).doubleValue())) + .intValue(); + int firstRow = (page - 1) * rowLimit; + int lastRow = firstRow + rowLimit; - JSONObject resultJSON = new JSONObject(); + if (lastRow > users.size()) { + users = users.subList(firstRow, users.size()); + } else { + users = users.subList(firstRow, lastRow); + } + } + JSONObject resultJSON = new JSONObject(); resultJSON.put(AdminConstants.ELEMENT_PAGE, page); resultJSON.put(AdminConstants.ELEMENT_TOTAL, totalPages); resultJSON.put(AdminConstants.ELEMENT_RECORDS, totalUsers); JSONArray rowsJSON = new JSONArray(); - // build rows for grid for (UserDTO user : users) { JSONObject rowJSON = new JSONObject(); @@ -152,7 +156,6 @@ return null; } - @SuppressWarnings({ "unchecked" }) public ActionForward changePassword(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, JSONException { UserDTO userDTO = getUserDTO(); @@ -166,7 +169,6 @@ return null; } - IUserManagementService userManagementService = AdminServiceProxy.getService(getServlet().getServletContext()); DynaActionForm passForm = (DynaActionForm) form; Integer organisationID = (Integer) passForm.get(AttributeNames.PARAM_ORGANISATION_ID); Boolean email = (Boolean) passForm.get("email"); @@ -178,10 +180,7 @@ if (isStaffChange) { JSONArray excludedStaff = new JSONArray((String) passForm.get("excludedStaff")); String staffPass = (String) passForm.get("staffPass"); - Set users = new HashSet(); - // get users from both roles and add them to the same set - users.addAll(userManagementService.getUsersFromOrganisationByRole(organisationID, Role.AUTHOR, true)); - users.addAll(userManagementService.getUsersFromOrganisationByRole(organisationID, Role.MONITOR, true)); + Collection users = getUsersByRole(organisationID, true); Collection changedUserIDs = changePassword(staffPass, users, excludedStaff, force); if (email && !changedUserIDs.isEmpty()) { notifyOnPasswordChange(changedUserIDs, staffPass); @@ -190,8 +189,7 @@ if (isLearnerChange) { JSONArray excludedLearners = new JSONArray((String) passForm.get("excludedLearners")); String learnerPass = (String) passForm.get("learnerPass"); - Collection users = userManagementService.getUsersFromOrganisationByRole(organisationID, Role.LEARNER, - true); + Collection users = getUsersByRole(organisationID, false); Collection changedUserIDs = changePassword(learnerPass, users, excludedLearners, force); if (email && !changedUserIDs.isEmpty()) { notifyOnPasswordChange(changedUserIDs, learnerPass); @@ -244,6 +242,47 @@ return changedUserIDs; } + /** + * Get unsorted users for password change + */ + @SuppressWarnings("unchecked") + private List getUsersByRole(Integer organisationID, boolean isStaff) { + IUserManagementService userManagementService = AdminServiceProxy.getService(getServlet().getServletContext()); + Set staff = new HashSet(); + staff.addAll(userManagementService.getUsersFromOrganisationByRole(organisationID, Role.AUTHOR, true)); + staff.addAll(userManagementService.getUsersFromOrganisationByRole(organisationID, Role.MONITOR, true)); + + Set users = null; + if (isStaff) { + users = staff; + } else { + users = new HashSet(); + users.addAll(userManagementService.getUsersFromOrganisationByRole(organisationID, Role.LEARNER, true)); + users.removeAll(staff); + } + return new LinkedList(users); + } + + /** + * Gets sorted users for grids + */ + private List getUsersByRole(Integer organisationID, boolean isStaff, String sortBy, String sortOrder) { + IUserManagementService userManagementService = AdminServiceProxy.getService(getServlet().getServletContext()); + List staff = userManagementService.getAllUsers(organisationID, + new String[] { Role.AUTHOR, Role.MONITOR }, null, null, sortBy, sortOrder, null); + + List users = null; + if (isStaff) { + users = staff; + } else { + users = new LinkedList(); + users.addAll(userManagementService.getAllUsers(organisationID, new String[] { Role.LEARNER }, null, null, + sortBy, sortOrder, null)); + users.removeAll(staff); + } + return users; + } + private UserDTO getUserDTO() { HttpSession ss = SessionManager.getSession(); return (UserDTO) ss.getAttribute(AttributeNames.USER); Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserSearchAction.java =================================================================== diff -u -r308fb7d9a200f08fb3151fbb42c9ea659f4e8ecb -r376e99b362b0ea18df73f848d310201270b26239 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserSearchAction.java (.../UserSearchAction.java) (revision 308fb7d9a200f08fb3151fbb42c9ea659f4e8ecb) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/UserSearchAction.java (.../UserSearchAction.java) (revision 376e99b362b0ea18df73f848d310201270b26239) @@ -118,7 +118,7 @@ sortOrder = isSort5.equals(0) ? "ASC" : "DESC"; } - List userDtos = service.getAllUsersPaged(page, size, sortBy, sortOrder, searchString); + List userDtos = service.getAllUsers(page, size, sortBy, sortOrder, searchString); JSONObject responcedata = new JSONObject(); responcedata.put("total_rows", service.getCountUsers(searchString)); Index: lams_admin/web/orgPasswordChange.jsp =================================================================== diff -u -r83743057f72d69e4319966e7afb674712e8be3b0 -r376e99b362b0ea18df73f848d310201270b26239 --- lams_admin/web/orgPasswordChange.jsp (.../orgPasswordChange.jsp) (revision 83743057f72d69e4319966e7afb674712e8be3b0) +++ lams_admin/web/orgPasswordChange.jsp (.../orgPasswordChange.jsp) (revision 376e99b362b0ea18df73f848d310201270b26239) @@ -40,6 +40,10 @@ padding-right: 50px; } + .gridCell { + vertical-align: top; + } + .jqgh_cbox { visibility: hidden; } @@ -354,10 +358,10 @@ - +
- +
Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r1e56f3aea99f6dd9c95b548e73d4696a992c25d7 -r376e99b362b0ea18df73f848d310201270b26239 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java =================================================================== diff -u -ra031d818f691be81b838500d20f61a17f257e7f9 -r376e99b362b0ea18df73f848d310201270b26239 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java (.../IUserDAO.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java (.../IUserDAO.java) (revision 376e99b362b0ea18df73f848d310201270b26239) @@ -24,10 +24,10 @@ * 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 searchPhrase); + List getAllUsersPaged(Integer page, Integer size, String sortBy, String sortOrder, String searchPhrase); - List getAllUsersPaged(Integer organisationID, String[] roleNames, int page, int size, String sortBy, - String sortOrder, String searchPhrase); + List getAllUsersPaged(Integer organisationID, String[] roleNames, Integer page, Integer size, + String sortBy, String sortOrder, String searchPhrase); /** * Count total number of users excluding disabled ones and applying searchString filter. Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java =================================================================== diff -u -ra031d818f691be81b838500d20f61a17f257e7f9 -r376e99b362b0ea18df73f848d310201270b26239 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java (.../UserDAO.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java (.../UserDAO.java) (revision 376e99b362b0ea18df73f848d310201270b26239) @@ -17,15 +17,16 @@ public class UserDAO extends LAMSBaseDAO implements IUserDAO { @Override - public List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchPhrase) { + public List getAllUsersPaged(Integer page, Integer size, String sortBy, String sortOrder, + String searchPhrase) { return getAllUsersPage( "SELECT user.userId, user.login, user.firstName, user.lastName, user.email, user.portraitUuid FROM User user WHERE user.disabledFlag=0 ", "user", page, size, sortBy, sortOrder, searchPhrase); } @Override - public List getAllUsersPaged(Integer organisationID, String[] roleNames, int page, int size, String sortBy, - String sortOrder, String searchPhrase) { + public List getAllUsersPaged(Integer organisationID, String[] roleNames, Integer page, Integer size, + String sortBy, String sortOrder, String searchPhrase) { String query = "SELECT DISTINCT uo.user.userId, uo.user.login, uo.user.firstName, uo.user.lastName, uo.user.email, uo.user.portraitUuid " + "FROM UserOrganisation uo INNER JOIN uo.userOrganisationRoles r WHERE uo.organisation.organisationId=" + organisationID; @@ -45,8 +46,8 @@ } @SuppressWarnings("unchecked") - private List getAllUsersPage(String queryText, String entityName, int page, int size, String sortBy, - String sortOrder, String searchPhrase) { + private List getAllUsersPage(String queryText, String entityName, Integer page, Integer size, + String sortBy, String sortOrder, String searchPhrase) { switch (sortBy) { case "userId": sortBy = entityName + ".userId + 0 "; @@ -72,8 +73,12 @@ queryBuilder.append(" ORDER BY ").append(sortBy).append(sortOrder); Query query = getSession().createQuery(queryBuilder.toString()); - query.setFirstResult(page * size); - query.setMaxResults(size); + if (size != null) { + query.setMaxResults(size); + if (page != null) { + query.setFirstResult(page * size); + } + } List list = query.list(); //group by userId as long as it returns all completed visitLogs for each user Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -ra031d818f691be81b838500d20f61a17f257e7f9 -r376e99b362b0ea18df73f848d310201270b26239 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 376e99b362b0ea18df73f848d310201270b26239) @@ -466,9 +466,9 @@ * 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 getAllUsers(Integer page, Integer size, String sortBy, String sortOrder, String searchString); - List getAllUsersPaged(Integer organisationID, String[] roleNames, int page, int size, String sortBy, + List getAllUsers(Integer organisationID, String[] roleNames, Integer page, Integer size, String sortBy, String sortOrder, String searchString); /** Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -ra031d818f691be81b838500d20f61a17f257e7f9 -r376e99b362b0ea18df73f848d310201270b26239 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 376e99b362b0ea18df73f848d310201270b26239) @@ -972,13 +972,13 @@ } @Override - public List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchString) { + public List getAllUsers(Integer page, Integer size, String sortBy, String sortOrder, String searchString) { return userDAO.getAllUsersPaged(page, size, sortBy, sortOrder, searchString); } @Override - public List getAllUsersPaged(Integer organisationID, String[] roleNames, int page, int size, String sortBy, - String sortOrder, String searchString) { + public List getAllUsers(Integer organisationID, String[] roleNames, Integer page, Integer size, + String sortBy, String sortOrder, String searchString) { return userDAO.getAllUsersPaged(organisationID, roleNames, page, size, sortBy, sortOrder, searchString); }