Index: lams_monitoring/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rd0b6f213cba1026b0c9fdbdaa5dd44a49eddd3aa -red51fdeae3971806e0896c8a7d82ba01df591ffe --- lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision d0b6f213cba1026b0c9fdbdaa5dd44a49eddd3aa) +++ lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision ed51fdeae3971806e0896c8a7d82ba01df591ffe) @@ -316,6 +316,10 @@ learner.group.forward.10 =10 pages forward learner.group.backward.1 =Previous page learner.group.backward.10 =10 pages back +email.notify.students.that=Notify students that +email.notifications.delete=Delete Notification +email.notification.delete.alert1=About to delete the scheduled notification: {0} +email.notification.delete.alert2=This cannot be undone. Do you want to delete? #======= End labels: Exported 310 labels for en AU ===== Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/EmailScheduleMessageJobDTO.java =================================================================== diff -u -rd0b6f213cba1026b0c9fdbdaa5dd44a49eddd3aa -red51fdeae3971806e0896c8a7d82ba01df591ffe --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/EmailScheduleMessageJobDTO.java (.../EmailScheduleMessageJobDTO.java) (revision d0b6f213cba1026b0c9fdbdaa5dd44a49eddd3aa) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/EmailScheduleMessageJobDTO.java (.../EmailScheduleMessageJobDTO.java) (revision ed51fdeae3971806e0896c8a7d82ba01df591ffe) @@ -31,6 +31,7 @@ public class EmailScheduleMessageJobDTO implements Serializable, Comparable { + private String triggerName; private Date triggerDate; private String emailBody; private int searchType; @@ -59,17 +60,25 @@ this.searchType = searchType; } + public String getTriggerName() { + return triggerName; + } + + public void setTriggerName(String triggerName) { + this.triggerName = triggerName; + } + @Override public String toString() { - return new ToStringBuilder(this).append("emailBody", emailBody).append("triggerDate", triggerDate) + return new ToStringBuilder(this).append("triggerName", triggerName).append("emailBody", emailBody).append("triggerDate", triggerDate) .append("searchType", searchType).toString(); } @Override public int compareTo(Object other) { EmailScheduleMessageJobDTO otherDto = (EmailScheduleMessageJobDTO) other; return new CompareToBuilder().append(triggerDate, otherDto.triggerDate).append(emailBody, otherDto.emailBody) - .append(searchType, otherDto.searchType).toComparison(); + .append(searchType, otherDto.searchType).append("triggerName", triggerName).toComparison(); } } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java =================================================================== diff -u -rd0b6f213cba1026b0c9fdbdaa5dd44a49eddd3aa -red51fdeae3971806e0896c8a7d82ba01df591ffe --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java (.../EmailNotificationsAction.java) (revision d0b6f213cba1026b0c9fdbdaa5dd44a49eddd3aa) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java (.../EmailNotificationsAction.java) (revision ed51fdeae3971806e0896c8a7d82ba01df591ffe) @@ -224,6 +224,7 @@ String emailBody = WebUtil.convertNewlines((String) jobDataMap.get("emailBody")); int searchType = (Integer) jobDataMap.get("searchType"); EmailScheduleMessageJobDTO emailScheduleJobDTO = new EmailScheduleMessageJobDTO(); + emailScheduleJobDTO.setTriggerName(triggerName); emailScheduleJobDTO.setTriggerDate(triggerDate); emailScheduleJobDTO.setEmailBody(emailBody); emailScheduleJobDTO.setSearchType(searchType); @@ -239,6 +240,68 @@ } /** + * Delete a scheduled emails. + * @throws JSONException + */ + public ActionForward deleteNotification(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException, SchedulerException, JSONException { + + String inputTriggerName = WebUtil.readStrParam(request, "triggerName"); + Long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID, true); + Integer userId = getUser().getUserID(); + boolean isLessonNotifications = (lessonId != null); + Integer organisationId = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID, true); + + IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet() + .getServletContext()); + getUserManagementService(); + Scheduler scheduler = getScheduler(); + + JSONObject jsonObject = new JSONObject(); + String error = null; + + try { + // if this method throws an Exception, there will be no deleteNotification=true in the JSON reply + if (isLessonNotifications) { + if (!getSecurityService().isLessonMonitor(lessonId, userId, + "show scheduled lesson email notifications", false)) { + error = "Unable to delete notification: the user is not a monitor in the lesson"; + } + } else { + if (!getSecurityService().isGroupMonitor(organisationId, userId, + "show scheduled course course email notifications", false)) { + error = "Unable to delete notification: the user is not a monitor in the organisation"; + } + } + + if ( error == null ) { + + Trigger trigger = scheduler.getTrigger(inputTriggerName, Scheduler.DEFAULT_GROUP); + JobDetail jobDetail = scheduler.getJobDetail(trigger.getJobName(), Scheduler.DEFAULT_GROUP); + JobDataMap jobDataMap = jobDetail.getJobDataMap(); + + getAuditService().log(MonitoringConstants.MONITORING_MODULE_NAME, + "Deleting unsent scheduled notification " + inputTriggerName + " " + jobDataMap.getString("emailBody")); + + if ( ! scheduler.deleteJob(trigger.getJobName(), trigger.getJobGroup()) ) + error = "Unknown eror - deletion failed"; + + } + + } catch (Exception e) { + String[] msg = new String[1]; + msg[0] = e.getMessage(); + error = monitoringService.getMessageService().getMessage("error.system.error", msg); + } + + jsonObject.put("deleteNotification", error == null ? "true" : error); + response.setContentType("application/json;charset=utf-8"); + response.getWriter().print(jsonObject); + return null; + + } + + /** * Method called via Ajax. It either emails selected users or schedules these emails to be sent on specified date. */ public ActionForward emailUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, Index: lams_monitoring/web/emailnotifications/scheduledEmailList.jsp =================================================================== diff -u -r24e07f95fa19fb2434fdb33d38313bd01b11e8ec -red51fdeae3971806e0896c8a7d82ba01df591ffe --- lams_monitoring/web/emailnotifications/scheduledEmailList.jsp (.../scheduledEmailList.jsp) (revision 24e07f95fa19fb2434fdb33d38313bd01b11e8ec) +++ lams_monitoring/web/emailnotifications/scheduledEmailList.jsp (.../scheduledEmailList.jsp) (revision ed51fdeae3971806e0896c8a7d82ba01df591ffe) @@ -23,13 +23,52 @@ html {margin: 0;overflow:auto;background: none;} body {background: none; min-height: 100%;width: 100%;} + + + +

+ + + ?method=getLessonView&lessonID=${lessonID} + method=deleteNotification&lessonID=${lessonID} + + + ?method=getCourseView&organisationID=${organisationID} + method=deleteNotification&organisationID=${organisationID} + + + @@ -47,7 +86,12 @@
- + + ${tDate}
+ + + +
@@ -71,14 +115,6 @@
- - - ?method=getLessonView&lessonID=${lessonID} - - - ?method=getCourseView&organisationID=${organisationID} - -