From d49e9c2d998702cfde6f5eea385b749e9430238c Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 23 Nov 2016 10:53:05 +0100
Subject: [PATCH] OO-2384: check the deadline before and after download of a
 document

---
 .../nodes/gta/ui/GTACoachController.java      |  2 +-
 ...CoachRevisionAndCorrectionsController.java |  2 +-
 .../gta/ui/GTAParticipantController.java      |  4 +++-
 ...ipantRevisionAndCorrectionsController.java |  2 +-
 .../gta/ui/SubmitDocumentsController.java     | 24 +++++++++++++++----
 5 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachController.java
index 6579ff826a7..424b147f78b 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachController.java
@@ -286,7 +286,7 @@ public class GTACoachController extends GTAAbstractController implements Assessm
 		}
 		
 		submitCorrectionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1,
-				gtaNode, courseEnv, "coach.document");
+				gtaNode, courseEnv, null, "coach.document");
 		listenTo(submitCorrectionsCtrl);
 		mainVC.put("corrections", submitCorrectionsCtrl.getInitialComponent());
 		
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
index 16e3e975a18..05a638c2a6d 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
@@ -236,7 +236,7 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController {
 		}
 		
 		uploadCorrectionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1,
-				gtaNode, courseEnv, "coach.document");
+				gtaNode, courseEnv, null, "coach.document");
 		listenTo(uploadCorrectionsCtrl);
 		mainVC.put("uploadCorrections", uploadCorrectionsCtrl.getInitialComponent());
 
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
index 4b5758fdd0c..5e3d1c11ba9 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
@@ -243,9 +243,11 @@ public class GTAParticipantController extends GTAAbstractController {
 			documentsContainer = gtaManager.getSubmitContainer(courseEnv, gtaNode, getIdentity());
 		}
 		
+		DueDate dueDate = getSubmissionDueDate(task);
+		Date deadline = dueDate == null ? null : dueDate.getDueDate();
 		int maxDocs = config.getIntegerSafe(GTACourseNode.GTASK_MAX_SUBMITTED_DOCS, -1);
 		submitDocCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, maxDocs,
