Index: lams_admin/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r1e56f3aea99f6dd9c95b548e73d4696a992c25d7 -r44d47567374abedca7e5fcdd217209d30cc69c66 --- lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 1e56f3aea99f6dd9c95b548e73d4696a992c25d7) +++ lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 44d47567374abedca7e5fcdd217209d30cc69c66) @@ -544,4 +544,6 @@ admin.org.password.change.error.prefix.staff =Authors/monitors password admin.org.password.change.error.prefix.learners =Authors/monitors password admin.org.password.change.success =Passwords successfully changed +admin.org.password.change.email.subject =LAMS password change +admin.org.password.change.email.body =Your password has been changed to: {0}\n\n-- email sent automatically by LAMS #======= End labels: Exported 511 labels for en AU ===== Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java =================================================================== diff -u -r83743057f72d69e4319966e7afb674712e8be3b0 -r44d47567374abedca7e5fcdd217209d30cc69c66 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java (.../OrgPasswordChangeAction.java) (revision 83743057f72d69e4319966e7afb674712e8be3b0) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/OrgPasswordChangeAction.java (.../OrgPasswordChangeAction.java) (revision 44d47567374abedca7e5fcdd217209d30cc69c66) @@ -46,13 +46,15 @@ import org.apache.tomcat.util.json.JSONObject; import org.lamsfoundation.lams.admin.AdminConstants; import org.lamsfoundation.lams.admin.service.AdminServiceProxy; +import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.integration.security.RandomPasswordGenerator; import org.lamsfoundation.lams.usermanagement.Organisation; 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.HashUtil; +import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.ValidationUtil; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; @@ -172,7 +174,6 @@ Boolean isStaffChange = (Boolean) passForm.get("isStaffChange"); Boolean isLearnerChange = (Boolean) passForm.get("isLearnerChange"); - Set changedUserIDs = new HashSet(); // get data needed for each group if (isStaffChange) { JSONArray excludedStaff = new JSONArray((String) passForm.get("excludedStaff")); @@ -181,22 +182,36 @@ // 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)); - changedUserIDs.addAll(changePassword(staffPass, users, excludedStaff, force, email)); + Collection changedUserIDs = changePassword(staffPass, users, excludedStaff, force); + if (email && !changedUserIDs.isEmpty()) { + notifyOnPasswordChange(changedUserIDs, staffPass); + } } if (isLearnerChange) { JSONArray excludedLearners = new JSONArray((String) passForm.get("excludedLearners")); String learnerPass = (String) passForm.get("learnerPass"); Collection users = userManagementService.getUsersFromOrganisationByRole(organisationID, Role.LEARNER, true); - changedUserIDs.addAll(changePassword(learnerPass, users, excludedLearners, force, email)); + Collection changedUserIDs = changePassword(learnerPass, users, excludedLearners, force); + if (email && !changedUserIDs.isEmpty()) { + notifyOnPasswordChange(changedUserIDs, learnerPass); + } } request.setAttribute("success", true); return mapping.findForward("display"); } - private Set changePassword(String password, Collection users, JSONArray excludedUsers, boolean force, - boolean email) throws JSONException { + private void notifyOnPasswordChange(Collection userIDs, String password) { + MessageService messageService = AdminServiceProxy.getMessageService(getServlet().getServletContext()); + AdminServiceProxy.getEventNotificationService(getServlet().getServletContext()).sendMessage(null, + userIDs.toArray(new Integer[] {}), IEventNotificationService.DELIVERY_METHOD_MAIL, + messageService.getMessage("admin.org.password.change.email.subject"), + messageService.getMessage("admin.org.password.change.email.body", new String[] { password }), false); + } + + private Set changePassword(String password, Collection users, JSONArray excludedUsers, boolean force) + throws JSONException { if (!ValidationUtil.isPasswordValueValid(password, password)) { // this should have been picked up by JS validator on the page! throw new InvalidParameterException("Password does not pass validation");