Index: lams_monitoring/build.xml =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/build.xml,v diff -u -r1.29.6.1 -r1.29.6.2 --- lams_monitoring/build.xml 4 Sep 2011 10:04:41 -0000 1.29.6.1 +++ lams_monitoring/build.xml 14 Oct 2011 17:55:12 -0000 1.29.6.2 @@ -289,6 +289,22 @@ + + + + + + + + + + + + + + + + Fisheye: Tag 1.1.10.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/BranchDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.3.10.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/BranchingDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.3.10.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeActivityDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java,v diff -u -r1.4 -r1.4.10.1 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java 4 Jul 2007 03:31:10 -0000 1.4 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java 14 Oct 2011 17:55:09 -0000 1.4.10.1 @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.learningdesign.strategy.ComplexActivityStrategy; import org.lamsfoundation.lams.learningdesign.strategy.IContributionTypeStrategy; import org.lamsfoundation.lams.learningdesign.strategy.SimpleActivityStrategy; +import org.lamsfoundation.lams.monitoring.dto.ContributeActivityDTO; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.tool.service.ILamsCoreToolService; import org.lamsfoundation.lams.util.WebUtil; Fisheye: Tag 1.1.10.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/LearnerProgressBatchDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java,v diff -u -r1.13.10.1.4.1 -r1.13.10.1.4.2 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java 26 Aug 2011 20:05:27 -0000 1.13.10.1.4.1 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java 14 Oct 2011 17:55:09 -0000 1.13.10.1.4.2 @@ -39,6 +39,7 @@ public static final String KEY_LEARNER = "learners"; public static final String JOB_START_LESSON = "startScheduleLessonJob"; public static final String JOB_FINISH_LESSON = "finishScheduleLessonJob"; + public static final String JOB_EMAIL_MESSAGE = "emailScheduleMessageJob"; public static final String PARAM_LESSON_START_DATE = "lessonStartDate"; public static final String PARAM_SCHEDULED_NUMBER_DAYS_TO_LESSON_FINISH = "scheduledNumberDaysToLessonFinish"; public static final String PARAM_LEARNER_ID = "learnerID"; Fisheye: Tag 1.2.16.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/URLFactory.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml,v diff -u -r1.30.6.1 -r1.30.6.2 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml 9 Apr 2010 18:02:08 -0000 1.30.6.1 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml 14 Oct 2011 17:55:09 -0000 1.30.6.2 @@ -97,5 +97,10 @@ org.lamsfoundation.lams.monitoring.quartz.job.FinishScheduleLessonJob + + + org.lamsfoundation.lams.monitoring.quartz.job.EmailScheduleMessageJob + + \ No newline at end of file Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/BranchDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/BranchingDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/ContributeActivityDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/EmailScheduleMessageJobDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/dto/LearnerProgressBatchDTO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/quartz/job/EmailScheduleMessageJob.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/ContributeActivitiesProcessor.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/ContributeActivitiesProcessor.java,v diff -u -r1.5 -r1.5.10.1 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/ContributeActivitiesProcessor.java 7 Mar 2008 00:34:34 -0000 1.5 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/ContributeActivitiesProcessor.java 14 Oct 2011 17:55:12 -0000 1.5.10.1 @@ -33,8 +33,8 @@ import org.lamsfoundation.lams.learningdesign.SimpleActivity; import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.learningdesign.exception.LearningDesignProcessorException; -import org.lamsfoundation.lams.monitoring.ContributeActivityDTO; import org.lamsfoundation.lams.monitoring.ContributeDTOFactory; +import org.lamsfoundation.lams.monitoring.dto.ContributeActivityDTO; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.tool.service.ILamsCoreToolService; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java,v diff -u -r1.149.2.7.2.14 -r1.149.2.7.2.15 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 8 Sep 2011 10:23:09 -0000 1.149.2.7.2.14 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 14 Oct 2011 17:55:12 -0000 1.149.2.7.2.15 @@ -81,8 +81,8 @@ import org.lamsfoundation.lams.lesson.service.LessonServiceException; import org.lamsfoundation.lams.logevent.LogEvent; import org.lamsfoundation.lams.logevent.service.ILogEventService; -import org.lamsfoundation.lams.monitoring.LearnerProgressBatchDTO; import org.lamsfoundation.lams.monitoring.MonitoringConstants; +import org.lamsfoundation.lams.monitoring.dto.LearnerProgressBatchDTO; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.tool.exception.ToolException; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/BranchingAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/BranchingAction.java,v diff -u -r1.3 -r1.3.10.1 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/BranchingAction.java 7 Nov 2008 01:41:24 -0000 1.3 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/BranchingAction.java 14 Oct 2011 17:55:11 -0000 1.3.10.1 @@ -45,8 +45,8 @@ import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.BranchActivityEntry; import org.lamsfoundation.lams.learningdesign.SequenceActivity; -import org.lamsfoundation.lams.monitoring.BranchDTO; -import org.lamsfoundation.lams.monitoring.BranchingDTO; +import org.lamsfoundation.lams.monitoring.dto.BranchDTO; +import org.lamsfoundation.lams.monitoring.dto.BranchingDTO; import org.lamsfoundation.lams.monitoring.service.IMonitoringService; import org.lamsfoundation.lams.monitoring.service.MonitoringServiceProxy; import org.lamsfoundation.lams.usermanagement.User; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ComplexLearnerProgressAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ComplexLearnerProgressAction.java,v diff -u -r1.5 -r1.5.10.1 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ComplexLearnerProgressAction.java 4 Jun 2008 04:29:46 -0000 1.5 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ComplexLearnerProgressAction.java 14 Oct 2011 17:55:11 -0000 1.5.10.1 @@ -50,7 +50,7 @@ import org.lamsfoundation.lams.learningdesign.ParallelActivity; import org.lamsfoundation.lams.learningdesign.SequenceActivity; import org.lamsfoundation.lams.lesson.LearnerProgress; -import org.lamsfoundation.lams.monitoring.ContributeActivityDTO; +import org.lamsfoundation.lams.monitoring.dto.ContributeActivityDTO; import org.lamsfoundation.lams.monitoring.service.IMonitoringService; import org.lamsfoundation.lams.monitoring.service.MonitoringServiceProxy; import org.lamsfoundation.lams.usermanagement.User; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java,v diff -u -r1.1.2.3 -r1.1.2.4 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java 5 Sep 2011 19:14:47 -0000 1.1.2.3 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/EmailNotificationsAction.java 14 Oct 2011 17:55:11 -0000 1.1.2.4 @@ -32,6 +32,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Set; +import java.util.TimeZone; import java.util.TreeSet; import javax.servlet.ServletException; @@ -55,34 +56,45 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; import org.lamsfoundation.lams.lesson.service.ILessonService; +import org.lamsfoundation.lams.monitoring.MonitoringConstants; +import org.lamsfoundation.lams.monitoring.dto.EmailScheduleMessageJobDTO; import org.lamsfoundation.lams.monitoring.service.IMonitoringService; +import org.lamsfoundation.lams.monitoring.service.MonitoringService; +import org.lamsfoundation.lams.monitoring.service.MonitoringServiceException; import org.lamsfoundation.lams.monitoring.service.MonitoringServiceProxy; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; +import org.quartz.JobDataMap; +import org.quartz.JobDetail; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.SimpleTrigger; +import org.quartz.Trigger; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; /** *

- * The action servlet that provide all the monitoring functionalities. It interact with the teacher via flash and JSP - * monitoring interface. + * Responsible for "Email notification" functionality. *

* * @author Andrey Balan * - * ----------------XDoclet Tags-------------------- + * ----------------XDoclet Tags-------------------- * * @struts:action path="/emailNotifications" parameter="method" validate="false" * @struts.action-forward name = "lessonView" path = "/emailnotifications/lessonNotifications.jsp" * @struts.action-forward name = "courseView" path = "/emailnotifications/courseNotifications.jsp" * @struts.action-forward name = "userList" path = "/emailnotifications/userList.jsp" + * @struts.action-forward name = "scheduledEmailList" path = "/emailnotifications/scheduledEmailList.jsp" * - * ----------------XDoclet Tags-------------------- + * ----------------XDoclet Tags-------------------- */ public class EmailNotificationsAction extends LamsDispatchAction { @@ -101,8 +113,9 @@ private static final int COURSE_TYPE_HAVENT_STARTED_PARTICULAR_LESSON = 8; private static final int COURSE_TYPE_HAVENT_STARTED_ANY_LESSONS = 9; private static final int COURSE_TYPE_HAVE_FINISHED_THESE_LESSONS = 10; - + private static final String TRIGGER_PREFIX_NAME = "emailMessageOnScheduleTrigger:"; + private static ILessonService lessonService; private static IGroupUserDAO groupUserDAO; private static ILearnerProgressDAO learnerProgressDAO; @@ -111,26 +124,9 @@ // --------------------------------------------------------------------- // Struts Dispatch Method // --------------------------------------------------------------------- + /** - * This STRUTS action method will initialize a lesson for specific learning design with the given lesson title and - * lesson description. - *

- * If initialization is successed, this method will return a WDDX message which includes the ID of new lesson. - * - * @param mapping - * An ActionMapping class that will be used by the Action class to tell the ActionServlet where to send - * the end-user. - * - * @param form - * The ActionForm class that will contain any data submitted by the end-user via a form. - * @param request - * A standard Servlet HttpServletRequest class. - * @param response - * A standard Servlet HttpServletResponse class. - * @return An ActionForward class that will be returned to the ActionServlet indicating where the user is to go - * next. - * @throws IOException - * @throws ServletException + * Shows "Email notification" page for particular lesson. */ public ActionForward getLessonView(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { @@ -148,6 +144,9 @@ return mapping.findForward("lessonView"); } + /** + * Shows "Email notification" page for particular course. + */ public ActionForward getCourseView(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { @@ -172,28 +171,42 @@ return mapping.findForward("courseView"); } + + /** + * Renders a page listing all scheduled emails. + */ + public ActionForward showScheduledEmails(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws IOException, ServletException, SchedulerException { + Scheduler scheduler = getScheduler(); + TreeSet scheduleList = new TreeSet(); + + String[] triggerNames = scheduler.getTriggerNames(Scheduler.DEFAULT_GROUP); + for (String triggerName : triggerNames) { + if (triggerName.startsWith(TRIGGER_PREFIX_NAME)) { + Trigger trigger = scheduler.getTrigger(triggerName, Scheduler.DEFAULT_GROUP); + JobDetail jobDetail = scheduler.getJobDetail(trigger.getJobName(), Scheduler.DEFAULT_GROUP); + JobDataMap jobDataMap = jobDetail.getJobDataMap(); + Date triggerDate = trigger.getNextFireTime(); + String emailBody = (String) jobDataMap.get("emailBody"); + String[] userIdStrs = (String[]) jobDataMap.get(MonitoringConstants.KEY_USER_ID); + + EmailScheduleMessageJobDTO emailScheduleJobDTO = new EmailScheduleMessageJobDTO(); + emailScheduleJobDTO.setTriggerDate(triggerDate); + emailScheduleJobDTO.setEmailBody(emailBody); + emailScheduleJobDTO.setUserIdStrs(userIdStrs); + scheduleList.add(emailScheduleJobDTO); + } + } + + request.setAttribute("scheduleList", scheduleList); + request.setAttribute(AttributeNames.PARAM_LESSON_ID, request.getParameter(AttributeNames.PARAM_LESSON_ID)); + request.setAttribute(AttributeNames.PARAM_ORGANISATION_ID, request.getParameter(AttributeNames.PARAM_ORGANISATION_ID)); + return mapping.findForward("scheduledEmailList"); + } + /** - * The Struts dispatch method that starts a lesson that has been created beforehand. Most likely, the request to - * start lesson should be triggered by the flash component. This method will delegate to the Spring service bean to - * complete all the steps for starting a lesson. Finally, a wddx acknowledgement message will be serialized and sent - * back to the flash component. - * - * @param mapping - * An ActionMapping class that will be used by the Action class to tell the ActionServlet where to send - * the end-user. - * - * @param form - * The ActionForm class that will contain any data submitted by the end-user via a form. - * @param request - * A standard Servlet HttpServletRequest class. - * @param response - * A standard Servlet HttpServletResponse class. - * @return An ActionForward class that will be returned to the ActionServlet indicating where the user is to go - * next. - * @throws IOException - * @throws ServletException - * @throws JSONException + * 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, HttpServletResponse response) throws IOException, ServletException, JSONException { @@ -204,23 +217,74 @@ getEventNotificationService(); String[] userIdStrs = request.getParameterValues("userId"); String emailBody = WebUtil.readStrParam(request, "emailBody"); + Long scheduleDateParameter = WebUtil.readLongParam(request, "scheduleDate", true); + + boolean isScheduledForToday = false; + Calendar now = Calendar.getInstance(); + + //calculate scheduleDate + Date scheduleDate = null; + if (scheduleDateParameter != null) { + Date scheduleDateTeacherTimezone = new Date(scheduleDateParameter); + HttpSession ss = SessionManager.getSession(); + UserDTO teacher = (UserDTO) ss.getAttribute(AttributeNames.USER); + TimeZone teacherTimeZone = teacher.getTimeZone(); + scheduleDate = DateUtil.convertFromTimeZoneToDefault(teacherTimeZone, scheduleDateTeacherTimezone); + + // check whether email sending is scheduled for today + + Calendar scheduleDateCalendar = Calendar.getInstance(); + scheduleDateCalendar.setTime(scheduleDate); + isScheduledForToday = (now.get(Calendar.DATE) == scheduleDateCalendar.get(Calendar.DATE) + && now.get(Calendar.MONTH) == scheduleDateCalendar.get(Calendar.MONTH) + && now.get(Calendar.YEAR) == scheduleDateCalendar.get(Calendar.YEAR)); + } - boolean isSuccessfullySent = true; - for (String userIdStr : userIdStrs) { - long userId = Long.parseLong(userIdStr); - isSuccessfullySent &= eventNotificationService.sendMessage( - userId, - DeliveryMethodMail.getInstance(), - monitoringService.getMessageService().getMessage("event.emailnotifications.email.subject", new Object[] {}), - emailBody); + //check if we send email instantly + if ((scheduleDate == null) || isScheduledForToday) { + boolean isSuccessfullySent = true; + for (String userIdStr : userIdStrs) { + long userId = Long.parseLong(userIdStr); + isSuccessfullySent &= eventNotificationService.sendMessage( + userId, + DeliveryMethodMail.getInstance(), + monitoringService.getMessageService().getMessage("event.emailnotifications.email.subject", + new Object[] {}), emailBody); + } + + JSONObject.put("isSuccessfullySent", isSuccessfullySent); + } else { + // schedule email to be sent + try { + JobDetail emailScheduleMessageJob = getEmailScheduleMessageJob(); + // setup the message for scheduling job + emailScheduleMessageJob.setName("emailScheduleMessageJob:" + now.getTimeInMillis()); + + emailScheduleMessageJob.setDescription("schedule email message to user(s)"); + emailScheduleMessageJob.getJobDataMap().put("emailBody", emailBody); + emailScheduleMessageJob.getJobDataMap().put(MonitoringConstants.KEY_USER_ID, userIdStrs); + + // create customized triggers + Trigger startLessonTrigger = new SimpleTrigger(TRIGGER_PREFIX_NAME + now.getTimeInMillis(), + Scheduler.DEFAULT_GROUP, scheduleDate); + // start the scheduling job + Scheduler scheduler = getScheduler(); + scheduler.scheduleJob(emailScheduleMessageJob, startLessonTrigger); + JSONObject.put("isSuccessfullyScheduled", true); + log.debug("Email message to users [" + userIdStrs + "] on schedule is configured"); + } catch (SchedulerException e) { + log.error("Error occurred at " + "[emailScheduleMessage]- fail to email scheduling", e); + } } - JSONObject.put("isSuccessfullySent", isSuccessfullySent); response.setContentType("application/x-json"); response.getWriter().print(JSONObject); return null; } + /** + * Refreshes user list. + */ public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, JSONException { ICoreLearnerService learnerService = MonitoringServiceProxy.getLearnerService(getServlet() @@ -302,7 +366,7 @@ return null; } - public Collection getUsers(int searchType, Lesson lesson, String[] lessonIds, Long activityId, int xDaystoFinish, Organisation org) throws IOException, ServletException { + private Collection getUsers(int searchType, Lesson lesson, String[] lessonIds, Long activityId, int xDaystoFinish, Organisation org) { getLessonService(); ICoreLearnerService learnerService = MonitoringServiceProxy.getLearnerService(getServlet() .getServletContext()); @@ -450,4 +514,24 @@ } return eventNotificationService; } + + /** + * + * @return the bean that defines emailScheduleMessageJob. + */ + private JobDetail getEmailScheduleMessageJob() { + WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() + .getServletContext()); + return (JobDetail) ctx.getBean(MonitoringConstants.JOB_EMAIL_MESSAGE); + } + + /** + * + * @return the bean that defines Scheduler. + */ + private Scheduler getScheduler() { + WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() + .getServletContext()); + return (Scheduler) ctx.getBean("scheduler"); + } } Index: lams_monitoring/web/emailnotifications/courseNotifications.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/web/emailnotifications/courseNotifications.jsp,v diff -u -r1.1.2.4 -r1.1.2.5 --- lams_monitoring/web/emailnotifications/courseNotifications.jsp 6 Sep 2011 12:25:48 -0000 1.1.2.4 +++ lams_monitoring/web/emailnotifications/courseNotifications.jsp 14 Oct 2011 17:55:11 -0000 1.1.2.5 @@ -17,15 +17,20 @@ + + @@ -91,22 +96,30 @@ } var emailBody = escape(document.getElementById("emailBody").value); + var scheduleDate = $("#datePicker").datepicker( "getDate" ); + scheduleDate = (scheduleDate == null) ? "" : scheduleDate.getTime(); $.ajax({ async: false, url: '', - data: 'method=emailUsers&' + params+ "&emailBody=" + emailBody, + data: 'method=emailUsers&' + params+ "&emailBody=" + emailBody + "&scheduleDate=" + scheduleDate, dataType: 'json', type: 'post', success: function (json) { if (json.isSuccessfullySent) { alert(''); + } else if (json.isSuccessfullyScheduled) { + alert(''); } else { alert(''); } } }); }); - + + $( "#datePicker" ).datepicker({ + dateFormat: 'dd/mm/yy', + minDate: 0 + }); }); @@ -170,6 +183,13 @@

?method=emailUsers" method="post" id="emailNotificationsForm" >
+ + + +

+ + <%@ include file="scheduleOptions.jsp"%> + ${lesson.lessonName} home.do?method=learner&lessonID=${lesson.lessonId} @@ -178,6 +198,7 @@

" /> +
@@ -217,6 +238,7 @@

+
Index: lams_monitoring/web/emailnotifications/lessonNotifications.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/web/emailnotifications/lessonNotifications.jsp,v diff -u -r1.1.2.3 -r1.1.2.4 --- lams_monitoring/web/emailnotifications/lessonNotifications.jsp 6 Sep 2011 12:25:49 -0000 1.1.2.3 +++ lams_monitoring/web/emailnotifications/lessonNotifications.jsp 14 Oct 2011 17:55:11 -0000 1.1.2.4 @@ -18,23 +18,27 @@ + +