Skip to content
Snippets Groups Projects
Commit 98cffa31 authored by srosse's avatar srosse
Browse files

OO-5142: restart can bypass the suspended/ended session checks

parent cfc9f95f
No related branches found
No related tags found
No related merge requests found
......@@ -24,8 +24,10 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Deque;
import org.apache.logging.log4j.Logger;
import org.olat.core.gui.components.Window;
import org.olat.core.id.OLATResourceable;
import org.olat.core.logging.Tracing;
/**
*
......@@ -34,6 +36,8 @@ import org.olat.core.id.OLATResourceable;
*
*/
public class WindowedResourceableList {
private static final Logger log = Tracing.createLoggerFor(WindowedResourceableList.class);
private final Deque<WindowedResourceable> registeredResources = new ArrayDeque<>();
......@@ -61,9 +65,12 @@ public class WindowedResourceableList {
}
public synchronized void deregisterResourceable(OLATResourceable resource, String subIdent, Window window) {
WindowedResourceable wResource = new WindowedResourceable(window.getInstanceId(), resource, subIdent);
Collection<WindowedResourceable> wResources = Collections.singletonList(wResource);
registeredResources.removeAll(wResources);
try {
WindowedResourceable wResource = new WindowedResourceable(window.getInstanceId(), resource, subIdent);
Collection<WindowedResourceable> wResources = Collections.singletonList(wResource);
registeredResources.removeAll(wResources);
} catch (Exception e) {
log.error("", e);
}
}
}
......@@ -574,10 +574,12 @@ public class AssessmentTestDisplayController extends BasicController implements
}
private void doExitTest(UserRequest ureq) {
resourcesList.deregisterResourceable(entry, subIdent, getWindow());
fireEvent(ureq, new QTI21Event(QTI21Event.EXIT));
}
private void doCloseResults(UserRequest ureq) {
resourcesList.deregisterResourceable(entry, subIdent, getWindow());
fireEvent(ureq, new QTI21Event(QTI21Event.CLOSE_RESULTS));
}
......@@ -593,6 +595,7 @@ public class AssessmentTestDisplayController extends BasicController implements
VelocityContainer suspendedVC = createVelocityContainer("suspended");
mainPanel.setContent(suspendedVC);
suspendAssessmentTest(ureq.getRequestTimestamp());
resourcesList.deregisterResourceable(entry, subIdent, getWindow());
fireEvent(ureq, new Event("suspend"));
}
......@@ -816,7 +819,9 @@ public class AssessmentTestDisplayController extends BasicController implements
testSessionController = qtiService.getCachedTestSessionController(candidateSession, testSessionController);
testSessionController.setCurrentRequestTimestamp(ureq.getRequestTimestamp());
if(timeLimitBarrier(ureq) || sessionReseted(ureq) || sessionEndedOrSuspended()) {
if(authorMode && qe.getEvent() == QTIWorksAssessmentTestEvent.Event.restart) {
restartTest(ureq);
} else if(timeLimitBarrier(ureq) || sessionReseted(ureq) || sessionEndedOrSuspended()) {
return;
}
......@@ -891,6 +896,7 @@ public class AssessmentTestDisplayController extends BasicController implements
}
private void restartTest(UserRequest ureq) {
resourcesList.deregisterResourceable(entry, subIdent, getWindow());
if(!candidateSession.isAuthorMode()) return;
fireEvent(ureq, new RestartEvent());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment