diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java index 4a23c7a5db0e2562340e6a82ca7ccecaffe8c1b3..312c45d5cf22458a8edaadaefec166c19e1adf2f 100644 --- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java +++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java @@ -200,7 +200,6 @@ public class QTI21AssessmentRunController extends BasicController implements Gen mainVC.contextPut("hasPassedValue", (scoreEval.getPassed() == null ? Boolean.FALSE : Boolean.TRUE)); mainVC.contextPut("passed", scoreEval.getPassed()); mainVC.contextPut("attempts", attempts); //at least one attempt - exposeResults(ureq); } } else if(courseNode instanceof IQTESTCourseNode) { IQTESTCourseNode testCourseNode = (IQTESTCourseNode)courseNode; @@ -236,7 +235,9 @@ public class QTI21AssessmentRunController extends BasicController implements Gen mainVC.contextPut("log", am.getUserNodeLog(courseNode, identity)); } } - } + } + + exposeResults(ureq); } private void checkChats (UserRequest ureq) { @@ -383,26 +384,38 @@ public class QTI21AssessmentRunController extends BasicController implements Gen private void doShowResults(UserRequest ureq) { removeAsListenerAndDispose(resultCtrl); - AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); - AssessmentEntry assessmentEntry = am.getAssessmentEntry(courseNode, getIdentity()); - AssessmentTestSession session = qtiService.getAssessmentTestSession(assessmentEntry.getAssessmentId()); + AssessmentTestSession session = null; + if(courseNode instanceof SelfAssessableCourseNode) { + RepositoryEntry courseEntry = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); + session = qtiService.getLastAssessmentTestSessions(courseEntry, courseNode.getIdent(), testEntry, getIdentity()); + } else { + AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); + AssessmentEntry assessmentEntry = am.getAssessmentEntry(courseNode, getIdentity()); + session = qtiService.getAssessmentTestSession(assessmentEntry.getAssessmentId()); + } + if(session == null) { mainVC.contextPut("showResults", Boolean.FALSE); } else { - FileResourceManager frm = FileResourceManager.getInstance(); - File fUnzippedDirRoot = frm.unzipFileResource(session.getTestEntry().getOlatResource()); - URI assessmentObjectUri = qtiService.createAssessmentObjectUri(fUnzippedDirRoot); - File submissionDir = qtiService.getAssessmentResultFile(session); - String mapperUri = registerCacheableMapper(null, "QTI21CNResults::" + session.getTestEntry().getKey(), - new ResourcesMapper(assessmentObjectUri, submissionDir)); - - resultCtrl = new AssessmentResultController(ureq, getWindowControl(), getIdentity(), true, - session, getDeliveryOptions().getShowResultsOnFinish(), fUnzippedDirRoot, mapperUri, false, false); - listenTo(resultCtrl); - mainVC.put("resultReport", resultCtrl.getInitialComponent()); - mainVC.contextPut("showResults", Boolean.TRUE); + doShowResults(ureq, session); } } + + private void doShowResults(UserRequest ureq, AssessmentTestSession session) { + FileResourceManager frm = FileResourceManager.getInstance(); + File fUnzippedDirRoot = frm.unzipFileResource(session.getTestEntry().getOlatResource()); + URI assessmentObjectUri = qtiService.createAssessmentObjectUri(fUnzippedDirRoot); + File submissionDir = qtiService.getAssessmentResultFile(session); + String mapperUri = registerCacheableMapper(null, "QTI21CNResults::" + session.getTestEntry().getKey(), + new ResourcesMapper(assessmentObjectUri, submissionDir)); + + resultCtrl = new AssessmentResultController(ureq, getWindowControl(), getIdentity(), true, + session, getDeliveryOptions().getShowResultsOnFinish(), fUnzippedDirRoot, mapperUri, false, false); + listenTo(resultCtrl); + mainVC.put("resultReport", resultCtrl.getInitialComponent()); + mainVC.contextPut("showResults", Boolean.TRUE); + } + private void doHideResults() { mainVC.contextPut("showResults", Boolean.FALSE);