From 92b52db0399ecf0a1d80644baade74de033628a0 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 25 Sep 2017 21:25:53 +0200
Subject: [PATCH] OO-3039: check that the command match the key of the current
 test plan's node

---
 .../ims/qti21/ui/AssessmentTestDisplayController.java    | 9 +++++++++
 .../ims/qti21/ui/components/AssessmentTestComponent.java | 5 +++++
 .../ims/qti21/ui/components/AssessmentTestFormItem.java  | 5 +++++
 3 files changed, 19 insertions(+)

diff --git a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
index 4c57f68c40a..e84ac06760d 100644
--- a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
@@ -880,6 +880,11 @@ public class AssessmentTestDisplayController extends BasicController implements
 			return;//
 		}
 		
+		String cmd = ureq.getParameter("tmpResponse");
+		if(!qtiWorksCtrl.validateResponseIdentifierCommand(cmd, currentItemKey)) {
+			return;//this is not the right node in the plan
+		}
+		
 		final Date timestamp = ureq.getRequestTimestamp();
 		
 		final Map<Identifier, ResponseData> responseDataMap = new HashMap<>();
@@ -1824,6 +1829,10 @@ public class AssessmentTestDisplayController extends BasicController implements
 			Interaction interaction = qtiEl.getInteractionOfResponseUniqueIdentifier(uniqueId);
 			return interaction == null ? null : interaction.getResponseIdentifier();
 		}
+		
+		protected boolean validateResponseIdentifierCommand(String cmd, TestPlanNodeKey nodeKey) {
+			return qtiEl.validateCommand(cmd, nodeKey);
+		}
 
 		@Override
 		protected void formOK(UserRequest ureq) {
diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponent.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponent.java
index 115abc04fdd..04e1a656305 100644
--- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponent.java
+++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponent.java
@@ -128,6 +128,11 @@ public class AssessmentTestComponent extends AssessmentObjectComponent  {
 		responseIdentifiersMap.put(id, interaction);
 		return id;
 	}
+	
+	public boolean validateCommand(String cmd, TestPlanNodeKey tpnk) {
+		String id = "oo" + (tpnk.toString().replace(":", "_")) + "_";
+		return cmd.contains(id);
+	}
 
 	@Override
 	public Interaction getInteractionOfResponseUniqueIdentifier(String responseUniqueId) {
diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestFormItem.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestFormItem.java
index 73619c0acbc..45f9b4ff599 100644
--- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestFormItem.java
+++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestFormItem.java
@@ -41,6 +41,7 @@ import org.olat.ims.qti21.ui.QTIWorksAssessmentTestEvent;
 import uk.ac.ed.ph.jqtiplus.node.item.interaction.Interaction;
 import uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentTest;
 import uk.ac.ed.ph.jqtiplus.running.TestSessionController;
+import uk.ac.ed.ph.jqtiplus.state.TestPlanNodeKey;
 
 /**
  * 
@@ -113,6 +114,10 @@ public class AssessmentTestFormItem extends AssessmentObjectFormItem {
 	public Interaction getInteractionOfResponseUniqueIdentifier(String uniqueId) {
 		return component.getInteractionOfResponseUniqueIdentifier(uniqueId);
 	}
+	
+	public boolean validateCommand(String cmd, TestPlanNodeKey nodeKey) {
+		return component.validateCommand(cmd, nodeKey);
+	}
 
 	@Override
 	protected Component getFormItemComponent() {
-- 
GitLab