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

Merge remote-tracking branch 'origin/OpenOLAT_14.2' into OpenOLAT_15.1

parents 47a0b885 dbf1b510
No related branches found
No related tags found
No related merge requests found
...@@ -156,9 +156,7 @@ public class OpenXMLDocumentWriter { ...@@ -156,9 +156,7 @@ public class OpenXMLDocumentWriter {
try(FileInputStream in = new FileInputStream(img.getFile())) { try(FileInputStream in = new FileInputStream(img.getFile())) {
ZipEntry wordDocument = new ZipEntry("word/media/" + img.getFilename()); ZipEntry wordDocument = new ZipEntry("word/media/" + img.getFilename());
out.putNextEntry(wordDocument); out.putNextEntry(wordDocument);
IOUtils.copy(in, out); IOUtils.copy(in, out);
OpenXMLUtils.writeTo(document.getDocument(), out, false);
out.closeEntry(); out.closeEntry();
} catch(Exception e) { } catch(Exception e) {
log.error("", e); log.error("", e);
......
...@@ -125,12 +125,11 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -125,12 +125,11 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
private FormLink resetButton; private FormLink resetButton;
private FlexiTableElement tableEl; private FlexiTableElement tableEl;
private final TooledStackedPanel stackPanel; private final TooledStackedPanel stackPanel;
private DefaultFlexiColumnModel correctionCol;
private QTI21AssessmentTestSessionTableModel tableModel; private QTI21AssessmentTestSessionTableModel tableModel;
private RepositoryEntry entry; private RepositoryEntry entry;
private RepositoryEntry testEntry;
private final String subIdent; private final String subIdent;
private final boolean manualCorrections;
private final Identity assessedIdentity; private final Identity assessedIdentity;
private int count = 0; private int count = 0;
...@@ -182,11 +181,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -182,11 +181,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
this.assessedUserCourseEnv = assessedUserCourseEnv; this.assessedUserCourseEnv = assessedUserCourseEnv;
subIdent = courseNode.getIdent(); subIdent = courseNode.getIdent();
readOnly = coachCourseEnv.isCourseReadOnly(); readOnly = coachCourseEnv.isCourseReadOnly();
testEntry = courseNode.getReferencedRepositoryEntry();
assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity(); assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity();
String correctionMode = courseNode.getModuleConfiguration().getStringValue(IQEditController.CONFIG_CORRECTION_MODE);
manualCorrections = !IQEditController.CORRECTION_GRADING.equals(correctionMode)
&& (IQEditController.CORRECTION_MANUAL.equals(correctionMode) || qtiService.needManualCorrection(testEntry));
RepositoryEntry courseEntry = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); RepositoryEntry courseEntry = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
reSecurity = repositoryManager.isAllowed(ureq, courseEntry); reSecurity = repositoryManager.isAllowed(ureq, courseEntry);
...@@ -207,14 +202,12 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -207,14 +202,12 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
RepositoryEntry assessableEntry, Identity assessedIdentity) { RepositoryEntry assessableEntry, Identity assessedIdentity) {
super(ureq, wControl, "assessment_details"); super(ureq, wControl, "assessment_details");
entry = assessableEntry; entry = assessableEntry;
testEntry = assessableEntry;
subIdent = null; subIdent = null;
readOnly = false; readOnly = false;
courseNode = null; courseNode = null;
assessedUserCourseEnv = null; assessedUserCourseEnv = null;
this.stackPanel = stackPanel; this.stackPanel = stackPanel;
this.assessedIdentity = assessedIdentity; this.assessedIdentity = assessedIdentity;
manualCorrections = qtiService.needManualCorrection(assessableEntry);
reSecurity = repositoryManager.isAllowed(ureq, assessableEntry); reSecurity = repositoryManager.isAllowed(ureq, assessableEntry);
initForm(ureq); initForm(ureq);
...@@ -241,9 +234,10 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -241,9 +234,10 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("results.report"), "open"), new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("results.report"), "open"),
new StaticFlexiCellRenderer(translate("pull"), "open")))); new StaticFlexiCellRenderer(translate("pull"), "open"))));
} }
if(manualCorrections) { if(!readOnly) {
columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TSCols.correction.i18nHeaderKey(), TSCols.correction.ordinal(), "correction", correctionCol = new DefaultFlexiColumnModel(TSCols.correction.i18nHeaderKey(), TSCols.correction.ordinal(), "correction",
new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("correction"), "correction"), null))); new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("correction"), "correction"), null));
columnsModel.addFlexiColumnModel(correctionCol);
} }
if(pdfModule.isEnabled()) { if(pdfModule.isEnabled()) {
DefaultFlexiColumnModel toolsCol = new DefaultFlexiColumnModel(TSCols.tools); DefaultFlexiColumnModel toolsCol = new DefaultFlexiColumnModel(TSCols.tools);
...@@ -270,16 +264,33 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -270,16 +264,33 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
} }
protected void updateModel() { protected void updateModel() {
boolean grading = false;
boolean manualCorrections = false;
if(courseNode != null) {
String correctionMode = courseNode.getModuleConfiguration().getStringValue(IQEditController.CONFIG_CORRECTION_MODE);
grading = IQEditController.CORRECTION_GRADING.equals(correctionMode);
manualCorrections = !grading && IQEditController.CORRECTION_MANUAL.equals(correctionMode);
}
List<AssessmentTestSessionStatistics> sessionsStatistics = qtiService.getAssessmentTestSessionsStatistics(entry, subIdent, assessedIdentity); List<AssessmentTestSessionStatistics> sessionsStatistics = qtiService.getAssessmentTestSessionsStatistics(entry, subIdent, assessedIdentity);
List<QTI21AssessmentTestSessionDetails> infos = new ArrayList<>(); List<QTI21AssessmentTestSessionDetails> infos = new ArrayList<>();
final Map<RepositoryEntry,Boolean> manualCorrectionsMap = new HashMap<>();
for(AssessmentTestSessionStatistics sessionStatistics:sessionsStatistics) { for(AssessmentTestSessionStatistics sessionStatistics:sessionsStatistics) {
RepositoryEntry testEntry = sessionStatistics.getTestSession().getTestEntry();
if(!grading) {
manualCorrections = manualCorrections || manualCorrectionsMap
.computeIfAbsent(testEntry, re -> qtiService.needManualCorrection(re))
.booleanValue();
}
infos.add(forgeDetailsRow(sessionStatistics)); infos.add(forgeDetailsRow(sessionStatistics));
} }
correctionCol.setAlwaysVisible(manualCorrections);
correctionCol.setDefaultVisible(manualCorrections);
tableEl.setColumnModelVisible(correctionCol, manualCorrections);
Collections.sort(infos, new AssessmentTestSessionDetailsComparator()); Collections.sort(infos, new AssessmentTestSessionDetailsComparator());
tableModel.setObjects(infos); tableModel.setObjects(infos);
tableEl.reloadData(); tableEl.reset(true, true, true);
tableEl.reset();
if(resetButton != null) { if(resetButton != null) {
resetButton.setVisible(!sessionsStatistics.isEmpty()); resetButton.setVisible(!sessionsStatistics.isEmpty());
...@@ -425,6 +436,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -425,6 +436,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
} }
private void doCorrection(UserRequest ureq, AssessmentTestSession session) { private void doCorrection(UserRequest ureq, AssessmentTestSession session) {
RepositoryEntry testEntry = session.getTestEntry();
File unzippedDirRoot = FileResourceManager.getInstance().unzipFileResource(testEntry.getOlatResource()); File unzippedDirRoot = FileResourceManager.getInstance().unzipFileResource(testEntry.getOlatResource());
ResolvedAssessmentTest resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(unzippedDirRoot, false, false); ResolvedAssessmentTest resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(unzippedDirRoot, false, false);
ManifestBuilder manifestBuilder = ManifestBuilder.read(new File(unzippedDirRoot, "imsmanifest.xml")); ManifestBuilder manifestBuilder = ManifestBuilder.read(new File(unzippedDirRoot, "imsmanifest.xml"));
...@@ -443,7 +455,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -443,7 +455,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
listenTo(correctionCtrl); listenTo(correctionCtrl);
stackPanel.pushController(translate("correction"), correctionCtrl); stackPanel.pushController(translate("correction"), correctionCtrl);
} catch(Exception e) { } catch(Exception e) {
logError("Cannot red results", e); logError("Cannot read results", e);
showError("error.assessment.test.session"); showError("error.assessment.test.session");
} }
} }
...@@ -527,8 +539,8 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -527,8 +539,8 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
} }
private DigitalSignatureOptions getSignatureOptions(AssessmentTestSession session) { private DigitalSignatureOptions getSignatureOptions(AssessmentTestSession session) {
RepositoryEntry sessionTestEntry = session.getTestEntry(); RepositoryEntry testEntry = session.getTestEntry();
QTI21DeliveryOptions deliveryOptions = qtiService.getDeliveryOptions(sessionTestEntry); QTI21DeliveryOptions deliveryOptions = qtiService.getDeliveryOptions(testEntry);
boolean digitalSignature = deliveryOptions.isDigitalSignature(); boolean digitalSignature = deliveryOptions.isDigitalSignature();
boolean sendMail = deliveryOptions.isDigitalSignatureMail(); boolean sendMail = deliveryOptions.isDigitalSignatureMail();
...@@ -546,7 +558,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController { ...@@ -546,7 +558,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
AssessmentEntryOutcomesListener.decorateResourceConfirmation(entry, testEntry, session, options, null, getLocale()); AssessmentEntryOutcomesListener.decorateResourceConfirmation(entry, testEntry, session, options, null, getLocale());
} else { } else {
CourseEnvironment courseEnv = CourseFactory.loadCourse(entry).getCourseEnvironment(); CourseEnvironment courseEnv = CourseFactory.loadCourse(entry).getCourseEnvironment();
QTI21AssessmentRunController.decorateCourseConfirmation(session, options, courseEnv, courseNode, sessionTestEntry, null, getLocale()); QTI21AssessmentRunController.decorateCourseConfirmation(session, options, courseEnv, courseNode, testEntry, null, getLocale());
} }
} }
return options; return options;
......
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