From 82bb62a1f04e5d880c0378c657a297950a1d285a Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Tue, 11 Jun 2019 08:59:59 +0200
Subject: [PATCH] OO-4082: add a security if the part doesn't have a section

---
 .../editor/AssessmentTestComposerController.java   | 14 +++++++++++++-
 .../ui/editor/_i18n/LocalStrings_de.properties     |  1 +
 .../ui/editor/_i18n/LocalStrings_en.properties     |  1 +
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java
index b37eb8a65ea..e4e195e521b 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java
@@ -794,6 +794,10 @@ public class AssessmentTestComposerController extends MainLayoutBasicController
 	private void doInsert(UserRequest ureq, List<QuestionItemView> items) {
 		TreeNode selectedNode = menuTree.getSelectedNode();
 		TreeNode sectionNode = getNearestSection(selectedNode);
+		if(sectionNode == null) {
+			showWarning("error.missing.section");
+			return;
+		}
 
 		boolean allOk = true;
 		String firstItemId = null;
@@ -843,6 +847,10 @@ public class AssessmentTestComposerController extends MainLayoutBasicController
 	private void doInsert(UserRequest ureq, AssessmentItemsPackage importPackage) {
 		TreeNode selectedNode = menuTree.getSelectedNode();
 		TreeNode sectionNode = getNearestSection(selectedNode);
+		if(sectionNode == null) {
+			showWarning("error.missing.section");
+			return;
+		}
 		
 		String firstItemId = null;
 		boolean errorOnImport = false;
@@ -988,7 +996,7 @@ public class AssessmentTestComposerController extends MainLayoutBasicController
 			TreeNode rootNode = menuTree.getTreeModel().getRootNode();
 			AssessmentTest assessmentTest = (AssessmentTest)rootNode.getUserObject();
 			List<TestPart> parts = assessmentTest.getTestParts();
-			if(parts != null && parts.size() > 0) {
+			if(parts != null && !parts.isEmpty()) {
 				parentPart = parts.get(0);
 			} else {
 				showWarning("error.cannot.create.section");
@@ -1032,6 +1040,10 @@ public class AssessmentTestComposerController extends MainLayoutBasicController
 	private void doNewAssessmentItem(UserRequest ureq, TreeNode selectedNode, AssessmentItemBuilder itemBuilder) {
 		try {
 			TreeNode sectionNode = getNearestSection(selectedNode);
+			if(sectionNode == null) {
+				showWarning("error.missing.section");
+				return;
+			}
 			AssessmentSection section = (AssessmentSection)sectionNode.getUserObject();
 			
 			AssessmentItemRef itemRef = new AssessmentItemRef(section);
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 6c4967be0b0..2de18b06514 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
@@ -49,6 +49,7 @@ error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
 error.min.score.bigger.max=Minimal erreichbare Punktzahl muss kleiner als then maximal erreichbare Punktzahl sein.
 error.missing.fib=Die Frage mussen mindestens einen L\u00FCckentext oder eine Numerische Eingabe enthalten.
 error.missing.hottext=Die Frage mussen mindestens einen Hottext enthalten.
+error.missing.section=Sie m\u00FCssen mindestens eine Sektion im Test oder Test Part haben.
 error.need.correct.answer=Sie m\u00FCssen mindestens eine Antwort als korrekt markieren.
 error.positive.double=Falsches Zahlenformat, nur positive Nummer sind erlaubt. Beispiele\: 15.0, 5.5, 10
 error.singlechoice=Genau ein ausw\u00E4hlen
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 402e824fbc0..39055cfd012 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
@@ -49,6 +49,7 @@ error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
 error.min.score.bigger.max=Min. score must be bigger than the max. score.
 error.missing.fib=The question need at least a gap text or a numerical input.
 error.missing.hottext=The question need at least a hottext.
+error.missing.section=You must have at least one section in your test or test part.
 error.need.correct.answer=You need a least one correct answer.
 error.positive.double=Only positive number are allowed. Example\: 15.0, 5.5, 10
 error.singlechoice=Choose exactly one
-- 
GitLab