Index: lams_central/conf/security/Owasp.CsrfGuard.properties =================================================================== diff -u -r0ebaba46f0ce87b5138e8e70cc1965887c1c7787 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_central/conf/security/Owasp.CsrfGuard.properties (.../Owasp.CsrfGuard.properties) (revision 0ebaba46f0ce87b5138e8e70cc1965887c1c7787) +++ lams_central/conf/security/Owasp.CsrfGuard.properties (.../Owasp.CsrfGuard.properties) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -233,6 +233,8 @@ org.owasp.csrfguard.protected.scratchieMonitoringChangeLeader=/lams/tool/lascrt11/monitoring/changeLeaderForGroup.do org.owasp.csrfguard.protected.scratchieTblMonitoringExportExcel=/lams/tool/lascrt11/tblmonitoring/exportExcel.do org.owasp.csrfguard.protected.scratchieSaveUserMark=/lams/tool/lascrt11/monitoring/saveUserMark.do +org.owasp.csrfguard.protected..scratchieUpdateTimeLimit=/lams/tool/lascrt11/monitoring/updateTimeLimit.do +org.owasp.csrfguard.protected..scratchieUpdateIndividualTimeLimit=/lams/tool/lascrt11/monitoring/updateIndividualTimeLimit.do org.owasp.csrfguard.protected.spreadsheetAuthoringSave=/lams/tool/lasprd10/authoring/updateContent.do org.owasp.csrfguard.protected.spreadsheetAuthoringDefineLater=/lams/tool/lasprd10/authoring/definelater.do Index: lams_tool_assessment/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r661711eac0fc4cd343f1507be6544771ee74f947 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 661711eac0fc4cd343f1507be6544771ee74f947) +++ lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -389,6 +389,7 @@ label.monitoring.summary.time.limit.finish.now = Finish now label.monitoring.summary.time.limit.finish.now.confirm = Are you sure you want to make all learners finish their work right now? label.monitoring.summary.time.limit.individual.placeholder = Type name +label.monitoring.summary.time.limit.expired = Expired label.authoring.advance.answer.justification = Enable answer justification label.answer.justification = Justification label.answer.justification.prompt = Please justify your answer... Index: lams_tool_assessment/web/pages/monitoring/summary.jsp =================================================================== diff -u -r8d440baa0d18441b56553aabcc56e1981a84b206 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 8d440baa0d18441b56553aabcc56e1981a84b206) +++ lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -562,7 +562,7 @@ counter.removeClass('countdown-timeout'); } }, - expiryText : 'Expired' + expiryText : '' }); } else { // if counter is paused, we can not adjust time, so resume it for a moment Index: lams_tool_doku/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rde7760c4ab6ae0196c9955d07e0ca53679b78471 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision de7760c4ab6ae0196c9955d07e0ca53679b78471) +++ lams_tool_doku/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -140,6 +140,7 @@ label.monitoring.summary.time.limit.relative.desc = Set the duration in minutes that the learners will have to have to complete the assessment. The duration will apply from the moment each learner begins the assessment. For example, if set to 5 minutes, all learners will have 5 minutes from the moment each of them start the assessment. label.monitoring.summary.time.limit.relative = Duration relative to from student start label.monitoring.summary.time.limit = Timing limits +label.monitoring.summary.time.limit.expired = Expired label.time.limit.tooltip = Number of minutes that each student will get from the moment they enter this activity. Leave it at 0 for no time restrictions. label.monitoring.learner.marks.name = Name label.show.chat.tooltip = Enables the chat feature allowing students to exchange messages while working on the document simultaneously. Index: lams_tool_doku/web/pages/monitoring/summary.jsp =================================================================== diff -u -r1324c32fc07460a47b0b53b25a2b43d77fbd500c -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 1324c32fc07460a47b0b53b25a2b43d77fbd500c) +++ lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -601,7 +601,7 @@ counter.removeClass('countdown-timeout'); } }, - expiryText : 'Expired' + expiryText : '' }); } else { // if counter is paused, we can not adjust time, so resume it for a moment Index: lams_tool_scratchie/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r705c0f72b765849974bfa0d9f8b04797619e8da7 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 705c0f72b765849974bfa0d9f8b04797619e8da7) +++ lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -291,3 +291,23 @@ label.total.1st.attempt.by.question = Sums all the teams that answer this question correctly in their first attempt. label.total.1st.attempt.average = Average of all the times in which teams answered questions correctly in their first attempt. label.export.overall.summary = Overall summary +label.monitoring.summary.time.limit = Timing limits +label.monitoring.summary.time.limit.relative = Duration relative to from student start +label.monitoring.summary.time.limit.relative.desc = Set the duration in minutes that the learners will have to have to complete the assessment. The duration will apply from the moment each learner begins the assessment. For example, if set to 5 minutes, all learners will have 5 minutes from the moment each of them start the assessment. +label.monitoring.summary.time.limit.absolute = Duration for all learners +label.monitoring.summary.time.limit.absolute.desc = Set the number of minutes to finish the assessment for all learners. This duration applies to all learners regardless when each of them starts the assessment. Set the minutes and click Start for the time to apply. +label.monitoring.summary.time.limit.individual = Individual extensions +label.monitoring.summary.time.limit.individual.desc = Apply duration extensions only for certain groups. Search the group and then apply extra time. +label.monitoring.summary.time.limit.minutes = minutes +label.monitoring.summary.time.limit.enabled = Enabled +label.monitoring.summary.time.limit.disabled = Disabled +label.monitoring.summary.time.limit.start = Start +label.monitoring.summary.time.limit.cancel = Cancel +label.monitoring.summary.time.limit.plus.minute.1 = Plus 1 minute +label.monitoring.summary.time.limit.plus.minute.5 = Plus 5 minutes +label.monitoring.summary.time.limit.minus.minute.1 = Minus 1 minute +label.monitoring.summary.time.limit.minus.minute.5 = Minus 5 minutes +label.monitoring.summary.time.limit.finish.now = Finish now +label.monitoring.summary.time.limit.finish.now.confirm = Are you sure you want to make all learners finish their work right now? +label.monitoring.summary.time.limit.individual.placeholder = Type name +label.monitoring.summary.time.limit.expired = Expired \ No newline at end of file Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20210301.sql =================================================================== diff -u -r0bf300963373e88adfe45bd5484f6683516ef966 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20210301.sql (.../patch20210301.sql) (revision 0bf300963373e88adfe45bd5484f6683516ef966) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20210301.sql (.../patch20210301.sql) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -9,7 +9,7 @@ ALTER TABLE tl_lascrt11_scratchie ADD COLUMN absolute_time_limit DATETIME AFTER relative_time_limit; -ALTER TABLE tl_lascrt11_session ADD COLUMN time_limit_adjustment SMALLINT NOT NULL DEFAULT 0 AFTER time_limit_launched_date; +ALTER TABLE tl_lascrt11_session ADD COLUMN time_limit_adjustment SMALLINT AFTER time_limit_launched_date; -- Put all sql statements above here Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java =================================================================== diff -u -r0bf300963373e88adfe45bd5484f6683516ef966 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision 0bf300963373e88adfe45bd5484f6683516ef966) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -24,6 +24,7 @@ package org.lamsfoundation.lams.tool.scratchie.model; import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Date; import java.util.Iterator; import java.util.Set; @@ -392,6 +393,10 @@ this.absoluteTimeLimit = absoluteTimeLimit; } + public Long getAbsoluteTimeLimitSeconds() { + return absoluteTimeLimit == null ? null : absoluteTimeLimit.atZone(ZoneId.systemDefault()).toEpochSecond(); + } + public boolean isRevealOnDoubleClick() { return revealOnDoubleClick; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java =================================================================== diff -u -r0bf300963373e88adfe45bd5484f6683516ef966 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java (.../ScratchieSession.java) (revision 0bf300963373e88adfe45bd5484f6683516ef966) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java (.../ScratchieSession.java) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -72,7 +72,7 @@ private Date timeLimitLaunchedDate; @Column(name = "time_limit_adjustment") - private int timeLimitAdjustment; + private Integer timeLimitAdjustment; // finish or not @Column @@ -116,11 +116,11 @@ this.timeLimitLaunchedDate = timeLimitLaunchedDate; } - public int getTimeLimitAdjustment() { + public Integer getTimeLimitAdjustment() { return timeLimitAdjustment; } - public void setTimeLimitAdjustment(int relativeTimeLimitAdjustment) { + public void setTimeLimitAdjustment(Integer relativeTimeLimitAdjustment) { this.timeLimitAdjustment = relativeTimeLimitAdjustment; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -r705c0f72b765849974bfa0d9f8b04797619e8da7 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 705c0f72b765849974bfa0d9f8b04797619e8da7) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -127,14 +127,6 @@ boolean checkTimeLimitExceeded(long toolContentId, int userId); - /** - * Checks if non-leaders should still wait for leader to submit notebook. - * - * @param toolSession - * @return - */ - boolean isWaitingForLeaderToSubmitNotebook(ScratchieSession toolSession); - List getBurningQuestionsBySession(Long sessionId); /** @@ -452,4 +444,4 @@ boolean isLearnerEligibleForMark(long learnerId, long toolContentId); void changeLeaderForGroup(long toolSessionId, long leaderUserId); -} +} \ No newline at end of file Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r0bf300963373e88adfe45bd5484f6683516ef966 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 0bf300963373e88adfe45bd5484f6683516ef966) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -384,24 +384,6 @@ } @Override - public boolean isWaitingForLeaderToSubmitNotebook(ScratchieSession toolSession) { - Long toolSessionId = toolSession.getSessionId(); - Scratchie scratchie = toolSession.getScratchie(); - ScratchieUser groupLeader = toolSession.getGroupLeader(); - - boolean isReflectOnActivity = scratchie.isReflectOnActivity(); - // get notebook entry - NotebookEntry notebookEntry = null; - if (isReflectOnActivity && (groupLeader != null)) { - notebookEntry = getEntry(toolSessionId, CoreNotebookConstants.NOTEBOOK_TOOL, - ScratchieConstants.TOOL_SIGNATURE, groupLeader.getUserId().intValue()); - } - - // return whether it's waiting for the leader to submit notebook - return isReflectOnActivity && (notebookEntry == null); - } - - @Override public void changeUserMark(Long userId, Long sessionId, Integer newMark) { if (newMark == null) { return; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java =================================================================== diff -u -r0bf300963373e88adfe45bd5484f6683516ef966 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java (.../LearningController.java) (revision 0bf300963373e88adfe45bd5484f6683516ef966) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java (.../LearningController.java) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -251,7 +251,7 @@ } // check time limits - if (scratchie.getRelativeTimeLimit() != 0 && !mode.isTeacher()) { + if ((scratchie.getRelativeTimeLimit() != 0 || scratchie.getAbsoluteTimeLimit() != null) && !mode.isTeacher()) { // show waitForLeaderLaunchTimeLimit page if the leader hasn't started activity if (!isUserLeader && toolSession.getTimeLimitLaunchedDate() == null) { @@ -282,12 +282,6 @@ // go through whole method again, with new settings return "forward:start.do"; - } else if (isScratchingFinished) { - // teacher gave extra time - toolSession.setScratchingFinished(false); - scratchieService.saveOrUpdateScratchieSession(toolSession); - // go through whole method again, with new settings - return "forward:start.do"; } } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningWebsocketServer.java =================================================================== diff -u -r0bf300963373e88adfe45bd5484f6683516ef966 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 0bf300963373e88adfe45bd5484f6683516ef966) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -106,7 +106,7 @@ Scratchie scratchie = scratchieService.getScratchieByContentId(toolContentId); TimeCache existingTimeSettings = new TimeCache(); - existingTimeSettings.absoluteTimeLimit = null; + existingTimeSettings.absoluteTimeLimit = scratchie.getAbsoluteTimeLimit(); existingTimeSettings.relativeTimeLimit = scratchie.getRelativeTimeLimit() * 60; existingTimeSettings.timeLimitAdjustment = new HashMap<>(); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java =================================================================== diff -u -r682279f3b246b3293dd9a4b550a06767949499ac -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 682279f3b246b3293dd9a4b550a06767949499ac) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -24,6 +24,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; @@ -57,6 +60,7 @@ import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieConfigItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieItem; +import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieUser; import org.lamsfoundation.lams.tool.scratchie.service.IScratchieService; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; @@ -84,6 +88,7 @@ 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; @@ -305,6 +310,78 @@ return "pages/monitoring/parts/statisticpart"; } + @RequestMapping(path = "/updateTimeLimit", method = RequestMethod.POST) + @ResponseStatus(HttpStatus.OK) + public void updateTimeLimit(@RequestParam(name = AttributeNames.PARAM_TOOL_CONTENT_ID) long toolContentId, + @RequestParam int relativeTimeLimit, @RequestParam(required = false) Long absoluteTimeLimit) { + if (relativeTimeLimit < 0) { + throw new InvalidParameterException( + "Relative time limit must not be negative and it is " + relativeTimeLimit); + } + if (absoluteTimeLimit != null && relativeTimeLimit != 0) { + throw new InvalidParameterException( + "Relative time limit must not be provided when absolute time limit is set"); + } + + Scratchie scratchie = scratchieService.getScratchieByContentId(toolContentId); + scratchie.setRelativeTimeLimit(relativeTimeLimit); + // set time limit as seconds from start of epoch, using current server time zone + scratchie.setAbsoluteTimeLimit(absoluteTimeLimit == null ? null + : LocalDateTime.ofEpochSecond(absoluteTimeLimit, 0, OffsetDateTime.now().getOffset())); + scratchieService.saveOrUpdateScratchie(scratchie); + } + + @RequestMapping(path = "/getPossibleIndividualTimeLimitUsers", method = RequestMethod.GET) + @ResponseBody + public String getPossibleIndividualTimeLimitUsers( + @RequestParam(name = AttributeNames.PARAM_TOOL_CONTENT_ID) long toolContentId, + @RequestParam(name = "term") String searchString) { + + ArrayNode responseJSON = JsonNodeFactory.instance.arrayNode(); + String groupLabel = scratchieService.getMessage("monitoring.label.group") + " \""; + for (ScratchieSession session : scratchieService.getSessionsByContentId(toolContentId)) { + if (session.getSessionName().toLowerCase().contains(searchString.toLowerCase())) { + ObjectNode groupJSON = JsonNodeFactory.instance.objectNode(); + groupJSON.put("label", groupLabel + session.getSessionName() + "\""); + groupJSON.put("value", "group-" + session.getSessionId()); + responseJSON.add(groupJSON); + } + } + return responseJSON.toString(); + } + + @RequestMapping(path = "/getExistingIndividualTimeLimitUsers", method = RequestMethod.GET) + @ResponseBody + public String getExistingIndividualTimeLimitUsers( + @RequestParam(name = AttributeNames.PARAM_TOOL_CONTENT_ID) long toolContentId) { + + String groupLabel = scratchieService.getMessage("monitoring.label.group") + " \""; + ArrayNode responseJSON = JsonNodeFactory.instance.arrayNode(); + for (ScratchieSession session : scratchieService.getSessionsByContentId(toolContentId)) { + if (session.getTimeLimitAdjustment() == null) { + continue; + } + ObjectNode userJSON = JsonNodeFactory.instance.objectNode(); + userJSON.put("sessionId", session.getSessionId()); + userJSON.put("adjustment", session.getTimeLimitAdjustment()); + userJSON.put("name", groupLabel + session.getSessionName() + "\""); + + responseJSON.add(userJSON); + } + return responseJSON.toString(); + } + + @RequestMapping(path = "/updateIndividualTimeLimit", method = RequestMethod.POST) + @ResponseStatus(HttpStatus.OK) + public void updateIndividualTimeLimit(@RequestParam String itemId, + @RequestParam(required = false) Integer adjustment) { + + String[] itemIdParts = itemId.split("-"); + ScratchieSession session = scratchieService.getScratchieSessionBySessionId(Long.valueOf(itemIdParts[1])); + session.setTimeLimitAdjustment(adjustment); + scratchieService.saveOrUpdateScratchieSession(session); + } + @RequestMapping(path = "/displayChangeLeaderForGroupDialogFromActivity") public String displayChangeLeaderForGroupDialogFromActivity( @RequestParam(name = AttributeNames.PARAM_TOOL_SESSION_ID) long toolSessionId) { Index: lams_tool_scratchie/web/includes/css/scratchie-learning.scss =================================================================== diff -u -r866c77698571a608a81502a434281cf1161b417e -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/web/includes/css/scratchie-learning.scss (.../scratchie-learning.scss) (revision 866c77698571a608a81502a434281cf1161b417e) +++ lams_tool_scratchie/web/includes/css/scratchie-learning.scss (.../scratchie-learning.scss) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -93,4 +93,16 @@ .question-etherpad { padding: 0; +} + +.countdown-timeout { + color: #FF3333 !important; +} + +#countdown { + width: 150px; + font-size: 110%; + font-style: italic; + color:#47bc23; + text-align: center; } \ No newline at end of file Index: lams_tool_scratchie/web/pages/learning/learning.jsp =================================================================== diff -u -r705c0f72b765849974bfa0d9f8b04797619e8da7 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/web/pages/learning/learning.jsp (.../learning.jsp) (revision 705c0f72b765849974bfa0d9f8b04797619e8da7) +++ lams_tool_scratchie/web/pages/learning/learning.jsp (.../learning.jsp) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -27,19 +27,7 @@ - + @@ -384,24 +372,19 @@ location.reload(); return; } - + if (input.clearTimer == true) { // teacher stopped the timer, destroy it $('#countdown').countdown('destroy').remove(); - } else if (input.secondsLeft){ + } else if (typeof input.secondsLeft != 'undefined'){ // teacher updated the timer var secondsLeft = +input.secondsLeft, counterInitialised = $('#countdown').length > 0; if (counterInitialised) { // just set the new time $('#countdown').countdown('option', 'until', secondsLeft + 'S'); - } else if (secondsLeft){ - if (${isScratchingFinished}) { - // teacher gave extra time, reload to enable scratching again - location.reload(); - return; - } + } else { // initialise the timer displayCountdown(secondsLeft); } Index: lams_tool_scratchie/web/pages/monitoring/monitoring.jsp =================================================================== diff -u -r99709648da44b94838622650b6e132b03cb6bbc9 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 99709648da44b94838622650b6e132b03cb6bbc9) +++ lams_tool_scratchie/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -21,6 +21,8 @@ + + Index: lams_tool_scratchie/web/pages/monitoring/parts/advanceOptions.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/web/pages/monitoring/parts/advanceOptions.jsp (.../advanceOptions.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_scratchie/web/pages/monitoring/parts/advanceOptions.jsp (.../advanceOptions.jsp) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -57,16 +57,6 @@ - - - - - - - - - - Index: lams_tool_scratchie/web/pages/monitoring/parts/timeLimit.jsp =================================================================== diff -u --- lams_tool_scratchie/web/pages/monitoring/parts/timeLimit.jsp (revision 0) +++ lams_tool_scratchie/web/pages/monitoring/parts/timeLimit.jsp (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -0,0 +1,192 @@ +<%@ include file="/common/taglibs.jsp"%> + +
+
+
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+

+
+ ${scratchie.relativeTimeLimit}  + + +
+ +
+
+ +
+
+ + + + + + + + + + +
+
+
+

+

+
+
+ +
+
+ +
+
+ + + + + + + + + + +
+
+
+
+

+

+
+
+ + +
+
+
+
+
Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== diff -u -re58085b6f9a8dfa7a3b327f004cfb50443691684 -r804dca72fa2ac638a9d3e2e66054d82688951c31 --- lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision e58085b6f9a8dfa7a3b327f004cfb50443691684) +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) @@ -51,6 +51,19 @@ #collapseBurning .burning-question-title { cursor: pointer; } + + + .countdown-timeout { + color: #FF3333 !important; + } + + #time-limit-table th { + vertical-align: middle; + } + + #time-limit-table td.centered { + text-align: center; + } @@ -477,6 +829,8 @@ <%@ include file="parts/advanceOptions.jsp"%> +<%@ include file="parts/timeLimit.jsp"%> + <%@ include file="parts/dateRestriction.jsp"%>