From 5083a57603a5613e646c98d34578bf43d2019d1e Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Wed, 4 Nov 2020 13:39:13 +0100 Subject: [PATCH] OO-5048: harden course and correction workflow against corrupted item --- src/main/java/org/olat/ims/qti21/model/QTI21QuestionType.java | 2 ++ .../java/org/olat/ims/qti21/model/xml/QtiMaxScoreEstimator.java | 2 +- .../qti21/ui/assessment/model/CorrectionAssessmentItemRow.java | 2 +- .../olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties | 1 + .../olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties | 1 + .../olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties | 1 + 6 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/olat/ims/qti21/model/QTI21QuestionType.java b/src/main/java/org/olat/ims/qti21/model/QTI21QuestionType.java index e995572c31b..7c0af812b44 100644 --- a/src/main/java/org/olat/ims/qti21/model/QTI21QuestionType.java +++ b/src/main/java/org/olat/ims/qti21/model/QTI21QuestionType.java @@ -117,6 +117,8 @@ public enum QTI21QuestionType { } public static QTI21QuestionType getTypeRelax(AssessmentItem item) { + if(item == null) return QTI21QuestionType.unkown; + //we have create this one List<Interaction> interactions = item.getItemBody().findInteractions(); diff --git a/src/main/java/org/olat/ims/qti21/model/xml/QtiMaxScoreEstimator.java b/src/main/java/org/olat/ims/qti21/model/xml/QtiMaxScoreEstimator.java index dacd569c758..bdad6af3b32 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/QtiMaxScoreEstimator.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/QtiMaxScoreEstimator.java @@ -73,7 +73,7 @@ public class QtiMaxScoreEstimator { } else if(sectionPart instanceof AssessmentItemRef) { AssessmentItemRef itemRef = (AssessmentItemRef)sectionPart; ResolvedAssessmentItem resolvedAssessmentItem = resolvedAssessmentTest.getResolvedAssessmentItem(itemRef); - AssessmentItem assessmentItem = resolvedAssessmentItem.getRootNodeLookup().extractAssumingSuccessful(); + AssessmentItem assessmentItem = resolvedAssessmentItem.getRootNodeLookup().extractIfSuccessful(); if(assessmentItem != null) { Double maxScore = QtiNodesExtractor.extractMaxScore(assessmentItem); visitor.add(maxScore); diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/model/CorrectionAssessmentItemRow.java b/src/main/java/org/olat/ims/qti21/ui/assessment/model/CorrectionAssessmentItemRow.java index 7d34dcd0e81..daefe3a540a 100644 --- a/src/main/java/org/olat/ims/qti21/ui/assessment/model/CorrectionAssessmentItemRow.java +++ b/src/main/java/org/olat/ims/qti21/ui/assessment/model/CorrectionAssessmentItemRow.java @@ -62,7 +62,7 @@ public class CorrectionAssessmentItemRow extends CorrectionRow { } public String getItemTitle() { - return item.getTitle(); + return item == null ? "ERROR" : item.getTitle(); } public QTI21QuestionType getItemType() { diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties index 4d0a2b8518d..36ee5632d8a 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties @@ -253,6 +253,7 @@ new.sc=Single Choice new.section=Sektion new.spots=Spots hinzuf\u00FCgen new.testpart=Test-Part +new.unkown=Unbekannt new.upload=Datei hochladen passed.cut.value=Automatisch durch Punkteschwelle passed.enabled=Bestanden / Nicht bestanden ausgegeben diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties index 72b36b944c0..54aa4c4121c 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties @@ -253,6 +253,7 @@ new.sc=Single choice new.section=Section new.spots=Add spots new.testpart=Test part +new.unkown=Unknown new.upload=Upload file passed.cut.value=Using cut value passed.enabled=Display passed / failed diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties index 19c6c3ebe0a..6dd6b567674 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties @@ -254,6 +254,7 @@ new.sc=Choix simple new.section=Section new.spots=Ajouter un emplacement new.testpart=Partie de test +new.unkown=Inconnu new.upload=T\u00E9l\u00E9verser un fichier passed.cut.value=Automatique par score \u00E0 obtenir passed.enabled=Afficher r\u00E9ussi / pas r\u00E9ussi -- GitLab