From a6649c08fb96044f74bc4cda4633e8281a9090f9 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 12 Feb 2015 15:10:43 +0100
Subject: [PATCH] OO-1349: don't reset the state of an assessment in manual
 mode...

---
 ...AssessmentModeCoordinationServiceImpl.java | 18 ++++++----
 .../ui/AssessmentModeEditController.java      | 34 +++++++++++--------
 .../ui/_i18n/LocalStrings_en.properties       |  2 +-
 3 files changed, 32 insertions(+), 22 deletions(-)

diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentModeCoordinationServiceImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentModeCoordinationServiceImpl.java
index 43210bb610f..14e20cdf7c9 100644
--- a/src/main/java/org/olat/course/assessment/manager/AssessmentModeCoordinationServiceImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/AssessmentModeCoordinationServiceImpl.java
@@ -204,15 +204,21 @@ public class AssessmentModeCoordinationServiceImpl implements AssessmentModeCoor
 	private AssessmentMode sendEvent(AssessmentMode mode, Date now, boolean forceStatus) {
 		if(mode.getBeginWithLeadTime().compareTo(now) > 0) {
 			//none
-			mode = ensureStatusOfMode(mode, Status.none);
-			sendEvent(AssessmentModeNotificationEvent.BEFORE, mode,
-					assessmentModeManager.getAssessedIdentityKeys(mode));
+			Status status = mode.getStatus();
+			if(status != Status.leadtime && status != Status.assessment && status != Status.followup && status != Status.end) {
+				mode = ensureStatusOfMode(mode, Status.none);
+				sendEvent(AssessmentModeNotificationEvent.BEFORE, mode,
+						assessmentModeManager.getAssessedIdentityKeys(mode));
+			}
 		} else if(mode.getBeginWithLeadTime().compareTo(now) <= 0 && mode.getBegin().compareTo(now) > 0
 				&& mode.getBeginWithLeadTime().compareTo(mode.getBegin()) != 0) {
 			//leading time
-			mode = ensureStatusOfMode(mode, Status.leadtime);
-			sendEvent(AssessmentModeNotificationEvent.LEADTIME, mode,
-				assessmentModeManager.getAssessedIdentityKeys(mode));
+			Status status = mode.getStatus();
+			if(status != Status.assessment && status != Status.followup && status != Status.end) {
+				mode = ensureStatusOfMode(mode, Status.leadtime);
+				sendEvent(AssessmentModeNotificationEvent.LEADTIME, mode,
+						assessmentModeManager.getAssessedIdentityKeys(mode));
+			}
 		} else if(mode.isManualBeginEnd() && !forceStatus) {
 			//what to do in manual mode
 			if(mode.getStatus() == Status.followup) {
diff --git a/src/main/java/org/olat/course/assessment/ui/AssessmentModeEditController.java b/src/main/java/org/olat/course/assessment/ui/AssessmentModeEditController.java
index d0b161837c9..f5fc2bc77e1 100644
--- a/src/main/java/org/olat/course/assessment/ui/AssessmentModeEditController.java
+++ b/src/main/java/org/olat/course/assessment/ui/AssessmentModeEditController.java
@@ -468,23 +468,27 @@ public class AssessmentModeEditController extends FormBasicController {
 		int leadTime = leadTimeEl.getIntValue();
 
 		Status currentStatus = assessmentMode.getStatus();
-		Status nextStatus = modeCoordinationService.evaluateStatus(begin, leadTime, end, followupTime);
-		
-		if(currentStatus == nextStatus) {
-			save(ureq, true);
+		if(startModeEl.isOneSelected() && startModeEl.isSelected(1)) {
+			//manual start don't change the status of the assessment
+			save(ureq, false);
 		} else {
-			String title = translate("confirm.status.change.title");
-
-			String text;
-			switch(nextStatus) {
-				case none: text = translate("confirm.status.change.none"); break;
-				case leadtime: text = translate("confirm.status.change.leadtime"); break;
-				case assessment: text = translate("confirm.status.change.assessment"); break;
-				case followup: text = translate("confirm.status.change.followup"); break;
-				case end: text = translate("confirm.status.change.end"); break;
-				default: text = "ERROR";
+			Status nextStatus = modeCoordinationService.evaluateStatus(begin, leadTime, end, followupTime);
+			if(currentStatus == nextStatus) {
+				save(ureq, true);
+			} else {
+				String title = translate("confirm.status.change.title");
+	
+				String text;
+				switch(nextStatus) {
+					case none: text = translate("confirm.status.change.none"); break;
+					case leadtime: text = translate("confirm.status.change.leadtime"); break;
+					case assessment: text = translate("confirm.status.change.assessment"); break;
+					case followup: text = translate("confirm.status.change.followup"); break;
+					case end: text = translate("confirm.status.change.end"); break;
+					default: text = "ERROR";
+				}
+				confirmCtrl = activateOkCancelDialog(ureq, title, text, confirmCtrl);
 			}
-			confirmCtrl = activateOkCancelDialog(ureq, title, text, confirmCtrl);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/course/assessment/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/assessment/ui/_i18n/LocalStrings_en.properties
index 4d2bc9f6167..b7fbaab1213 100644
--- a/src/main/java/org/olat/course/assessment/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/assessment/ui/_i18n/LocalStrings_en.properties
@@ -16,7 +16,7 @@ confirm.status.change.end=The exam will be ended.
 confirm.status.change.followup=The exam is in follow-up time.
 confirm.status.change.leadtime=The exam is in preparation time.
 confirm.status.change.title=The state of the exam setting will be changed.
-confirm.stop.text=Do you want to end now the exam?
+confirm.stop.text=Do you want to end the exam now?
 confirm.stop.title=End the exam
 current.mode=Scheduled exam
 current.mode.continue=Back to OpenOLAT
-- 
GitLab