diff --git a/src/main/java/org/olat/ims/qti/resultexport/QTI12ResultsExportMediaResource.java b/src/main/java/org/olat/ims/qti/resultexport/QTI12ResultsExportMediaResource.java index 30f78b55ad4d1694bd8e1f2b25680938216cebbe..be1d59a8f818769bc932549a046857934dd7bc11 100644 --- a/src/main/java/org/olat/ims/qti/resultexport/QTI12ResultsExportMediaResource.java +++ b/src/main/java/org/olat/ims/qti/resultexport/QTI12ResultsExportMediaResource.java @@ -30,9 +30,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Comparator; +import java.util.Date; import java.util.List; +import java.util.TimeZone; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -68,6 +71,10 @@ public class QTI12ResultsExportMediaResource implements MediaResource { private static final String DATA = "export/userdata/"; private static final String SEP = File.separator; + private static final SimpleDateFormat displayDateFormat = new SimpleDateFormat("HH:mm:ss"); + static { + displayDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); + } private VelocityHelper velocityHelper; @@ -162,15 +169,15 @@ public class QTI12ResultsExportMediaResource implements MediaResource { for (QTIResultSet qtiResultSet : resultSets) { Long assessmentID = qtiResultSet.getAssessmentID(); - String idPath = idDir + assessmentID + SEP; + String idPath = idDir + translator.translate("table.user.attempt") + (resultSets.indexOf(qtiResultSet)+1) + SEP; createZipDirectory(zout, idPath); - String linkToHTML = createHTMLfromQTIResultSet(idPath, zout, ureq, identity, qtiResultSet); + String linkToHTML = createHTMLfromQTIResultSet(idPath, idDir, zout, ureq, identity, qtiResultSet); // content of result table ResultDetail resultDetail = new ResultDetail(createLink(String.valueOf(assessmentID), linkToHTML, true), - qtiResultSet.getCreationDate(), qtiResultSet.getDuration(), qtiResultSet.getScore(), - createPassedIcons(qtiResultSet.getIsPassed()), linkToHTML); + qtiResultSet.getCreationDate(), displayDateFormat.format(new Date(qtiResultSet.getDuration())), + qtiResultSet.getScore(), createPassedIcons(qtiResultSet.getIsPassed()), linkToHTML); assessments.add(resultDetail); @@ -242,7 +249,7 @@ public class QTI12ResultsExportMediaResource implements MediaResource { if (assessments.size() > 0) ctx.put("hasResults", Boolean.TRUE); String template = FileUtils.load(QTI12ResultsExportMediaResource.class - .getResourceAsStream("_content/qti12listing.html"), "utf-8"); + .getResourceAsStream("_content/qtiListing.html"), "utf-8"); return velocityHelper.evaluateVTL(template, ctx); } @@ -261,7 +268,7 @@ public class QTI12ResultsExportMediaResource implements MediaResource { ctx.put("assessedMembers", assessedMembers); String template = FileUtils.load(QTI12ResultsExportMediaResource.class - .getResourceAsStream("_content/qti12userlisting.html"), "utf-8"); + .getResourceAsStream("_content/qtiUserlisting.html"), "utf-8"); return velocityHelper.evaluateVTL(template, ctx); } @@ -276,7 +283,7 @@ public class QTI12ResultsExportMediaResource implements MediaResource { return fDoc; } - private String createHTMLfromQTIResultSet(String idPath, ZipOutputStream zout, UserRequest ureq, + private String createHTMLfromQTIResultSet(String idPath, String idDir, ZipOutputStream zout, UserRequest ureq, Identity assessedIdentity, QTIResultSet resultSet) throws IOException { Document doc = FilePersister.retreiveResultsReporting(assessedIdentity, @@ -294,7 +301,7 @@ public class QTI12ResultsExportMediaResource implements MediaResource { convertToZipEntry(zout, html, resultsHTML); convertToZipEntry(zout, xml, resourceXML); - return resultSet.getAssessmentID() + "/" + resultSet.getAssessmentID() + ".html"; + return idPath.replace(idDir, "") + resultSet.getAssessmentID() + ".html"; } private void fsToZip(ZipOutputStream zout, final Path sourceFolder, final String targetPath) throws IOException { diff --git a/src/main/java/org/olat/ims/qti/resultexport/QTI21ResultsExportMediaResource.java b/src/main/java/org/olat/ims/qti/resultexport/QTI21ResultsExportMediaResource.java index 13ed2713bf56b5290bf78117f6db36d446973540..0f6377c740160c198d70386e4b3355c63dc76786 100644 --- a/src/main/java/org/olat/ims/qti/resultexport/QTI21ResultsExportMediaResource.java +++ b/src/main/java/org/olat/ims/qti/resultexport/QTI21ResultsExportMediaResource.java @@ -30,9 +30,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Comparator; +import java.util.Date; import java.util.List; +import java.util.TimeZone; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -78,6 +81,10 @@ public class QTI21ResultsExportMediaResource implements MediaResource { private static final String DATA = "export/userdata/"; private static final String SEP = File.separator; + private static SimpleDateFormat displayDateFormat = new SimpleDateFormat("HH:mm:ss"); + static { + displayDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); + } private VelocityHelper velocityHelper; @@ -93,7 +100,7 @@ public class QTI21ResultsExportMediaResource implements MediaResource { public QTI21ResultsExportMediaResource(CourseEnvironment courseEnv, List<Identity> identities, QTICourseNode courseNode, QTI21Service qtiService, UserRequest ureq) { - this.title = "qti12export"; + this.title = "qti21export"; this.courseNode = courseNode; this.identities = identities; this.velocityHelper = VelocityHelper.getInstance(); @@ -167,14 +174,14 @@ public class QTI21ResultsExportMediaResource implements MediaResource { for (AssessmentTestSession session : sessions) { Long assessmentID = session.getKey(); - String idPath = idDir + assessmentID + SEP; + String idPath = idDir + translator.translate("table.user.attempt") + (sessions.indexOf(session)+1) + SEP; createZipDirectory(zout, idPath); // content of result table ResultDetail resultDetail = new ResultDetail(assessmentID.toString(), session.getCreationDate(), - session.getDuration(), session.getScore().floatValue(), + displayDateFormat.format(new Date(session.getDuration())), session.getScore().floatValue(), createPassedIcons(session.getPassed() == null ? true : session.getPassed()), - assessmentID + SEP + assessmentID + ".html"); + idPath.replace(idDir, "") + assessmentID + ".html"); assessments.add(resultDetail); //WindowControlMocker needed because this is not a controller @@ -279,7 +286,7 @@ public class QTI21ResultsExportMediaResource implements MediaResource { if (assessments.size() > 0) ctx.put("hasResults", Boolean.TRUE); String template = FileUtils.load(QTI21ResultsExportMediaResource.class - .getResourceAsStream("_content/qti12listing.html"), "utf-8"); + .getResourceAsStream("_content/qtiListing.html"), "utf-8"); return velocityHelper.evaluateVTL(template, ctx); } @@ -298,7 +305,7 @@ public class QTI21ResultsExportMediaResource implements MediaResource { ctx.put("assessedMembers", assessedMembers); String template = FileUtils.load(QTI21ResultsExportMediaResource.class - .getResourceAsStream("_content/qti12userlisting.html"), "utf-8"); + .getResourceAsStream("_content/qtiUserlisting.html"), "utf-8"); return velocityHelper.evaluateVTL(template, ctx); } diff --git a/src/main/java/org/olat/ims/qti/resultexport/ResultDetail.java b/src/main/java/org/olat/ims/qti/resultexport/ResultDetail.java index dff8f7a96d1502e3da59bbe02e11f5c5986a475a..39489ee0ed6030659b645c08528b25e2e8d8c216 100644 --- a/src/main/java/org/olat/ims/qti/resultexport/ResultDetail.java +++ b/src/main/java/org/olat/ims/qti/resultexport/ResultDetail.java @@ -26,7 +26,7 @@ public class ResultDetail { private String assessmentID; private Date assessmentDate; private String dateCaption; - private long duration; + private String duration; private String durationCaption; private float score; private String scoreCaption; @@ -36,7 +36,7 @@ public class ResultDetail { public ResultDetail() { } - public ResultDetail(String assessmentID, Date assessmentDate, long duration, float score, String passed, String link) { + public ResultDetail(String assessmentID, Date assessmentDate, String duration, float score, String passed, String link) { super(); this.assessmentID = assessmentID; this.assessmentDate = assessmentDate; @@ -47,16 +47,6 @@ public class ResultDetail { } - - public ResultDetail(String assessmentID, String dateCaption, String durationCaption, String scoreCaption, String passed) { - super(); - this.assessmentID = assessmentID; - this.dateCaption = dateCaption; - this.durationCaption = durationCaption; - this.scoreCaption = scoreCaption; - this.passed = passed; - } - public String getLink() { @@ -107,11 +97,11 @@ public class ResultDetail { this.assessmentDate = assessmentDate; } - public long getDuration() { + public String getDuration() { return duration; } - public void setDuration(long duration) { + public void setDuration(String duration) { this.duration = duration; } diff --git a/src/main/java/org/olat/ims/qti/resultexport/_content/qti12listing.html b/src/main/java/org/olat/ims/qti/resultexport/_content/qtiListing.html similarity index 100% rename from src/main/java/org/olat/ims/qti/resultexport/_content/qti12listing.html rename to src/main/java/org/olat/ims/qti/resultexport/_content/qtiListing.html diff --git a/src/main/java/org/olat/ims/qti/resultexport/_content/qti12userlisting.html b/src/main/java/org/olat/ims/qti/resultexport/_content/qtiUserlisting.html similarity index 100% rename from src/main/java/org/olat/ims/qti/resultexport/_content/qti12userlisting.html rename to src/main/java/org/olat/ims/qti/resultexport/_content/qtiUserlisting.html diff --git a/src/main/java/org/olat/ims/qti/resultexport/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti/resultexport/_i18n/LocalStrings_de.properties index 79b1b41f0a5b1cb33bd18d4b1491434115908fc4..eb7cee84b4e3cbc0b2c53f267be6794d889a4579 100644 --- a/src/main/java/org/olat/ims/qti/resultexport/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/ims/qti/resultexport/_i18n/LocalStrings_de.properties @@ -15,5 +15,6 @@ table.all.username=Benutzername table.all.firstname=Vorname table.all.lastname=Nachname table.all.tries=Versuche +table.user.attempt=Versuch_ table.all.passed=Bestanden error.no.assessed.users=Keine Bewertungen vorhanden \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti/resultexport/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti/resultexport/_i18n/LocalStrings_en.properties index 1c230640b19eca494d04cf3482dff3c6afa0f2aa..d5def8631670d49c563cb1cbf61c5393dbc29a97 100644 --- a/src/main/java/org/olat/ims/qti/resultexport/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/ims/qti/resultexport/_i18n/LocalStrings_en.properties @@ -14,6 +14,7 @@ table.all.id=ID table.all.username=Username table.all.firstname=Firstname table.all.lastname=Lastname -table.all.tries=Tries +table.all.tries=Attempts +table.user.attempt=Attempt_ table.all.passed=Passed error.no.assessed.users=No Assessments available \ No newline at end of file