Index: lams_gradebook/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r625a1082501027cf4b35af4cebcf34178d0bec67 -ra9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8 --- lams_gradebook/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 625a1082501027cf4b35af4cebcf34178d0bec67) +++ lams_gradebook/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision a9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8) @@ -34,6 +34,7 @@ gradebook.monitor.releasemarks.3 = marks to learners gradebook.monitor.releasemarks.check = Are you sure you want to release marks for this lesson to learners? gradebook.monitor.releasemarks.check2 = Are you sure you want to hide marks from learners for this lesson? +gradebook.monitor.releasemarks.toggle.panel.tooltip = Shows/hides a panel where learners can get notified of their marks for the this lesson. error.releasemarks.fail = Mark release failed, please contact your system administrator. error.markhigher = Mark must be lower than maximum mark. error.cellsave = Problem saving cell content, please contact your system administrator. Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java =================================================================== diff -u -r0933451e694b19886dd20e2962fc984e997dbf6e -ra9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java (.../GradebookMonitoringController.java) (revision 0933451e694b19886dd20e2962fc984e997dbf6e) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/controller/GradebookMonitoringController.java (.../GradebookMonitoringController.java) (revision a9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8) @@ -23,6 +23,8 @@ package org.lamsfoundation.lams.gradebook.web.controller; import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.List; @@ -33,11 +35,14 @@ import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.events.IEventNotificationService; +import org.lamsfoundation.lams.gradebook.dto.GradebookGridRowDTO; import org.lamsfoundation.lams.gradebook.service.IGradebookFullService; import org.lamsfoundation.lams.gradebook.util.GBGridView; import org.lamsfoundation.lams.gradebook.util.GradebookConstants; import org.lamsfoundation.lams.gradebook.util.GradebookUtil; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dto.LessonDetailsDTO; import org.lamsfoundation.lams.lesson.service.ILessonService; @@ -58,6 +63,7 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.fasterxml.jackson.databind.node.JsonNodeFactory; @@ -82,7 +88,11 @@ private ILessonService lessonService; @Autowired private ISecurityService securityService; + @Autowired + private IEventNotificationService eventNotificationService; + private static final DateFormat RELEASE_MARKS_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + @RequestMapping("") public String unspecified(HttpServletRequest request, HttpServletResponse response) throws IOException { Long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); @@ -252,12 +262,86 @@ return "success"; } + @RequestMapping("/displayReleaseMarksPanel") + public String displayReleaseMarksPanel(@RequestParam long lessonID) { + return "releaseLessonMarks"; + } + + @RequestMapping("/getReleaseMarksEmailContent") + @ResponseBody + public String getReleaseMarksEmailContent(@RequestParam long lessonID, @RequestParam int userID) { + StringBuilder content = new StringBuilder(); + + User user = userManagementService.getUserById(userID); + Lesson lesson = lessonService.getLesson(lessonID); + LearnerProgress learnerProgress = lessonService.getUserProgressForLesson(userID, lessonID); + content.append("Hi ").append(user.getFirstName()).append(",

here are your results of lesson \"") + .append(lesson.getLessonName()).append("\" in which you participated on ") + .append(RELEASE_MARKS_DATE_FORMAT.format(learnerProgress.getStartDate())).append(".

"); + + content.append( + "") + .append("") + .append(""); + + List gradebookActivityDTOs = gradebookService.getGBLessonComplete(lessonID, userID); + for (GradebookGridRowDTO activityDTO : gradebookActivityDTOs) { + content.append(""); + } + content.append("
ActivityProgressAverage scoreScore
").append(activityDTO.getRowName()) + .append(""); + + if (activityDTO.getStatus().contains("success")) { + content.append("✓"); + } else if (activityDTO.getStatus().contains("cog")) { + content.append("⚙"); + } else { + content.append("-"); + } + + content.append(""); + if (activityDTO.getAverageMark() != null) { + content.append(GradebookUtil.niceFormatting(activityDTO.getAverageMark())); + } + + content.append(""); + if (activityDTO.getMark() != null) { + content.append(GradebookUtil.niceFormatting(activityDTO.getMark())); + } + + content.append("

Regards,
LAMS team"); + + return content.toString(); + } + + @RequestMapping("/sendReleaseMarksEmails") + @ResponseBody + public String sendReleaseMarksEmails(@RequestParam long lessonID) { + try { + Lesson lesson = lessonService.getLesson(lessonID); + List learners = lessonService.getActiveLessonLearners(lessonID); + String emailSubject = new StringBuilder("Results of lesson \"").append(lesson.getLessonName()).append("\"") + .toString(); + + for (User learner : learners) { + eventNotificationService.sendMessage(null, learner.getUserId(), + IEventNotificationService.DELIVERY_METHOD_MAIL, emailSubject, + getReleaseMarksEmailContent(lessonID, learner.getUserId()), true); + } + } catch (Exception e) { + return e.getMessage(); + } + + return "success"; + } + /** * Exports Lesson Gradebook into excel. */ @RequestMapping("/exportExcelLessonGradebook") @ResponseBody - public void exportExcelLessonGradebook(HttpServletRequest request, HttpServletResponse response) throws IOException { + public void exportExcelLessonGradebook(HttpServletRequest request, HttpServletResponse response) + throws IOException { Long lessonID = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); if (!securityService.isLessonMonitor(lessonID, getUser().getUserID(), "export lesson gradebook spreadsheet", false)) { @@ -292,7 +376,8 @@ */ @RequestMapping("/exportExcelCourseGradebook") @ResponseBody - public void exportExcelCourseGradebook(HttpServletRequest request, HttpServletResponse response) throws IOException { + public void exportExcelCourseGradebook(HttpServletRequest request, HttpServletResponse response) + throws IOException { Integer organisationID = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID); UserDTO user = getUser(); if (!securityService.hasOrgRole(organisationID, user.getUserID(), new String[] { Role.GROUP_MANAGER }, @@ -328,7 +413,8 @@ */ @RequestMapping("/exportExcelSelectedLessons") @ResponseBody - public void exportExcelSelectedLessons(HttpServletRequest request, HttpServletResponse response) throws IOException { + public void exportExcelSelectedLessons(HttpServletRequest request, HttpServletResponse response) + throws IOException { Integer organisationID = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID); UserDTO user = getUser(); if (!securityService.isGroupMonitor(organisationID, user.getUserID(), Index: lams_gradebook/web/gradebookMonitor.jsp =================================================================== diff -u -rcfebfa0a8633dc3785cd1a4b12839d3070112aa2 -ra9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8 --- lams_gradebook/web/gradebookMonitor.jsp (.../gradebookMonitor.jsp) (revision cfebfa0a8633dc3785cd1a4b12839d3070112aa2) +++ lams_gradebook/web/gradebookMonitor.jsp (.../gradebookMonitor.jsp) (revision a9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8) @@ -13,6 +13,13 @@ + + @@ -70,6 +77,19 @@ } + function toggleReleaseMarksPanel(){ + var releaseMarksPanel = $('#releaseMarksPanel'); + if (releaseMarksPanel.is(':empty')) { + releaseMarksPanel.load('gradebook/gradebookMonitoring/displayReleaseMarksPanel.do',{ + 'lessonID' : ${lessonDetails.lessonID} + }, function(){ + releaseMarksPanel.slideDown(); + }); + } else { + releaseMarksPanel.slideToggle(); + } + } + function toggleRelease() { var conf; if (marksReleased) { @@ -845,8 +865,8 @@ + +
Index: lams_gradebook/web/releaseLessonMarks.jsp =================================================================== diff -u --- lams_gradebook/web/releaseLessonMarks.jsp (revision 0) +++ lams_gradebook/web/releaseLessonMarks.jsp (revision a9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8) @@ -0,0 +1,109 @@ +<%@ include file="/common/taglibs.jsp"%> + + + + +
+
+

Email preview

+
+
+
+ +
\ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r21012de4a17935353bd0a69d6c5752bc01a6dabb -ra9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 21012de4a17935353bd0a69d6c5752bc01a6dabb) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision a9c5e4550ac78c7dde3dc3796d6cf8dc03d455e8) @@ -1903,8 +1903,8 @@ Set sortedUsers = new TreeSet<>(new Comparator() { @Override public int compare(User usr0, User usr1) { - return ((usr0.getFirstName() + usr0.getLastName() + usr0.getLogin()) - .compareTo(usr1.getFirstName() + usr1.getLastName() + usr1.getLogin())); + return ((usr0.getLastName() + usr0.getFirstName() + usr0.getLogin()) + .compareTo(usr1.getLastName() + usr1.getFirstName() + usr1.getLogin())); } }); sortedUsers.addAll(users);