-				gtaNode, courseEnv, "document");
+				gtaNode, courseEnv, deadline, "document");
 		listenTo(submitDocCtrl);
 		mainVC.put("submitDocs", submitDocCtrl.getInitialComponent());
 		
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantRevisionAndCorrectionsController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantRevisionAndCorrectionsController.java
index ca7df5075e4..c7365a4205e 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantRevisionAndCorrectionsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantRevisionAndCorrectionsController.java
@@ -168,7 +168,7 @@ public class GTAParticipantRevisionAndCorrectionsController extends BasicControl
 			documentsContainer = gtaManager.getRevisedDocumentsContainer(courseEnv, gtaNode, iteration, getIdentity());
 		}
 		uploadRevisionsCtrl = new SubmitDocumentsController(ureq, getWindowControl(), task, documentsDir, documentsContainer, -1,
-				gtaNode, courseEnv, "document");
+				gtaNode, courseEnv, null, "document");
 		listenTo(uploadRevisionsCtrl);
 		mainVC.put("uploadRevisions", uploadRevisionsCtrl.getInitialComponent());
 		
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
index c0914a1cc38..8b8181b5294 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
@@ -26,6 +26,7 @@ import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 import org.olat.core.commons.editor.htmleditor.HTMLEditorController;
@@ -98,6 +99,7 @@ class SubmitDocumentsController extends FormBasicController {
 	private final SubscriptionContext subscriptionContext;
 	
 	private boolean open = true;
+	private final Date deadline;
 	
 	@Autowired
 	private UserManager userManager;
@@ -108,13 +110,14 @@ class SubmitDocumentsController extends FormBasicController {
 	
 	public SubmitDocumentsController(UserRequest ureq, WindowControl wControl, Task assignedTask,
 			File documentsDir, VFSContainer documentsContainer, int maxDocs, GTACourseNode cNode,
-			CourseEnvironment courseEnv, String docI18nKey) {
+			CourseEnvironment courseEnv, Date deadline, String docI18nKey) {
 		super(ureq, wControl, "documents");
 		this.assignedTask = assignedTask;
 		this.documentsDir = documentsDir;
 		this.documentsContainer = documentsContainer;
 		this.maxDocs = maxDocs;
 		this.docI18nKey = docI18nKey;
+		this.deadline = deadline;
 		this.config = cNode.getModuleConfiguration();
 		subscriptionContext = gtaManager.getSubscriptionContext(courseEnv, cNode);
 		initForm(ureq);
@@ -230,6 +233,7 @@ class SubmitDocumentsController extends FormBasicController {
 				notificationsManager.markPublisherNews(subscriptionContext, null, false);
 			}
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(uploadCtrl == source) {
 			if(event == Event.DONE_EVENT) {
 				String filename = uploadCtrl.getUploadedFilename();
@@ -239,6 +243,7 @@ class SubmitDocumentsController extends FormBasicController {
 			}
 			cmc.deactivate();
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(replaceCtrl == source) {
 			if(event == Event.DONE_EVENT) {
 				String filename = replaceCtrl.getUploadedFilename();
@@ -248,6 +253,7 @@ class SubmitDocumentsController extends FormBasicController {
 			}
 			cmc.deactivate();
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(newDocCtrl == source) {
 			String filename = newDocCtrl.getFilename();
 			cmc.deactivate();
@@ -257,6 +263,7 @@ class SubmitDocumentsController extends FormBasicController {
 				doCreateDocumentEditor(ureq, filename);
 				updateModel();
 			} 
+			checkDeadline(ureq);
 		} else if(newDocumentEditorCtrl == source) {
 			if(event == Event.DONE_EVENT) {
 				updateModel();
@@ -265,6 +272,7 @@ class SubmitDocumentsController extends FormBasicController {
 			}
 			cmc.deactivate();
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(editDocumentEditorCtrl == source) {
 			if(event == Event.DONE_EVENT) {
 				updateModel();
@@ -273,6 +281,7 @@ class SubmitDocumentsController extends FormBasicController {
 			}
 			cmc.deactivate();
 			cleanUp();
+			checkDeadline(ureq);
 		} else if(cmc == source) {
 			cleanUp();
 		}
@@ -302,15 +311,15 @@ class SubmitDocumentsController extends FormBasicController {
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(uploadDocButton == source) {
-			if(checkOpen(ureq)) {
+			if(checkOpen(ureq) && checkDeadline(ureq)) {
 				doOpenDocumentUpload(ureq);
 			}
 		} else if(createDocButton == source) {
-			if(checkOpen(ureq)) {
+			if(checkOpen(ureq) && checkDeadline(ureq)) {
 				doChooseFilename(ureq);
 			}
 		} else if(tableEl == source) {
-			if(checkOpen(ureq) && event instanceof SelectionEvent) {
+			if(checkOpen(ureq) && checkDeadline(ureq) && event instanceof SelectionEvent) {
 				SelectionEvent se = (SelectionEvent)event;
 				SubmittedSolution row = model.getObject(se.getIndex());
 				if("delete".equals(se.getCommand())) {
@@ -328,6 +337,13 @@ class SubmitDocumentsController extends FormBasicController {
 		super.formInnerEvent(ureq, source, event);
 	}
 	
+	private boolean checkDeadline(UserRequest ureq) {
+		if(deadline == null || deadline.after(new Date())) return true;
+		showWarning("warning.tasks.submitted");
+		fireEvent(ureq, Event.DONE_EVENT);
+		return false;
+	}
+	
 	private boolean checkOpen(UserRequest ureq) {
 		if(open) return true;
 		showWarning("warning.tasks.submitted");
-- 
GitLab