From 85418c1e14b5fd461e6a71d8de1dc6e677afdb4b Mon Sep 17 00:00:00 2001
From: agrt56 <andreas.gaertner@mni.thm.de>
Date: Sun, 29 Mar 2015 13:35:20 +0200
Subject: [PATCH] PiRound activation will be updated on question document
 update

It can occur that the timed event of piRound deactivation will not be
called (server crash/restart). With this fix the activation will be
canceled on question document when the endtime has been exceeded. Task
#14410
---
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 26 ++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 7877dc37..88c4aceb 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -511,6 +512,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	}
 
 	private Document toQuestionDocument(final Session session, final Question question) {
+		final long time = new Date().getTime();
 		final Document q = new Document();
 		q.put("type", "skill_question");
 		q.put("questionType", question.getQuestionType());
@@ -552,6 +554,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		q.put("imageQuestion", question.isImageQuestion());
 		q.put("textAnswerEnabled", question.isTextAnswerEnabled());
 
+		if(time > question.getPiRoundEndTime()) {
+			q.put("piRoundEndTime", 0);
+			q.put("piRoundStartTime", 0);
+			q.put("piRoundActive", false);
+		} else {
+			q.put("piRoundActive", question.isPiRoundActive());
+			q.put("piRoundEndTime", question.getPiRoundEndTime());
+			q.put("piRoundStartTime", question.getPiRoundStartTime());
+		}
+
 		return q;
 	}
 
@@ -563,6 +575,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public Question updateQuestion(final Question question) {
 		try {
+			final long time = new Date().getTime();
 			final Document q = database.getDocument(question.get_id());
 			q.put("subject", question.getSubject());
 			q.put("text", question.getText());
@@ -571,9 +584,6 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			q.put("possibleAnswers", question.getPossibleAnswers());
 			q.put("noCorrect", question.isNoCorrect());
 			q.put("piRound", question.getPiRound());
-			q.put("piRoundActive", question.isPiRoundActive());
-			q.put("piRoundEndTime", question.getPiRoundEndTime());
-			q.put("piRoundStartTime", question.getPiRoundStartTime());
 			q.put("showStatistic", question.isShowStatistic());
 			q.put("showAnswer", question.isShowAnswer());
 			q.put("abstention", question.isAbstention());
@@ -601,6 +611,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			q.put("gridScaleFactor", question.getGridScaleFactor());
 			q.put("imageQuestion", question.isImageQuestion());
 
+			if(time > question.getPiRoundEndTime()) {
+				q.put("piRoundEndTime", 0);
+				q.put("piRoundStartTime", 0);
+				q.put("piRoundActive", false);
+			} else {
+				q.put("piRoundActive", question.isPiRoundActive());
+				q.put("piRoundEndTime", question.getPiRoundEndTime());
+				q.put("piRoundStartTime", question.getPiRoundStartTime());
+			}
+
 			database.saveDocument(q);
 			question.set_rev(q.getRev());
 
-- 
GitLab