From 1ed517d3a5f8d912e41d90088b5bfab4990d73e2 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 18 May 2018 10:45:39 +0200
Subject: [PATCH] OO-3483: ensure that the email form in member list course
 element (or group) as at least one recipient

---
 .../memberlist/ui/MembersMailController.java  | 54 ++++++++++++++++++-
 .../mail/_i18n/LocalStrings_de.properties     |  2 +-
 .../mail/_i18n/LocalStrings_en.properties     |  1 +
 3 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
index 31ff0ef6dde..b61bf7547f4 100644
--- a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
+++ b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
@@ -231,7 +231,7 @@ public class MembersMailController extends FormBasicController {
 	
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
-		boolean allOk = true;
+		boolean allOk = super.validateFormLogic(ureq);
 		
 		subjectEl.clearError();
 		if(!StringHelper.containsNonWhitespace(subjectEl.getValue())) {
@@ -245,6 +245,16 @@ public class MembersMailController extends FormBasicController {
 			allOk &= false;
 		}
 		
+		allOk &= validateRecipients();
+		
+		return allOk;
+	}
+	
+	private boolean validateRecipients() {
+		boolean allOk = true;
+		
+		boolean atLeastOne = false;
+		
 		externalAddressesEl.clearError();
 		if(externalEl != null && externalEl.isAtLeastSelected(1)) {
 			String value = externalAddressesEl.getValue();
@@ -257,6 +267,7 @@ public class MembersMailController extends FormBasicController {
 						errors.append(email);
 					}
 				}
+				atLeastOne |= true;
 			}
 			
 			if(errors.length() > 0) {
@@ -265,7 +276,46 @@ public class MembersMailController extends FormBasicController {
 			}
 		}
 		
-		return allOk & super.validateFormLogic(ureq);
+		
+		if(ownerEl != null) ownerEl.clearError();
+		if(coachEl != null) coachEl.clearError();
+		if(participantEl != null) participantEl.clearError();
+		if(waitingEl != null) waitingEl.clearError();
+		if(individualEl != null) individualEl.clearError();
+		
+		if((ownerEl != null && ownerEl.isAtLeastSelected(1))
+				|| (coachEl != null && coachEl.isAtLeastSelected(1))
+				|| (participantEl != null && participantEl.isAtLeastSelected(1))
+				|| (waitingEl != null && waitingEl.isAtLeastSelected(1))) {
+			atLeastOne |= true;
+		}
+		
+		//check if there is an individual email
+		if(!atLeastOne && individualEl != null && individualEl.isAtLeastSelected(1) && !selectedMembers.isEmpty()) {
+			atLeastOne |= true;
+		}
+		
+		if(!atLeastOne) {
+			if(externalEl != null && externalEl.isAtLeastSelected(1) && !StringHelper.containsNonWhitespace(externalAddressesEl.getValue())) {
+				externalEl.setErrorKey("at.least.one.recipient", null);
+			} else if(individualEl != null && individualEl.isAtLeastSelected(1) && selectedMembers.isEmpty()) {
+				individualEl.setErrorKey("at.least.one.recipient", null);
+			} else if(ownerEl != null && !ownerEl.isAtLeastSelected(1)) {
+				ownerEl.setErrorKey("at.least.one.recipient", null);
+			} else if(coachEl != null && !coachEl.isAtLeastSelected(1)) {
+				coachEl.setErrorKey("at.least.one.recipient", null);
+			} else if(participantEl != null && !participantEl.isAtLeastSelected(1)) {
+				participantEl.setErrorKey("at.least.one.recipient", null);
+			} else if(waitingEl != null && !waitingEl.isAtLeastSelected(1)) {
+				waitingEl.setErrorKey("at.least.one.recipient", null);
+			} else if (individualEl != null && !individualEl.isAtLeastSelected(1)) {
+				individualEl.setErrorKey("at.least.one.recipient", null);
+			} else if (externalEl != null && !externalEl.isAtLeastSelected(1)) {
+				individualEl.setErrorKey("at.least.one.recipient", null);
+			}
+		}
+		
+		return allOk && atLeastOne;
 	}
 	
 	private File[] getAttachments() {
diff --git a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_de.properties
index 8e34b8f8185..bf53fee27e9 100644
--- a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_de.properties
@@ -1,5 +1,5 @@
 #Mon Mar 02 09:54:04 CET 2009
-
+at.least.one.recipient=Sie m\u00FCssen mindesten ein Empf\u00E4nger w\u00E4hlen.
 
 
 
diff --git a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_en.properties
index 60837ade1aa..9cd14621658 100644
--- a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_en.properties
@@ -1,5 +1,6 @@
 #Tue Nov 15 09:58:15 CET 2016
 add.email=Add
+at.least.one.recipient=You need to choose at least one recipient.
 contact.cp.from=Copy sent to addresser
 error.too.long=the template is too big. The maximal size is {0}\!
 footer.no.userdata=<p>This message has been sent automatically via the learning platform OpenOLAT\: {0}</p>
-- 
GitLab