From 782159e9e9094f14747e6e3d3a9ec26bf5ba3d64 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 1 Dec 2017 09:32:59 +0100
Subject: [PATCH] OO-3176	: hardened the automatic next with some
 additional debug code

---
 .../ui/AssessmentTestDisplayController.java   | 45 +++++++++++--------
 1 file changed, 27 insertions(+), 18 deletions(-)

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 e4b1f7be252..c7d4992bef6 100644
--- a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
@@ -648,7 +648,9 @@ public class AssessmentTestDisplayController extends BasicController implements
 				break;
 			case response:
 				handleResponse(ureq, qe.getStringResponseMap(), qe.getFileResponseMap(), qe.getComment());
-				nextItemIfAllowed(ureq);
+				if(!nextItemIfAllowed(ureq)) {
+					logWarn("Cannot automatically go to the next question", null);
+				}
 				break;
 			case endTestPart:
 				confirmEndTestPart(ureq);
@@ -775,23 +777,30 @@ public class AssessmentTestDisplayController extends BasicController implements
 	 * 
 	 * @param ureq
 	 */
-	private void nextItemIfAllowed(UserRequest ureq) {
-        if(testSessionController.hasFollowingNonLinearItem()
-        		&& testSessionController.getTestSessionState() != null
-        		&& !testSessionController.getTestSessionState().isEnded()
-        		&& !testSessionController.getTestSessionState().isExited()) {
-            
-        	TestSessionState testSessionState = testSessionController.getTestSessionState();
-            TestPlanNodeKey itemNodeKey = testSessionState.getCurrentItemKey();
-            if(itemNodeKey != null) {
-				TestPlanNode currentItemNode = testSessionState.getTestPlan().getNode(itemNodeKey);
-	        	boolean hasFeedbacks = qtiWorksCtrl.willShowSomeAssessmentItemFeedbacks(currentItemNode);
-	        	//allow skipping
-	        	if(!hasFeedbacks) {
-	        		processNextItem(ureq);
-	        	}
-            }
-        }
+	private boolean nextItemIfAllowed(UserRequest ureq) {
+		if (testSessionController.hasFollowingNonLinearItem()
+				&& testSessionController.getTestSessionState() != null
+				&& !testSessionController.getTestSessionState().isEnded()
+				&& !testSessionController.getTestSessionState().isExited()) {
+
+			try {
+				TestSessionState testSessionState = testSessionController.getTestSessionState();
+				TestPlanNodeKey itemNodeKey = testSessionState.getCurrentItemKey();
+				if (itemNodeKey != null) {
+					TestPlanNode currentItemNode = testSessionState.getTestPlan().getNode(itemNodeKey);
+					boolean hasFeedbacks = qtiWorksCtrl.willShowSomeAssessmentItemFeedbacks(currentItemNode);
+					// allow skipping
+					if (!hasFeedbacks) {
+						processNextItem(ureq);
+						return true;
+					}
+				}
+			} catch (QtiCandidateStateException e) {
+				logError("", e);//log informations
+				ServletUtil.printOutRequestParameters(ureq.getHttpReq());
+			}
+		}
+		return false;
 	}
 	
 	private void processNextItem(UserRequest ureq) {
-- 
GitLab