diff --git a/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java b/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java index 2f4f95745467cf5d3a67c44d06e6ae84efa16b5a..ebc695d42ab947185b1c821f0ffbc6bef44351e1 100644 --- a/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java +++ b/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java @@ -226,9 +226,9 @@ public class QTI21ResultsExportMediaResource implements MediaResource { String mapperUri = "../../../test" + testEntry.getKey() + "/";//add test repo key String submissionMapperUri = "."; - Controller assessmentResultController = new AssessmentResultController( - ureq, mockwControl, identity, false, session, - fUnzippedDirRoot, mapperUri, submissionMapperUri, QTI21AssessmentResultsOptions.allOptions(), false, true); + String exportUri = "../" + translator.translate("table.user.attempt") + (sessions.indexOf(session)+1); + Controller assessmentResultController = new AssessmentResultController(ureq, mockwControl, identity, false, session, + fUnzippedDirRoot, mapperUri, submissionMapperUri, QTI21AssessmentResultsOptions.allOptions(), false, true, exportUri); Component component = assessmentResultController.getInitialComponent(); String componentHTML = createResultHTML(component); @@ -237,6 +237,10 @@ public class QTI21ResultsExportMediaResource implements MediaResource { File resultXML = qtiService.getAssessmentResultFile(session); convertToZipEntry(zout, idPath + assessmentID +".xml", resultXML); + File signatureXML = qtiService.getAssessmentResultSignature(session); + if (signatureXML != null) { + convertToZipEntry(zout, idPath + "assessmentResultSignature.xml", signatureXML); + } File submissionDir = qtiService.getSubmissionDirectory(session); String baseDir = idPath + "submissions/"; ZipUtil.addDirectoryToZip(submissionDir.toPath(), baseDir, zout); diff --git a/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java b/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java index fe3af2bf23f6cada0e841ebe37bc858e44756325..8a784879dbd4be274a13a2072277bf1f6dac0fd9 100644 --- a/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java +++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java @@ -128,6 +128,12 @@ public class AssessmentResultController extends FormBasicController { public AssessmentResultController(UserRequest ureq, WindowControl wControl, Identity assessedIdentity, boolean anonym, AssessmentTestSession candidateSession, File fUnzippedDirRoot, String mapperUri, String submissionMapperUri, QTI21AssessmentResultsOptions options, boolean withPrint, boolean withTitle) { + this(ureq, wControl, assessedIdentity, anonym, candidateSession, fUnzippedDirRoot, mapperUri, submissionMapperUri, options, withPrint, withTitle, null); + } + + public AssessmentResultController(UserRequest ureq, WindowControl wControl, Identity assessedIdentity, boolean anonym, + AssessmentTestSession candidateSession, File fUnzippedDirRoot, String mapperUri, String submissionMapperUri, + QTI21AssessmentResultsOptions options, boolean withPrint, boolean withTitle, String exportUri) { super(ureq, wControl, "assessment_results"); this.anonym = anonym; @@ -153,9 +159,13 @@ public class AssessmentResultController extends FormBasicController { resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(fUnzippedDirRoot, false, false); File signature = qtiService.getAssessmentResultSignature(candidateSession); - if(signature != null) { - signatureMapperUri = registerCacheableMapper(null, "QTI21Signature::" + CodeHelper.getForeverUniqueID(), - new SignatureMapper(signature)); + if (signature != null) { + if (exportUri != null) { + signatureMapperUri = exportUri; + } else { + signatureMapperUri = registerCacheableMapper(null, "QTI21Signature::" + CodeHelper.getForeverUniqueID(), + new SignatureMapper(signature)); + } } testSessionState = qtiService.loadTestSessionState(candidateSession);