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

OO-2747: add excel report to the results export of QTI 2.1 in assessment tool

parent 1653bde2
No related branches found
No related tags found
No related merge requests found
......@@ -104,7 +104,6 @@ import org.olat.ims.qti.statistics.ui.QTI12StatisticsToolController;
import org.olat.ims.qti21.QTI21DeliveryOptions;
import org.olat.ims.qti21.QTI21Service;
import org.olat.ims.qti21.manager.AssessmentTestSessionDAO;
import org.olat.ims.qti21.manager.archive.QTI21ArchiveFormat;
import org.olat.ims.qti21.model.QTI21StatisticSearchParams;
import org.olat.ims.qti21.resultexport.QTI21ExportResultsReportController;
import org.olat.ims.qti21.resultexport.QTI21ResultsExportMediaResource;
......@@ -668,14 +667,9 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements Pe
} else if(ImsQTI21Resource.TYPE_NAME.equals(re.getOlatResource().getResourceableTypeName())) {
// 2a) create export resource
QTI21Service qtiService = CoreSpringFactory.getImpl(QTI21Service.class);
List<Identity> identities = ScoreAccountingHelper.loadUsers(courseEnv, options);
new QTI21ResultsExportMediaResource(courseEnv, identities, this, qtiService, ureq, locale).exportTestResults(exportStream);
// excel results
RepositoryEntry courseEntry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
QTI21StatisticSearchParams searchParams = new QTI21StatisticSearchParams(options, re, courseEntry, getIdent());
QTI21ArchiveFormat qaf = new QTI21ArchiveFormat(locale, searchParams);
qaf.exportCourseElement(exportStream);
new QTI21ResultsExportMediaResource(courseEnv, identities, this, qtiService, ureq, locale)
.exportTestResults(exportStream);
return true;
} else {
// 2b) create export resource
......
......@@ -204,11 +204,15 @@ public class QTI21ArchiveFormat {
String label = StringHelper.transformDisplayNameToFileSystemName(courseNode.getShortName())
+ "_" + Formatter.formatDatetimeWithMinutes(new Date())
+ ".xlsx";
exportCourseElement(label, exportStream);
}
public void exportCourseElement(String label, ZipOutputStream exportStream) {
ICourse course = CourseFactory.loadCourse(searchParams.getCourseEntry());
CourseNode courseNode = course.getRunStructure().getNode(searchParams.getNodeIdent());
if("iqself".equals(courseNode.getType())) {
anonymizerCallback = course.getCourseEnvironment().getCoursePropertyManager();
}
export(label, exportStream);
}
......@@ -219,7 +223,7 @@ public class QTI21ArchiveFormat {
export(archiveName, exportStream);
}
private void export(String filename, ZipOutputStream exportStream) {
public void export(String filename, ZipOutputStream exportStream) {
try {
exportStream.putNextEntry(new ZipEntry(filename));
exportWorkbook(new ShieldOutputStream(exportStream));
......
......@@ -60,10 +60,12 @@ import org.olat.core.id.UserConstants;
import org.olat.core.logging.OLog;
import org.olat.core.logging.Tracing;
import org.olat.core.util.FileUtils;
import org.olat.core.util.Formatter;
import org.olat.core.util.StringHelper;
import org.olat.core.util.Util;
import org.olat.core.util.WebappHelper;
import org.olat.core.util.ZipUtil;
import org.olat.course.nodes.ArchiveOptions;
import org.olat.course.nodes.QTICourseNode;
import org.olat.course.run.environment.CourseEnvironment;
import org.olat.fileresource.FileResourceManager;
......@@ -72,6 +74,8 @@ import org.olat.ims.qti.resultexport.ResultDetail;
import org.olat.ims.qti21.AssessmentTestSession;
import org.olat.ims.qti21.QTI21AssessmentResultsOptions;
import org.olat.ims.qti21.QTI21Service;
import org.olat.ims.qti21.manager.archive.QTI21ArchiveFormat;
import org.olat.ims.qti21.model.QTI21StatisticSearchParams;
import org.olat.ims.qti21.ui.AssessmentResultController;
import org.olat.repository.RepositoryEntry;
......@@ -180,7 +184,6 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
* @throws IOException
*/
public void exportTestResults(ZipOutputStream zout) throws IOException {
List<AssessedMember> assessedMembers = createAssessedMembersDetail(zout);
//convert velocity template to zip entry
......@@ -199,6 +202,21 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
for(RepositoryEntry testEntry:testEntries) {
copyTestMaterials(testEntry, zout);
}
for(RepositoryEntry testEntry:testEntries) {
addExcelReport(testEntry, zout);
}
}
private void addExcelReport(RepositoryEntry testEntry, ZipOutputStream zout) {
ArchiveOptions options = new ArchiveOptions();
options.setIdentities(identities);
QTI21StatisticSearchParams searchParams = new QTI21StatisticSearchParams(options, testEntry, entry, courseNode.getIdent());
QTI21ArchiveFormat qaf = new QTI21ArchiveFormat(translator.getLocale(), searchParams);
String label = StringHelper.transformDisplayNameToFileSystemName(courseNode.getShortName() + "_" + testEntry.getDisplayname())
+ "_" + Formatter.formatDatetimeWithMinutes(new Date())
+ ".xlsx";
qaf.exportCourseElement(exportFolderName + "/" + label, zout);
}
private List<ResultDetail> createResultDetail (Identity identity, ZipOutputStream zout, String idDir) throws IOException {
......
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