Index: lams_monitoring/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rdfb737a6f6ad80ea14567599cbd1dfcc66f1f125 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision dfb737a6f6ad80ea14567599cbd1dfcc66f1f125) +++ lams_monitoring/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -517,6 +517,7 @@ label.monitoring.time.limit.minus.minute.1 = - 1 minute label.monitoring.time.limit.minus.minute.5 = - 5 minutes label.monitoring.time.limit.finish.now = Finish now +label.monitoring.time.limit.finish.now.tooltip=It sets the absolute time limit to the current time. It acts as if the time limit has just expired. Individual time extensions will still be applied. label.monitoring.time.limit.finish.now.confirm = Are you sure you want to make all learners finish their work right now? label.monitoring.time.limit.individual.placeholder = Type name label.monitoring.time.limit.expired = Expired @@ -542,4 +543,4 @@ label.monitoring.learning.design.path = Path to learning design label.monitoring.learning.design.path.courses = Courses label.monitoring.learning.design.path.run.sequences = Run sequences -label.monitoring.time.limit.absolute.await.trigger = starts when first learner enters +label.monitoring.time.limit.absolute.await.trigger = starts when first learner enters \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -rddd6d9e928bdcfbd5dbb76e89351a9a7ec16ee8b -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision ddd6d9e928bdcfbd5dbb76e89351a9a7ec16ee8b) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -35,6 +35,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Locale; @@ -813,6 +814,11 @@ assessmentResultDao.update(result); + if (!isAutosave && assessment.getTimeLimitAdjustments().containsKey(userId.intValue())) { + // make time widget stop displaying individual extension for this user + FluxRegistry.emit(AssessmentConstants.TIME_LIMIT_PANEL_UPDATE_SINK_NAME, assessment.getContentId()); + } + // refresh non-leaders when leader changed his answers or submitted them if (assessment.isUseSelectLeaderToolOuput() && (!isAutosave || isAnswerModified)) { AssessmentSession session = getSessionBySessionId(result.getSessionId()); @@ -1467,13 +1473,14 @@ if (!results.isEmpty()) { //prepare list of the questions to display, filtering out questions that aren't supposed to be answered - Set questions = new TreeSet<>(); + Set questions = null; //in case there is at least one random question - we need to show all questions in a drop down select if (assessment.hasRandomQuestion()) { - questions.addAll(assessment.getQuestions()); + questions = new TreeSet<>(assessment.getQuestions()); //otherwise show only questions from the question list } else { + questions = new LinkedHashSet<>(); for (QuestionReference reference : assessment.getQuestionReferences()) { questions.add(reference.getQuestion()); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java =================================================================== diff -u -r52a6369ce66a2ea70d38bfa2e627dfcde6354b10 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 52a6369ce66a2ea70d38bfa2e627dfcde6354b10) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -1054,6 +1054,10 @@ } userJSON.put("name", name); + AssessmentResult result = service.getLastAssessmentResult(assessment.getUid(), + user.getUserId().longValue()); + userJSON.put("finished", result != null && result.getFinishDate() != null); + responseJSON.add(userJSON); } return responseJSON.toString(); Index: lams_tool_assessment/web/pages/monitoring/parts/usersummary.jsp =================================================================== diff -u -r6866da235d682d74f883afdd01e00e92d16a13eb -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_assessment/web/pages/monitoring/parts/usersummary.jsp (.../usersummary.jsp) (revision 6866da235d682d74f883afdd01e00e92d16a13eb) +++ lams_tool_assessment/web/pages/monitoring/parts/usersummary.jsp (.../usersummary.jsp) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -103,7 +103,7 @@ editoptions: {size:4, maxlength: 4}, align:"right", classes: 'vertical-align', title : false }, {name:'marker', index:'marker', width: 80, title: false}, {name:'markerComment', index:'markerComment', width:120, editable:true, sortable: false, - editoptions: {maxlength: 100}, align:"left", classes: 'vertical-align', title : false } + editoptions: {maxlength: 600}, align:"left", classes: 'vertical-align', title : false } ], multiselect: false, cellurl: '&', @@ -367,4 +367,4 @@ - + \ No newline at end of file Index: lams_tool_assessment/web/pages/monitoring/summary.jsp =================================================================== diff -u -r52a6369ce66a2ea70d38bfa2e627dfcde6354b10 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 52a6369ce66a2ea70d38bfa2e627dfcde6354b10) +++ lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -195,7 +195,7 @@ editoptions: {size:4, maxlength: 4}, align:"right", classes: 'vertical-align', title : false }, {name:'marker', index:'marker', width: 80, title: false}, {name:'markerComment', index:'markerComment', width:120, editable:true, sortable: false, - editoptions: {maxlength: 100}, align:"left", classes: 'vertical-align', title : false } + editoptions: {maxlength: 600}, align:"left", classes: 'vertical-align', title : false } ], multiselect: false, Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java =================================================================== diff -u -r0356b71a54403d2a4f45a3b90e5fab4fc3c11dd7 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision 0356b71a54403d2a4f45a3b90e5fab4fc3c11dd7) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -438,15 +438,11 @@ user.setSessionFinished(true); dokumaranUserDao.saveObject(user); - // DokumaranSession session = dokumaranSessionDao.getSessionBySessionId(toolSessionId); - // session.setStatus(DokumaranConstants.COMPLETED); - // dokumaranSessionDao.saveObject(session); + DokumaranSession session = dokumaranSessionDao.getSessionBySessionId(toolSessionId); //finish Etherpad session. Encapsulate it in try-catch block as we don't want it to affect regular LAMS workflow. try { EPLiteClient client = etherpadService.getClient(); - - DokumaranSession session = dokumaranSessionDao.getSessionBySessionId(toolSessionId); String groupId = session.getEtherpadGroupId(); String userName = user.getFirstName() + " " + user.getLastName(); @@ -467,6 +463,11 @@ log.debug(e1.getMessage()); } + Dokumaran dokumaran = session.getDokumaran(); + if (dokumaran.getTimeLimitAdjustments().containsKey(userId.intValue())) { + FluxRegistry.emit(DokumaranConstants.TIME_LIMIT_PANEL_UPDATE_SINK_NAME, dokumaran.getContentId()); + } + String nextUrl = null; try { nextUrl = this.leaveToolSession(toolSessionId, userId); Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java =================================================================== diff -u -r52a6369ce66a2ea70d38bfa2e627dfcde6354b10 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 52a6369ce66a2ea70d38bfa2e627dfcde6354b10) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -508,6 +508,10 @@ } userJSON.put("name", name); + DokumaranUser dokumaranUser = dokumaranService.getLearnerByIDAndContent(user.getUserId().longValue(), + toolContentId); + userJSON.put("finished", dokumaranUser != null && dokumaranUser.isSessionFinished()); + responseJSON.add(userJSON); } return responseJSON.toString(); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r0356b71a54403d2a4f45a3b90e5fab4fc3c11dd7 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 0356b71a54403d2a4f45a3b90e5fab4fc3c11dd7) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -775,6 +775,11 @@ scratchieSessionDao.saveObject(session); recalculateMarkForSession(toolSessionId, false); + + if (session.getTimeLimitAdjustment() != null) { + FluxRegistry.emit(ScratchieConstants.TIME_LIMIT_PANEL_UPDATE_SINK_NAME, + session.getScratchie().getContentId()); + } } @Override Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java =================================================================== diff -u -r52a6369ce66a2ea70d38bfa2e627dfcde6354b10 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 52a6369ce66a2ea70d38bfa2e627dfcde6354b10) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -23,27 +23,9 @@ package org.lamsfoundation.lams.tool.scratchie.web.controller; -import java.io.IOException; -import java.security.InvalidParameterException; -import java.time.LocalDateTime; -import java.time.OffsetDateTime; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TimeZone; -import java.util.TreeSet; -import java.util.stream.Collectors; - -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -88,9 +70,25 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.security.InvalidParameterException; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TimeZone; +import java.util.TreeSet; +import java.util.stream.Collectors; @Controller @RequestMapping("/monitoring") @@ -366,6 +364,7 @@ userJSON.put("sessionId", session.getSessionId()); userJSON.put("adjustment", session.getTimeLimitAdjustment()); userJSON.put("name", groupLabel + session.getSessionName() + "\""); + userJSON.put("finished", session.isScratchingFinished()); responseJSON.add(userJSON); } Index: lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/WhiteboardService.java =================================================================== diff -u -r0356b71a54403d2a4f45a3b90e5fab4fc3c11dd7 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/WhiteboardService.java (.../WhiteboardService.java) (revision 0356b71a54403d2a4f45a3b90e5fab4fc3c11dd7) +++ lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/service/WhiteboardService.java (.../WhiteboardService.java) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -388,6 +388,12 @@ user.setSessionFinished(true); whiteboardUserDao.update(user); + // there is no Flux to update time limit panel yet, but we need to turn it on once it appears +// Whiteboard whiteboard = user.getWhiteboard(); +// if (whiteboard.getTimeLimitAdjustments().containsKey(userId.intValue())) { +// FluxRegistry.emit(WhiteboardConstants.TIME_LIMIT_PANEL_UPDATE_SINK_NAME, whiteboard.getContentId()); +// } + String nextUrl = null; try { nextUrl = this.leaveToolSession(toolSessionId, userId); Index: lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/web/controller/MonitoringController.java =================================================================== diff -u -r52a6369ce66a2ea70d38bfa2e627dfcde6354b10 -r0edec29c40635712f7efedfea92d27fb263b841d --- lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 52a6369ce66a2ea70d38bfa2e627dfcde6354b10) +++ lams_tool_whiteboard/src/java/org/lamsfoundation/lams/tool/whiteboard/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 0edec29c40635712f7efedfea92d27fb263b841d) @@ -431,6 +431,10 @@ } userJSON.put("name", name); + WhiteboardUser whiteboardUser = whiteboardService.getLearnerByIDAndContent(user.getUserId().longValue(), + toolContentId); + userJSON.put("finished", whiteboardUser != null && whiteboardUser.isSessionFinished()); + responseJSON.add(userJSON); } return responseJSON.toString();