Index: lams_admin/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r123a342fd0ad050be52a22a4a200c3c5b4a48919 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 123a342fd0ad050be52a22a4a200c3c5b4a48919) +++ lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -535,4 +535,8 @@ admin.org.password.change.email =Email new password admin.org.password.change.force =Force change password after login admin.org.password.change.custom =Enter own password or generate one +admin.org.password.change.grid.login =Login +admin.org.password.change.grid.name =Name +admin.org.password.change.grid.email =Email +admin.org.password.change.grid.error.load =Error while loading users into grid #======= End labels: Exported 511 labels for en AU ===== Index: lams_admin/src/java/org/lamsfoundation/lams/admin/AdminConstants.java =================================================================== diff -u -rc85b9ea4c571975cfc2755f4a4a946c0c20ce756 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_admin/src/java/org/lamsfoundation/lams/admin/AdminConstants.java (.../AdminConstants.java) (revision c85b9ea4c571975cfc2755f4a4a946c0c20ce756) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/AdminConstants.java (.../AdminConstants.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -21,7 +21,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.admin; public class AdminConstants { @@ -32,4 +31,17 @@ public static final String START_MONITOR_LINKS = "server.monitor.title"; public static final String START_COURSE_LINKS = "user.course.title"; + public static final String PARAM_PAGE = "page"; + public static final String PARAM_ROWS = "rows"; + public static final String PARAM_SIDX = "sidx"; + public static final String PARAM_SORD = "sord"; + + // XML Elemetns + public static final String ELEMENT_ROWS = "rows"; + public static final String ELEMENT_PAGE = "page"; + public static final String ELEMENT_TOTAL = "total"; + public static final String ELEMENT_RECORDS = "records"; + public static final String ELEMENT_ROW = "row"; + public static final String ELEMENT_ID = "id"; + public static final String ELEMENT_CELL = "cell"; } Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java =================================================================== diff -u -ra8aca70caaf4061a12aede0a2f7a9c608e7766e9 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java (.../OrgPasswordChangeAction.java) (revision a8aca70caaf4061a12aede0a2f7a9c608e7766e9) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java (.../OrgPasswordChangeAction.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -24,21 +24,30 @@ package org.lamsfoundation.lams.admin.web.action; import java.io.IOException; +import java.util.List; 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; import org.apache.struts.action.DynaActionForm; import org.apache.struts.actions.DispatchAction; +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.AdminConstants; import org.lamsfoundation.lams.admin.service.AdminServiceProxy; import org.lamsfoundation.lams.integration.security.RandomPasswordGenerator; import org.lamsfoundation.lams.usermanagement.Organisation; +import org.lamsfoundation.lams.usermanagement.Role; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; public class OrgPasswordChangeAction extends DispatchAction { @@ -67,4 +76,73 @@ response.getWriter().print(RandomPasswordGenerator.nextPasswordValidated()); return null; } + + public ActionForward getGridUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, JSONException { + Integer organisationID = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID); + String role = WebUtil.readStrParam(request, AttributeNames.PARAM_ROLE); + + UserDTO userDTO = getUserDTO(); + Integer currentUserId = userDTO.getUserID(); + if (!AdminServiceProxy.getSecurityService(getServlet().getServletContext()).isSysadmin(currentUserId, + "get grid users for org password change", false)) { + String warning = "User " + currentUserId + " is not a sysadmin"; + log.warn(warning); + response.sendError(HttpServletResponse.SC_FORBIDDEN, warning); + return null; + } + + int page = WebUtil.readIntParam(request, AdminConstants.PARAM_PAGE); + int rowLimit = WebUtil.readIntParam(request, AdminConstants.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, AdminConstants.PARAM_SORD); + 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); + + // 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(); + + 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(); + rowJSON.put(AdminConstants.ELEMENT_ID, user.getUserID()); + + JSONArray cellJSON = new JSONArray(); + cellJSON.put(user.getFirstName() + " " + user.getLastName()); + cellJSON.put(user.getLogin()); + cellJSON.put(user.getEmail()); + + rowJSON.put(AdminConstants.ELEMENT_CELL, cellJSON); + rowsJSON.put(rowJSON); + } + + resultJSON.put(AdminConstants.ELEMENT_ROWS, rowsJSON); + + response.setContentType("application/json;charset=utf-8"); + response.getWriter().print(resultJSON.toString()); + return null; + } + + private UserDTO getUserDTO() { + HttpSession ss = SessionManager.getSession(); + return (UserDTO) ss.getAttribute(AttributeNames.USER); + } } Index: lams_admin/web/orgPasswordChange.jsp =================================================================== diff -u -r13efe0379f55672b6ba5bb6bdd0619b006f64d79 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_admin/web/orgPasswordChange.jsp (.../orgPasswordChange.jsp) (revision 13efe0379f55672b6ba5bb6bdd0619b006f64d79) +++ lams_admin/web/orgPasswordChange.jsp (.../orgPasswordChange.jsp) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -10,6 +10,7 @@ <%=Configuration.get(ConfigurationKeys.PASSWORD_POLICY_SYMBOLS)%> + <%-- javascript --%> + @@ -173,51 +232,57 @@ -
- - - - + + + + +
- - +
+
+ +
+
+ +
+
+ + + + - - - - -
+
+ +
- - + +
+ +
- -
-
- -
-
- -
-
+
+
+
+
+
\ No newline at end of file Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rccae5ec14269c8b244a2d0af05bc0050483fbfeb -ra031d818f691be81b838500d20f61a17f257e7f9 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java =================================================================== diff -u -r5773f84ed608838de3521ecde87c52f3c72d478c -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java (.../IUserDAO.java) (revision 5773f84ed608838de3521ecde87c52f3c72d478c) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/IUserDAO.java (.../IUserDAO.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -26,6 +26,9 @@ */ List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchPhrase); + List getAllUsersPaged(Integer organisationID, String[] roleNames, int page, int size, String sortBy, + String sortOrder, String searchPhrase); + /** * Count total number of users excluding disabled ones and applying searchString filter. */ @@ -40,4 +43,5 @@ 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/IRoleDAO.java =================================================================== diff -u -r60e44b19b8de02a00faa437fba8117928baa3d73 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/IRoleDAO.java (.../IRoleDAO.java) (revision 60e44b19b8de02a00faa437fba8117928baa3d73) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/IRoleDAO.java (.../IRoleDAO.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -33,5 +33,5 @@ public interface IRoleDAO extends IBaseDAO { User getUserByOrganisationAndRole(Integer userId, Integer roleId, Organisation organisation); - Integer getCountRoleForOrg(Integer roleId, Integer orgId, String searchPhrase); + Integer getCountRoleForOrg(Integer[] roleIds, Integer orgId, String searchPhrase); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/RoleDAO.java =================================================================== diff -u -r60e44b19b8de02a00faa437fba8117928baa3d73 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/RoleDAO.java (.../RoleDAO.java) (revision 60e44b19b8de02a00faa437fba8117928baa3d73) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/RoleDAO.java (.../RoleDAO.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -45,7 +45,7 @@ + "uor.role.id = :roleId"; private final static String COUNT_ROLE_FOR_ORG = "select count(distinct uor.userOrganisation.user) from " - + UserOrganisationRole.class.getName() + " uor where uor.role.roleId = :roleId" + + UserOrganisationRole.class.getName() + " uor where uor.role.roleId IN (:roleIds)" + " and uor.userOrganisation.organisation.organisationId = :orgId"; @Override @@ -55,7 +55,7 @@ } @Override - public Integer getCountRoleForOrg(Integer roleId, Integer orgId, String searchPhrase) { + public Integer getCountRoleForOrg(Integer[] roleIds, Integer orgId, String searchPhrase) { StringBuilder queryTextBuilder = new StringBuilder(RoleDAO.COUNT_ROLE_FOR_ORG); if (!StringUtils.isBlank(searchPhrase)) { String[] tokens = searchPhrase.trim().split("\\s+"); @@ -67,7 +67,7 @@ } Query query = getSession().createQuery(queryTextBuilder.toString()); - query.setInteger("roleId", roleId.intValue()); + query.setParameterList("roleIds", roleIds); query.setInteger("orgId", orgId.intValue()); Object value = query.uniqueResult(); return new Integer(((Number) value).intValue()); Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java =================================================================== diff -u -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java (.../UserDAO.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java (.../UserDAO.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -16,32 +16,58 @@ */ public class UserDAO extends LAMSBaseDAO implements IUserDAO { - @SuppressWarnings("unchecked") @Override public List getAllUsersPaged(int page, int 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) { + 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; + // see if roles are required and build a condition + String roleNamesCondition = null; + if (roleNames != null) { + roleNamesCondition = "("; + for (String role : roleNames) { + roleNamesCondition += "'" + role + "',"; + } + roleNamesCondition = roleNamesCondition.substring(0, roleNamesCondition.length() - 1) + ") "; + } + if (roleNamesCondition != null) { + query += " AND r.role.name IN " + roleNamesCondition; + } + return getAllUsersPage(query, "uo.user", page, size, sortBy, sortOrder, searchPhrase); + } + + @SuppressWarnings("unchecked") + private List getAllUsersPage(String queryText, String entityName, int page, int size, String sortBy, + String sortOrder, String searchPhrase) { switch (sortBy) { case "userId": - sortBy = "user.userId + 0 "; + sortBy = entityName + ".userId + 0 "; break; case "login": - sortBy = "user.login "; + sortBy = entityName + ".login "; break; case "firstName": - sortBy = "user.firstName "; + sortBy = entityName + ".firstName "; break; case "lastName": - sortBy = "user.lastName "; + sortBy = entityName + ".lastName "; break; case "email": - sortBy = "user.email "; + sortBy = entityName + ".email "; break; } - StringBuilder queryBuilder = new StringBuilder( - "SELECT user.userId, user.login, user.firstName, user.lastName, user.email, user.portraitUuid FROM User user WHERE user.disabledFlag=0 "); + StringBuilder queryBuilder = new StringBuilder(queryText); // support for custom search from a toolbar - UserDAO.addNameSearch(queryBuilder, "user", searchPhrase); + UserDAO.addNameSearch(queryBuilder, entityName, searchPhrase); //order by queryBuilder.append(" ORDER BY ").append(sortBy).append(sortOrder); Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -ra4fd7ba340a2beac7436660039f13b9c8708f172 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision a4fd7ba340a2beac7436660039f13b9c8708f172) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -377,6 +377,8 @@ */ Integer getCountRoleForOrg(Integer orgId, Integer roleId, String searchPhrase); + Integer getCountRoleForOrg(Integer orgId, Integer[] roleIds, String searchPhrase); + /** * Get default html theme of server. * @@ -466,6 +468,9 @@ */ List getAllUsersPaged(int page, int size, String sortBy, String sortOrder, String searchString); + List getAllUsersPaged(Integer organisationID, String[] roleNames, 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 -r3e90dd984595eb1678e0768267949614f2e670a6 -ra031d818f691be81b838500d20f61a17f257e7f9 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 3e90dd984595eb1678e0768267949614f2e670a6) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision a031d818f691be81b838500d20f61a17f257e7f9) @@ -871,8 +871,8 @@ } @Override - public Integer getCountRoleForOrg(Integer orgId, Integer roleId, String searchPhrase) { - Integer count = roleDAO.getCountRoleForOrg(roleId, orgId, searchPhrase); + public Integer getCountRoleForOrg(Integer orgId, Integer[] roleIds, String searchPhrase) { + Integer count = roleDAO.getCountRoleForOrg(roleIds, orgId, searchPhrase); if (count != null) { return count; } else { @@ -881,6 +881,11 @@ } @Override + public Integer getCountRoleForOrg(Integer orgId, Integer roleId, String searchPhrase) { + return getCountRoleForOrg(orgId, new Integer[] { roleId }, searchPhrase); + } + + @Override public Theme getDefaultTheme() { String htmlName = Configuration.get(ConfigurationKeys.DEFAULT_THEME); List list = findByProperty(Theme.class, "name", "defaultHTML"); @@ -972,6 +977,12 @@ } @Override + public List getAllUsersPaged(Integer organisationID, String[] roleNames, int page, int size, String sortBy, + String sortOrder, String searchString) { + return userDAO.getAllUsersPaged(organisationID, roleNames, page, size, sortBy, sortOrder, searchString); + } + + @Override public List getAllUsers(Integer filteredOrgId) { return userDAO.findUsers(filteredOrgId); }