From e02f308da68e09444e04f2f9533a02fd4a0e06ac Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Sun, 8 Feb 2015 17:11:20 +0100
Subject: [PATCH] OO-1349: deactivate the popup, fix an issue with students
 stressed by several exams

---
 .../fullWebApp/BaseFullWebappController.java  | 19 ++++++++++++++++---
 .../ui/AssessmentModeGuardController.java     |  4 ++++
 .../assessment/ui/_content/choose_mode.html   |  7 ++++++-
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
index 0ab4cac1d66..82920aa2e1d 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
@@ -666,8 +666,11 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 				lockStatus = LockStatus.locked;
 				removeAsListenerAndDispose(assessmentGuardCtrl);
 				assessmentGuardCtrl = null;
-			} else {
+			} else if("continue".equals(event.getCommand())) {
 				initializeDefaultSite(ureq);
+				removeAsListenerAndDispose(assessmentGuardCtrl);
+				assessmentGuardCtrl = null;
+				lockStatus = null;
 			}
 		} else {
 			int tabIndex = dtabsControllers.indexOf(source);
@@ -1359,8 +1362,13 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 		if(lockResource != null && lockResource.getResourceableId().equals(mode.getResource().getResourceableId())) {
 			logAudit("Async unlock resource for user: " + getIdentity().getName() + " (" + mode.getResource() + ")", null);
 			unlockResource();
+			if(lockMode != null) {
+				//check if there is a locked resource first
+				lockStatus = LockStatus.need;
+			} else {
+				lockStatus = null;
+			}
 			lockMode = null;
-			lockStatus = null;
 			unlock = true;
 		} else {
 			unlock = false;
@@ -1385,10 +1393,15 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 	private boolean checkAssessmentGuard(UserRequest ureq, TransientAssessmentMode mode) {
 		boolean needUpdate;
 		
+		if(this.getIdentity() != null) {
+			System.out.println(getIdentity().getName() + " Lock status " + lockStatus);
+		}
 		if(assessmentGuardCtrl == null) {
 			if(lockStatus == LockStatus.need) {
+				List<TransientAssessmentMode> modes = mode == null ?
+						Collections.<TransientAssessmentMode>emptyList() : Collections.singletonList(mode);
 				assessmentGuardCtrl = new AssessmentModeGuardController(ureq, getWindowControl(),
-						Collections.singletonList(mode), true);
+						modes , true);
 				listenTo(assessmentGuardCtrl);
 				assessmentGuardCtrl.getInitialComponent();
 				lockStatus = LockStatus.popup;
diff --git a/src/main/java/org/olat/course/assessment/ui/AssessmentModeGuardController.java b/src/main/java/org/olat/course/assessment/ui/AssessmentModeGuardController.java
index 0e721a45609..ad44e24f1e1 100644
--- a/src/main/java/org/olat/course/assessment/ui/AssessmentModeGuardController.java
+++ b/src/main/java/org/olat/course/assessment/ui/AssessmentModeGuardController.java
@@ -354,6 +354,8 @@ public class AssessmentModeGuardController extends BasicController implements Ge
 		
 		boolean canContinue = guards.getSize() == 0;
 		if(canContinue) {
+			cmc.deactivate();
+			
 			fireEvent(ureq, new Event("continue"));
 			String businessPath = "[MyCoursesSite:0]";
 			NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
@@ -370,6 +372,8 @@ public class AssessmentModeGuardController extends BasicController implements Ge
 	 * @param mode
 	 */
 	private void launchAssessmentMode(UserRequest ureq, TransientAssessmentMode mode) {
+		cmc.deactivate();
+		
 		ureq.getUserSession().setAssessmentModes(null);
 		OLATResourceable resource = mode.getResource();
 		ureq.getUserSession().setLockResource(resource, mode);
diff --git a/src/main/java/org/olat/course/assessment/ui/_content/choose_mode.html b/src/main/java/org/olat/course/assessment/ui/_content/choose_mode.html
index 91bfb6984b2..4ca36921b9b 100644
--- a/src/main/java/org/olat/course/assessment/ui/_content/choose_mode.html
+++ b/src/main/java/org/olat/course/assessment/ui/_content/choose_mode.html
@@ -1,4 +1,9 @@
-<div class="o_info">$r.translate("current.mode.desc")</div>
+#if($guards.list.empty)
+	<div class="o_info">$r.translate("current.mode.end.info")</div>
+#else
+	<div class="o_info">$r.translate("current.mode.desc")</div>
+#end
+
 #foreach($mode in $guards.list)
 	<h2>$mode.name <small>$r.translate("current.mode.course", $mode.displayName)</small></h2>
 	<p><em>$r.translate("current.mode.datetimes", $mode.begin, $mode.end)</em>
-- 
GitLab