Index: lams_tool_preview/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r4a6c8a497b55005dcd5b6158ebc2051fc5e3b40a -r91082736703fb64b4b0024953bb394371119c89a --- lams_tool_preview/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 4a6c8a497b55005dcd5b6158ebc2051fc5e3b40a) +++ lams_tool_preview/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -131,7 +131,9 @@ event.sent.results.no.results = No results msg.results.sent = {0} Email(s) Sent button.email.results = Email Results -label.notify.user.of.results = Notify students of results +label.notify.user.of.results = Notify group members of results +label.notify.user.of.results.all = Notify all learners of results +label.notified.users.of.results = Emails have been sent to this group label.number.of.team.members = No of team members label.average = Average label.for.user = For {0} @@ -222,4 +224,4 @@ label.rating.rubrics.in.between.enable = Add in-between columns in rubrics label.rating.rubrics.require.ratings = Students must assign evaluation to all rubrics and peers label.rating.rubrics.require.ratings.tooltip = If selected, the student is required to assign an evaluation to all peers. No blank evaluations allowed. -message.rating.rubrics.selection.missing = You have not rated one or more peers. Are you sure you want to continue? +message.rating.rubrics.selection.missing = You have not rated one or more peers. Are you sure you want to continue? \ No newline at end of file Index: lams_tool_preview/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r24478a39eada2311fce1b1f9dd86f4fe7150b4f6 -r91082736703fb64b4b0024953bb394371119c89a --- lams_tool_preview/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 24478a39eada2311fce1b1f9dd86f4fe7150b4f6) +++ lams_tool_preview/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -131,7 +131,9 @@ event.sent.results.no.results = No results msg.results.sent = {0} Email(s) Sent button.email.results = Email Results -label.notify.user.of.results = Notify students of results +label.notify.user.of.results = Notify group members of results +label.notify.user.of.results.all = Notify all learners of results +label.notified.users.of.results = Emails have been sent to this group label.number.of.team.members = No of team members label.average = Average label.for.user = For {0} @@ -220,4 +222,6 @@ label.rating.rubrics.view.row = by rubrics row label.rating.rubrics.in.between = in-between label.rating.rubrics.in.between.enable = Add in-between columns in rubrics -message.rating.rubrics.selection.missing = You have not rated one or more peers. Are you sure you want to continue? +label.rating.rubrics.require.ratings = Students must assign evaluation to all rubrics and peers +label.rating.rubrics.require.ratings.tooltip = If selected, the student is required to assign an evaluation to all peers. No blank evaluations allowed. +message.rating.rubrics.selection.missing = You have not rated one or more peers. Are you sure you want to continue? \ No newline at end of file Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dbupdates/patch20230507.sql =================================================================== diff -u --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dbupdates/patch20230507.sql (revision 0) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dbupdates/patch20230507.sql (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -0,0 +1,14 @@ +-- 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-5394 Mark which group has been sent out emails to +ALTER TABLE tl_laprev11_session ADD COLUMN emails_sent TINYINT UNSIGNED NOT NULL DEFAULT 0; + +-- 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; \ No newline at end of file Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dto/GroupSummary.java =================================================================== diff -u -r324eb210f0c4a8193d0a0b071a675720ebf9b594 -r91082736703fb64b4b0024953bb394371119c89a --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dto/GroupSummary.java (.../GroupSummary.java) (revision 324eb210f0c4a8193d0a0b071a675720ebf9b594) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dto/GroupSummary.java (.../GroupSummary.java) (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -26,6 +26,7 @@ private Long sessionId; private String sessionName; + private boolean emailsSent; public Long getSessionId() { return sessionId; @@ -43,6 +44,14 @@ this.sessionName = sessionName; } + public boolean isEmailsSent() { + return emailsSent; + } + + public void setEmailsSent(boolean emailsSent) { + this.emailsSent = emailsSent; + } + @Override public int compareTo(GroupSummary o) { String name1 = this.sessionName.replaceAll("\\D+", ""); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/PeerreviewSession.java =================================================================== diff -u -r1ee503e3d0e0228ea8a45025fddf15d9623c0377 -r91082736703fb64b4b0024953bb394371119c89a --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/PeerreviewSession.java (.../PeerreviewSession.java) (revision 1ee503e3d0e0228ea8a45025fddf15d9623c0377) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/PeerreviewSession.java (.../PeerreviewSession.java) (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -23,25 +23,13 @@ package org.lamsfoundation.lams.tool.peerreview.model; +import javax.persistence.*; import java.util.Date; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; - /** * Peerreview Session * * @author Dapeng Ni - * - * - * */ @Entity @Table(name = "tl_laprev11_session") @@ -72,11 +60,14 @@ @Column private int status; + @Column(name = "emails_sent") + private boolean emailsSent; + // ********************************************************** // Get/Set methods // ********************************************************** + /** - * * @return Returns the learnerID. */ public Long getUid() { @@ -88,7 +79,6 @@ } /** - * * @return */ public Date getSessionEndDate() { @@ -100,8 +90,6 @@ } /** - * - * * @return */ public Date getSessionStartDate() { @@ -113,7 +101,6 @@ } /** - * * @return */ public int getStatus() { @@ -125,7 +112,6 @@ } /** - * * @return */ public Peerreview getPeerreview() { @@ -137,7 +123,6 @@ } /** - * * @return */ public Long getSessionId() { @@ -149,20 +134,25 @@ } /** - * * @return Returns the session name */ public String getSessionName() { return sessionName; } /** - * * @param sessionName - * The session name to set. + * The session name to set. */ public void setSessionName(String sessionName) { this.sessionName = sessionName; } -} + public boolean isEmailsSent() { + return emailsSent; + } + + public void setEmailsSent(boolean emailsSent) { + this.emailsSent = emailsSent; + } +} \ No newline at end of file Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java =================================================================== diff -u -r603269d5aab112e1179448fbb5596550ab39f009 -r91082736703fb64b4b0024953bb394371119c89a --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision 603269d5aab112e1179448fbb5596550ab39f009) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/IPeerreviewService.java (.../IPeerreviewService.java) (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -316,7 +316,7 @@ String generateEmailReportToUser(Long toolContentId, Long sessionId, Long userId); /** Send an email with the user's results to each user in the session */ - int emailReportToSessionUsers(Long toolContentId, Long sessionId); + int emailReportToUsers(Long toolContentId, Long sessionId); /** Send an email (generated previously with generateEmailReportToUser()) to the specified user in the session */ int emailReportToUser(Long toolContentId, Long sessionId, Long userId, String emailReportToUser); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -r324eb210f0c4a8193d0a0b071a675720ebf9b594 -r91082736703fb64b4b0024953bb394371119c89a --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 324eb210f0c4a8193d0a0b071a675720ebf9b594) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -226,6 +226,7 @@ GroupSummary group = new GroupSummary(); group.setSessionId(session.getSessionId()); group.setSessionName(session.getSessionName()); + group.setEmailsSent(session.isEmailsSent()); groupSet.add(group); } @@ -504,21 +505,35 @@ } @Override - public int emailReportToSessionUsers(Long toolContentId, Long sessionId) { - if (log.isDebugEnabled()) { - log.debug("Sending email with results to all learners for session ID " + sessionId); + public int emailReportToUsers(Long toolContentId, Long sessionId) { + List sessions = null; + if (sessionId == null) { + sessions = peerreviewSessionDao.getByContentId(toolContentId); + } else { + sessions = List.of(peerreviewSessionDao.getSessionBySessionId(sessionId)); } - PeerreviewSession session = peerreviewSessionDao.getSessionBySessionId(sessionId); - Peerreview peerreview = getPeerreviewByContentId(toolContentId); - Map emails = new EmailAnalysisBuilder(peerreview, session, ratingService, peerreviewSessionDao, - peerreviewUserDao, this, messageService).generateHTMLEmailsForSession(); - for (Map.Entry entry : emails.entrySet()) { - eventNotificationService.sendMessage(null, entry.getKey().intValue(), - IEventNotificationService.DELIVERY_METHOD_MAIL, getResultsEmailSubject(peerreview), - entry.getValue(), true); + int emailsSent = 0; + for (PeerreviewSession session : sessions) { + if (log.isDebugEnabled()) { + log.debug("Sending email with results to all learners for session ID " + session.getSessionId()); + } + Peerreview peerreview = getPeerreviewByContentId(toolContentId); + Map emails = new EmailAnalysisBuilder(peerreview, session, ratingService, + peerreviewSessionDao, peerreviewUserDao, this, messageService).generateHTMLEmailsForSession(); + for (Map.Entry entry : emails.entrySet()) { + eventNotificationService.sendMessage(null, entry.getKey().intValue(), + IEventNotificationService.DELIVERY_METHOD_MAIL, getResultsEmailSubject(peerreview), + entry.getValue(), true); + } + + session.setEmailsSent(true); + peerreviewSessionDao.update(session); + + emailsSent += emails.size(); } - return emails.size(); + + return emailsSent; } @Override Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java =================================================================== diff -u -r187325e829e75b95c41a171d783fafb003fb1ba6 -r91082736703fb64b4b0024953bb394371119c89a --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 187325e829e75b95c41a171d783fafb003fb1ba6) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -145,8 +145,8 @@ Long toolContentId = (Long) sessionMap.get(PeerreviewConstants.ATTR_TOOL_CONTENT_ID); List criterias = service.getRatingCriterias(toolContentId); - Map rubricsLearnerData = service - .getRubricsLearnerData(toolSessionId, criteria, criterias); + Map rubricsLearnerData = service.getRubricsLearnerData( + toolSessionId, criteria, criterias); request.setAttribute("rubricsLearnerData", rubricsLearnerData); } @@ -190,7 +190,7 @@ String sortOrder = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SORD); String sortBy = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SIDX, true); - int sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + int sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; if (criteria.isRankingStyleRating()) { sorting = PeerreviewConstants.SORT_BY_AVERAGE_RESULT_ASC; } @@ -263,11 +263,12 @@ if (averageRating != null && averageRating.length() > 0) { if (criteria.isStarStyleRating()) { String starString = "
"; - starString += "
"; + starString += + "
"; starString += "
"; - starString += "
"; + starString += + "
"; String msg = service.getLocalisedMessage("label.average.rating", new Object[] { averageRating, numberOfVotes }); starString += msg; @@ -342,8 +343,8 @@ // Show comment if comment has been left by user. Exclude the special case where it is a hedging rating // and the rating is not null - otherwise we end up putting the justification comment against entries that were not rated. String comment = (String) ratingDetails[1]; - if (comment != null && (!criteria.isHedgeStyleRating() - || (criteria.isHedgeStyleRating() && ratingDetails[2] != null))) { + if (comment != null && (!criteria.isHedgeStyleRating() || (criteria.isHedgeStyleRating() + && ratingDetails[2] != null))) { ArrayNode userData = JsonNodeFactory.instance.arrayNode(); userData.add(i); userData.add((String) ratingDetails[4]); @@ -463,9 +464,9 @@ if (entryTime == null) { userData.add(""); } else { - StringBuilder nameField = new StringBuilder(""); + StringBuilder nameField = new StringBuilder(""); userData.add(nameField.toString()); } @@ -525,9 +526,8 @@ Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); Long userId = WebUtil.readLongParam(request, "userID"); - if (previewDTO == null || !dateTimeStamp.equals(previewDTO.getDateTimeStamp()) - || !toolSessionId.equals(previewDTO.getToolSessionId()) - || !userId.equals(previewDTO.getLearnerUserId())) { + if (previewDTO == null || !dateTimeStamp.equals(previewDTO.getDateTimeStamp()) || !toolSessionId.equals( + previewDTO.getToolSessionId()) || !userId.equals(previewDTO.getLearnerUserId())) { log.error( "Unable to send preview as requested parameters to not matched the catched parameters. Email text in session does not match the requested email. Cached preview: " + previewDTO); @@ -548,8 +548,7 @@ @RequestMapping("/sendResultsToSessionUsers") @ResponseBody @SuppressWarnings("unchecked") - public String sendResultsToSessionUsers(HttpServletRequest request, HttpServletResponse response) - throws IOException { + public String sendResultsToUsers(HttpServletRequest request, HttpServletResponse response) throws IOException { String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession() @@ -558,9 +557,9 @@ sessionMap.remove("emailPreviewDTO"); // clear any old cached emails Long contentId = (Long) sessionMap.get(PeerreviewConstants.ATTR_TOOL_CONTENT_ID); - Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId", true); - int numEmailsSent = service.emailReportToSessionUsers(contentId, toolSessionId); + int numEmailsSent = service.emailReportToUsers(contentId, toolSessionId); response.setContentType("text/html;charset=utf-8"); return service.getLocalisedMessage("msg.results.sent", new Object[] { numEmailsSent }); Index: lams_tool_preview/web/pages/monitoring/summary.jsp =================================================================== diff -u -rbcf2ed10c99cc927fa49e9f1f72875adbcb9e23d -r91082736703fb64b4b0024953bb394371119c89a --- lams_tool_preview/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision bcf2ed10c99cc927fa49e9f1f72875adbcb9e23d) +++ lams_tool_preview/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 91082736703fb64b4b0024953bb394371119c89a) @@ -20,17 +20,17 @@ @@ -56,75 +56,82 @@ } return element; } - + function sendResults(sessionId) { if (!confirm('')) { return; } - let buttons = getResultsElement(sessionId, ".btn-disable-on-submit"), - messageArea = getResultsElement(sessionId, ".messageArea2"), - messageAreaBusy = getResultsElement(sessionId, ".messageArea2_Busy"), - url = ""; - + let buttons = sessionId ? getResultsElement(sessionId, ".btn-disable-on-submit") : $('.btn-disable-on-submit'), + messageArea = sessionId ? getResultsElement(sessionId, ".messageArea2") : $('#message-area-general'), + messageAreaBusy = sessionId ? getResultsElement(sessionId, ".messageArea2_Busy") : $('#message-area-busy-general'), + emailsSentIcons = sessionId ? $('#heading' + sessionId + ' .emails-sent-icon') : $('.emails-sent-icon'), + url = ""; + messageArea.html(""); messageAreaBusy.show(); buttons.prop("disabled", true); messageArea.load( - url, - { - sessionMapID: "${sessionMapID}", - toolContentID: ${sessionMap.toolContentID}, - toolSessionId: sessionId, - reqID: (new Date()).getTime() - }, - function() { - messageAreaBusy.hide(); - buttons.prop("disabled", false); - } + url, + { + sessionMapID: "${sessionMapID}", + toolContentID: ${sessionMap.toolContentID}, + toolSessionId: sessionId, + reqID: (new Date()).getTime() + }, + function() { + messageAreaBusy.hide(); + buttons.prop("disabled", false); + emailsSentIcons.removeClass('hidden'); + } ); return false; }

- +

- + - +
- +
-
+
- - -
-
+ + +
+ - -
+
+ +
- + @@ -172,15 +179,16 @@ loffset5 - - + + -
+
- +
@@ -193,23 +201,36 @@
+
+ +
+
+
- + + + ?sessionMapID=${sessionMapID} -
+ <%@ include file="advanceoptions.jsp"%> - + \ No newline at end of file