From fc304a84dba54e732486aef0c30b42aa06ed278d Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Fri, 3 Apr 2020 17:34:30 +0200
Subject: [PATCH] OO-4621: count permanent meeting as infinite meeting for
 quota

---
 .../manager/BigBlueButtonMeetingDAO.java      |  2 ++
 .../EditBigBlueButtonMeetingController.java   | 30 +++++++++++++++++--
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAO.java b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAO.java
index 6ec4098e313..8fff3484294 100644
--- a/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAO.java
+++ b/src/main/java/org/olat/modules/bigbluebutton/manager/BigBlueButtonMeetingDAO.java
@@ -174,6 +174,8 @@ public class BigBlueButtonMeetingDAO {
 		  .append("  (meeting.startDate>=:startDate and meeting.endDate<=:endDate)")
 		  .append("  or")
 		  .append("  (meeting.startDate<=:startDate and meeting.endDate>=:endDate)")
+		  .append("  or")
+		  .append("  meeting.permanent=true")
 		  .append(")");
 		return dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Long.class)
diff --git a/src/main/java/org/olat/modules/bigbluebutton/ui/EditBigBlueButtonMeetingController.java b/src/main/java/org/olat/modules/bigbluebutton/ui/EditBigBlueButtonMeetingController.java
index 2f754ad6862..03f1caab3f0 100644
--- a/src/main/java/org/olat/modules/bigbluebutton/ui/EditBigBlueButtonMeetingController.java
+++ b/src/main/java/org/olat/modules/bigbluebutton/ui/EditBigBlueButtonMeetingController.java
@@ -199,6 +199,7 @@ public class EditBigBlueButtonMeetingController extends FormBasicController {
 	
 	private void updateUI() {
 		boolean permanent = permanentEl.isAtLeastSelected(1);
+		permanentEl.clearError();
 		startDateEl.setVisible(!permanent);
 		leadTimeEl.setVisible(!permanent);
 		endDateEl.setVisible(!permanent);
@@ -288,9 +289,14 @@ public class EditBigBlueButtonMeetingController extends FormBasicController {
 		}
 		
 		// dates ok
-		if(allOk && (!permanentEl.isVisible() || !permanentEl.isAtLeastSelected(1))) {
-			allOk &= validateDuration();
-			allOk &= validateSlot();
+		permanentEl.clearError();
+		if(allOk) {
+			if(permanentEl.isVisible() && permanentEl.isAtLeastSelected(1)) {
+				allOk &= validatePermanentSlot();
+			} else {
+				allOk &= validateDuration();
+				allOk &= validateSlot();
+			}
 		}
 		
 		nameEl.clearError();
@@ -353,6 +359,24 @@ public class EditBigBlueButtonMeetingController extends FormBasicController {
 		return allOk;
 	}
 	
+	private boolean validatePermanentSlot() {
+		boolean allOk = true;
+		
+		Calendar cal = Calendar.getInstance();
+		cal.add(Calendar.YEAR, 12);
+		Date endDate = cal.getTime();
+		
+		BigBlueButtonMeetingTemplate template = getSelectedTemplate();
+		boolean slotFree = bigBlueButtonManager.isSlotAvailable(meeting, template,
+				new Date(), 0, endDate, 0);
+		if(!slotFree) {
+			permanentEl.setErrorKey("server.overloaded", null);
+			allOk &= false;
+		}
+		
+		return allOk;
+	}
+	
 	private BigBlueButtonMeetingTemplate getSelectedTemplate() {
 		String selectedTemplateId = templateEl.getSelectedKey();
 		return templates.stream()
-- 
GitLab