Index: lams_tool_sbmt/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rc975422008a65f765d147629720d7eb8c10f63a0 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision c975422008a65f765d147629720d7eb8c10f63a0) +++ lams_tool_sbmt/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -47,6 +47,8 @@ label.monitoring.viewAllMarks.button = View all marks label.monitoring.Mark.button = Mark label.monitoring.releaseMarks.button = Release marks +label.monitoring.releaseMarks.notify.button = Notify learner about marks release +label.monitoring.releaseMarks.notify.message = [0] learners were notified label.monitoring.downloadMarks.button = Download marks label.monitoring.updateMarks.button = Update marks label.monitoring.saveMarks.button = Save Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dbupdates/patch20210907.sql =================================================================== diff -u --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dbupdates/patch20210907.sql (revision 0) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dbupdates/patch20210907.sql (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -0,0 +1,15 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +-- Put all sql statements below here + +-- LDEV-5232 Remove notify students option from authoring + +ALTER TABLE tl_lasbmt11_content DROP COLUMN mark_release_notify; + +-- Put all sql statements above here + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/model/SubmitFilesContent.java =================================================================== diff -u -re34c7b767eb34caebbfa0c9bdfb50d771d3b9d95 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/model/SubmitFilesContent.java (.../SubmitFilesContent.java) (revision e34c7b767eb34caebbfa0c9bdfb50d771d3b9d95) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/model/SubmitFilesContent.java (.../SubmitFilesContent.java) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -63,9 +63,6 @@ @Column(name = "lock_on_finished") private boolean lockOnFinished; - @Column(name = "mark_release_notify") - private boolean notifyLearnersOnMarkRelease; - @Column(name = "file_submit_notify") private boolean notifyTeachersOnFileSubmit; @@ -86,7 +83,7 @@ //max limitUploadNumber @Column(name = "limit_upload_number") private int limitUploadNumber; - + @Column(name = "min_limit_upload_number") private Integer minLimitUploadNumber; @@ -267,7 +264,7 @@ public void setLimitUploadNumber(int limitUploadNumber) { this.limitUploadNumber = limitUploadNumber; } - + public Integer getMinLimitUploadNumber() { return minLimitUploadNumber; } @@ -308,14 +305,6 @@ this.submissionDeadline = submissionDeadline; } - public boolean isNotifyLearnersOnMarkRelease() { - return notifyLearnersOnMarkRelease; - } - - public void setNotifyLearnersOnMarkRelease(boolean notifyLearnersOnMarkRelease) { - this.notifyLearnersOnMarkRelease = notifyLearnersOnMarkRelease; - } - public boolean isNotifyTeachersOnFileSubmit() { return notifyTeachersOnFileSubmit; } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java =================================================================== diff -u -rf86004309489cb81f283d1962b481b4bbb3facd6 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision f86004309489cb81f283d1962b481b4bbb3facd6) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -185,6 +185,11 @@ public void releaseMarksForSession(Long sessionID); /** + * Notify learners about marks being released, via email. + */ + public int notifyLearnersOnMarkRelease(long sessionID); + + /** * When learner finish submission, it invokes this function and will remark the finished field. * * @param sessionID Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -re62e56b0f0d04f6820592e95b0271619784a2c9f -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision e62e56b0f0d04f6820592e95b0271619784a2c9f) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -960,40 +960,6 @@ // push outputs to gradebook recalculateUserTotalMarks(true, session, null); - // notify learners on mark release - boolean notifyLearnersOnMarkRelease = getEventNotificationService().eventExists(SbmtConstants.TOOL_SIGNATURE, - SbmtConstants.EVENT_NAME_NOTIFY_LEARNERS_ON_MARK_RELEASE, content.getContentID()); - if (notifyLearnersOnMarkRelease) { - Map notificationMessages = new TreeMap<>(); - - List list = submissionDetailsDAO.getSubmissionDetailsBySession(sessionID); - for (SubmissionDetails details : list) { - SubmitFilesReport report = details.getReport(); - if (!details.isRemoved()) { - Integer userId = details.getLearner().getUserID(); - StringBuilder notificationMessage = notificationMessages.get(userId); - if (notificationMessage == null) { - notificationMessage = new StringBuilder(); - } - Object[] notificationMessageParameters = new Object[3]; - notificationMessageParameters[0] = details.getFilePath(); - notificationMessageParameters[1] = details.getDateOfSubmission(); - notificationMessageParameters[2] = report.getMarks(); - notificationMessage - .append(getLocalisedMessage("event.mark.release.mark", notificationMessageParameters)); - notificationMessages.put(userId, notificationMessage); - } - } - - Object[] notificationMessageParameters = new Object[1]; - for (Integer userID : notificationMessages.keySet()) { - notificationMessageParameters[0] = notificationMessages.get(userID).toString(); - getEventNotificationService().triggerForSingleUser(SbmtConstants.TOOL_SIGNATURE, - SbmtConstants.EVENT_NAME_NOTIFY_LEARNERS_ON_MARK_RELEASE, content.getContentID(), userID, - notificationMessageParameters); - } - } - //audit log event String sessionName = session.getSessionName() + " (toolSessionId=" + session.getSessionID() + ")"; String message = messageService.getMessage("tool.display.name") + ". " @@ -1002,6 +968,44 @@ } @Override + public int notifyLearnersOnMarkRelease(long sessionID) { + if (log.isDebugEnabled()) { + log.debug("Sending email with marks to all learners for session ID " + sessionID); + } + + Map notificationMessages = new TreeMap<>(); + List list = submissionDetailsDAO.getSubmissionDetailsBySession(sessionID); + for (SubmissionDetails details : list) { + SubmitFilesReport report = details.getReport(); + if (!details.isRemoved()) { + Integer userId = details.getLearner().getUserID(); + StringBuilder notificationMessage = notificationMessages.get(userId); + if (notificationMessage == null) { + notificationMessage = new StringBuilder(); + } + Object[] notificationMessageParameters = new Object[3]; + notificationMessageParameters[0] = details.getFilePath(); + notificationMessageParameters[1] = details.getDateOfSubmission(); + notificationMessageParameters[2] = report.getMarks(); + notificationMessage + .append(getLocalisedMessage("event.mark.release.mark", notificationMessageParameters)); + notificationMessages.put(userId, notificationMessage); + } + } + Object[] notificationMessageParameters = new Object[1]; + int learnersNotified = 0; + for (Integer userId : notificationMessages.keySet()) { + notificationMessageParameters[0] = notificationMessages.get(userId).toString(); + getEventNotificationService().sendMessage(null, userId, IEventNotificationService.DELIVERY_METHOD_MAIL, + getLocalisedMessage("event.mark.release.subject", null), + getLocalisedMessage("event.mark.release.body", notificationMessageParameters), false); + learnersNotified++; + } + + return learnersNotified; + } + + @Override public void finishSubmission(Long sessionID, Integer userID) { SubmitUser learner = submitUserDAO.getLearner(sessionID, userID); learner.setFinished(true); @@ -1338,8 +1342,6 @@ content.setDefineLater(false); content.setNotifyTeachersOnFileSubmit( JsonUtil.optBoolean(toolContentJSON, "notifyTeachersOnFileSubmit", Boolean.FALSE)); - content.setNotifyLearnersOnMarkRelease( - JsonUtil.optBoolean(toolContentJSON, "notifyLearnersOnMarkRelease", Boolean.FALSE)); content.setReflectInstructions(JsonUtil.optString(toolContentJSON, RestTags.REFLECT_INSTRUCTIONS)); content.setReflectOnActivity(JsonUtil.optBoolean(toolContentJSON, RestTags.REFLECT_ON_ACTIVITY, Boolean.FALSE)); content.setLockOnFinished(JsonUtil.optBoolean(toolContentJSON, RestTags.LOCK_WHEN_FINISHED, Boolean.FALSE)); Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/AuthoringController.java =================================================================== diff -u -r845b503553ad948cb5db7b89950f7c5251ada5d7 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/AuthoringController.java (.../AuthoringController.java) (revision 845b503553ad948cb5db7b89950f7c5251ada5d7) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/AuthoringController.java (.../AuthoringController.java) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -82,7 +82,7 @@ return readDatabaseData(authoringForm, persistContent, request, mode); } - + /** * Set the defineLater flag so that learners cannot use content while we are editing. This flag is released when * updateContent is called. @@ -100,18 +100,18 @@ return readDatabaseData(authoringForm, persistContent, request, ToolAccessMode.TEACHER); } - + /** * Common method for "unspecified" and "defineLater" */ - private String readDatabaseData(AuthoringForm authoringForm, SubmitFilesContent persistContent, HttpServletRequest request, - ToolAccessMode mode) { + private String readDatabaseData(AuthoringForm authoringForm, SubmitFilesContent persistContent, + HttpServletRequest request, ToolAccessMode mode) { SessionMap sessionMap = new SessionMap<>(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); sessionMap.put(AttributeNames.PARAM_MODE, mode); String contentFolderID = WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID); - + // set back STRUTS component value authoringForm.initContentValue(persistContent); // session map @@ -198,7 +198,6 @@ content.setLimitUploadNumber(authoringForm.getLimitUploadNumber()); content.setMinLimitUploadNumber(authoringForm.getMinLimitUploadNumber()); content.setUseSelectLeaderToolOuput(authoringForm.isUseSelectLeaderToolOuput()); - content.setNotifyLearnersOnMarkRelease(authoringForm.isNotifyLearnersOnMarkRelease()); content.setNotifyTeachersOnFileSubmit(authoringForm.isNotifyTeachersOnFileSubmit()); return content; } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearningController.java =================================================================== diff -u -r823ba78870fd8a68449d8d86d5aa5d3c5a5fab96 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearningController.java (.../LearningController.java) (revision 823ba78870fd8a68449d8d86d5aa5d3c5a5fab96) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearningController.java (.../LearningController.java) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -37,7 +37,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.tool.ToolAccessMode; @@ -223,18 +222,6 @@ } } - if (content.isNotifyLearnersOnMarkRelease()) { - boolean isHtmlFormat = false; - submitFilesService.getEventNotificationService().createEvent(SbmtConstants.TOOL_SIGNATURE, - SbmtConstants.EVENT_NAME_NOTIFY_LEARNERS_ON_MARK_RELEASE, content.getContentID(), - submitFilesService.getLocalisedMessage("event.mark.release.subject", null), - submitFilesService.getLocalisedMessage("event.mark.release.body", null), isHtmlFormat); - - submitFilesService.getEventNotificationService().subscribe(SbmtConstants.TOOL_SIGNATURE, - SbmtConstants.EVENT_NAME_NOTIFY_LEARNERS_ON_MARK_RELEASE, content.getContentID(), userID, - IEventNotificationService.DELIVERY_METHOD_MAIL); - } - if (content.isUseSelectLeaderToolOuput() && groupLeader.isFinished() && !mode.isTeacher()) { // check if leader has submitted all answers submitFilesService.copyLearnerContent(groupLeader, learner); Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/MonitoringController.java =================================================================== diff -u -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/MonitoringController.java (.../MonitoringController.java) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -280,6 +280,12 @@ submitFilesService.releaseMarksForSession(sessionID); } + @RequestMapping(path = "/notifyLearnersOnMarkRelease", method = RequestMethod.POST) + @ResponseBody + public String notifyLearnersOnMarkRelease(@RequestParam(name = AttributeNames.PARAM_TOOL_SESSION_ID) Long sessionID) { + return String.valueOf(submitFilesService.notifyLearnersOnMarkRelease(sessionID)); + } + /** * Download submit file marks by MS Excel file format. */ Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/form/AuthoringForm.java =================================================================== diff -u -re34c7b767eb34caebbfa0c9bdfb50d771d3b9d95 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/form/AuthoringForm.java (.../AuthoringForm.java) (revision e34c7b767eb34caebbfa0c9bdfb50d771d3b9d95) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/form/AuthoringForm.java (.../AuthoringForm.java) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -32,15 +32,13 @@ private boolean useSelectLeaderToolOuput; private int limitUploadNumber; - + private Integer minLimitUploadNumber; private boolean reflectOnActivity; private String reflectInstructions; - private boolean notifyLearnersOnMarkRelease; - private boolean notifyTeachersOnFileSubmit; public void reset(HttpServletRequest request) { @@ -67,7 +65,6 @@ reflectOnActivity = content.isReflectOnActivity(); reflectInstructions = content.getReflectInstructions(); - setNotifyLearnersOnMarkRelease(content.isNotifyLearnersOnMarkRelease()); setNotifyTeachersOnFileSubmit(content.isNotifyTeachersOnFileSubmit()); } @@ -161,7 +158,7 @@ public void setLimitUploadNumber(int limitUploadNumber) { this.limitUploadNumber = limitUploadNumber; } - + public Integer getMinLimitUploadNumber() { return minLimitUploadNumber; } @@ -170,14 +167,6 @@ this.minLimitUploadNumber = minLimitUploadNumber; } - public boolean isNotifyLearnersOnMarkRelease() { - return notifyLearnersOnMarkRelease; - } - - public void setNotifyLearnersOnMarkRelease(boolean notifyLearnersOnMarkRelease) { - this.notifyLearnersOnMarkRelease = notifyLearnersOnMarkRelease; - } - public boolean isNotifyTeachersOnFileSubmit() { return notifyTeachersOnFileSubmit; } Index: lams_tool_sbmt/web/authoring/advance.jsp =================================================================== diff -u -re34c7b767eb34caebbfa0c9bdfb50d771d3b9d95 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/web/authoring/advance.jsp (.../advance.jsp) (revision e34c7b767eb34caebbfa0c9bdfb50d771d3b9d95) +++ lams_tool_sbmt/web/authoring/advance.jsp (.../advance.jsp) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -111,13 +111,6 @@ - - - - - - - Index: lams_tool_sbmt/web/monitoring/parts/advanceoptions.jsp =================================================================== diff -u -re34c7b767eb34caebbfa0c9bdfb50d771d3b9d95 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/web/monitoring/parts/advanceoptions.jsp (.../advanceoptions.jsp) (revision e34c7b767eb34caebbfa0c9bdfb50d771d3b9d95) +++ lams_tool_sbmt/web/monitoring/parts/advanceoptions.jsp (.../advanceoptions.jsp) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -73,23 +73,6 @@ - - - - - - - - - - - - - - - - - Index: lams_tool_sbmt/web/monitoring/parts/summary.jsp =================================================================== diff -u -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 -rf744562c66dd81d53ef8ddf2403368e27c8c646d --- lams_tool_sbmt/web/monitoring/parts/summary.jsp (.../summary.jsp) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) +++ lams_tool_sbmt/web/monitoring/parts/summary.jsp (.../summary.jsp) (revision f744562c66dd81d53ef8ddf2403368e27c8c646d) @@ -137,12 +137,26 @@ success: function() { $("#messageArea_Busy").hide(); $("#release-marks-" + sessionId).hide(); + $("#release-marks-notify-" + sessionId).show(); $("#release-marks-info-" + sessionId).show(); } }); } - + function notifyLearnersOnMarkRelease(sessionId) { + $.ajax({ + type: 'POST', + url: "?", + data: { + toolSessionID: sessionId, + reqID: (new Date()).getTime() + }, + success: function(response) { + alert("".replace('[0]', response)); + } + }); + } + function showChangeLeaderModal(toolSessionId) { $('#change-leader-modals').empty() .load('',{ @@ -248,11 +262,19 @@ - + + style="display:none;"> + + +
finished