From 3d1be942522b4ffd661f8d6b3dad3746617b247a Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Thu, 28 Jun 2018 18:11:37 +0200
Subject: [PATCH] OO-3561: add informations about the group of recipients
 especially for the outbox of the email sender in the member list course
 element and group tool

---
 .../memberlist/ui/MembersMailController.java  | 47 ++++++++++++-------
 .../ui/_i18n/LocalStrings_de.properties       |  6 +++
 .../ui/_i18n/LocalStrings_en.properties       |  8 +++-
 .../org/olat/core/util/mail/ContactList.java  | 12 +++--
 4 files changed, 52 insertions(+), 21 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 1b9898e9d7b..b82f12ecd25 100644
--- a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
+++ b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
@@ -21,7 +21,6 @@ package org.olat.commons.memberlist.ui;
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -112,8 +111,8 @@ public class MembersMailController extends FormBasicController {
 	
 	public MembersMailController(UserRequest ureq, WindowControl wControl, Translator translator, CourseEnvironment courseEnv,
 			List<Member> ownerList, List<Member> coachList, List<Member> participantList, List<Member> waitingList, String bodyTemplate) {
-		super(ureq, wControl);
-		setTranslator(Util.createPackageTranslator(translator, MailHelper.class, ureq.getLocale()));
+		super(ureq, wControl, Util.createPackageTranslator(translator, MailHelper.class, ureq.getLocale()));
+		
 		
 		this.courseEnv = courseEnv;
 		this.ownerList = ownerList;
@@ -477,7 +476,7 @@ public class MembersMailController extends FormBasicController {
 	}
 	
 	private void doSend(UserRequest ureq) {
-		ContactList contactList = new ContactList("");
+		List<ContactList> contactList = new ArrayList<>();
 		if (courseEnv == null) {
 			if(coachEl != null && coachEl.isAtLeastSelected(1)) {
 				List<Long> identityKeys = new ArrayList<>(coachList.size());
@@ -485,7 +484,9 @@ public class MembersMailController extends FormBasicController {
 					identityKeys.add(coach.getKey());
 				}
 				List<Identity> coaches = securityManager.loadIdentityByKeys(identityKeys);
-				contactList.addAllIdentites(coaches);
+				ContactList coachList = new ContactList(translate("contact.list.coaches"));
+				coachList.addAllIdentites(coaches);
+				contactList.add(coachList);
 			}
 			
 			if(participantEl != null && participantEl.isAtLeastSelected(1)) {
@@ -494,7 +495,9 @@ public class MembersMailController extends FormBasicController {
 					identityKeys.add(participant.getKey());
 				}
 				List<Identity> participants = securityManager.loadIdentityByKeys(identityKeys);
-				contactList.addAllIdentites(participants);
+				ContactList participantList = new ContactList(translate("contact.list.participants"));
+				participantList.addAllIdentites(participants);
+				contactList.add(participantList);
 			}
 			
 			if(waitingEl != null && waitingEl.isAtLeastSelected(1)) {
@@ -503,13 +506,17 @@ public class MembersMailController extends FormBasicController {
 					identityKeys.add(waiter.getKey());
 				}
 				List<Identity> waiters = securityManager.loadIdentityByKeys(identityKeys);
-				contactList.addAllIdentites(waiters);
+				ContactList waitingList = new ContactList(translate("contact.list.waiting"));
+				waitingList.addAllIdentites(waiters);
+				contactList.add(waitingList);
 			}
 		} else {			
 			if(ownerEl != null && ownerEl.isAtLeastSelected(1)) {
 				RepositoryEntry courseRepositoryEntry = courseEnv.getCourseGroupManager().getCourseEntry();
 				List<Identity> owners = repositoryService.getMembers(courseRepositoryEntry, GroupRoles.owner.name());
-				contactList.addAllIdentites(owners);
+				ContactList ownerList = new ContactList(translate("contact.list.owners"));
+				ownerList.addAllIdentites(owners);
+				contactList.add(ownerList);
 			}
 			
 			if(coachEl != null && coachEl.isAtLeastSelected(1)) {
@@ -518,8 +525,10 @@ public class MembersMailController extends FormBasicController {
 					sendToWhatYouSee.add(coach.getKey());
 				}
 				CourseGroupManager cgm = courseEnv.getCourseGroupManager();
-				avoidInvisibleMember(cgm.getCoachesFromBusinessGroups(), contactList, sendToWhatYouSee);
-				avoidInvisibleMember(cgm.getCoaches(), contactList, sendToWhatYouSee);
+				ContactList coachList = new ContactList(translate("contact.list.coaches"));
+				avoidInvisibleMember(cgm.getCoachesFromBusinessGroups(), coachList, sendToWhatYouSee);
+				avoidInvisibleMember(cgm.getCoaches(), coachList, sendToWhatYouSee);
+				contactList.add(coachList);
 			}
 			
 			if(participantEl != null && participantEl.isAtLeastSelected(1)) {
@@ -528,8 +537,10 @@ public class MembersMailController extends FormBasicController {
 					sendToWhatYouSee.add(participant.getKey());
 				}
 				CourseGroupManager cgm = courseEnv.getCourseGroupManager();
-				avoidInvisibleMember(cgm.getParticipantsFromBusinessGroups(), contactList, sendToWhatYouSee);
-				avoidInvisibleMember(cgm.getParticipants(), contactList, sendToWhatYouSee);
+				ContactList participantList = new ContactList(translate("contact.list.participants"));
+				avoidInvisibleMember(cgm.getParticipantsFromBusinessGroups(), participantList, sendToWhatYouSee);
+				avoidInvisibleMember(cgm.getParticipants(), participantList, sendToWhatYouSee);
+				contactList.add(participantList);
 			}
 		}
 		
@@ -540,23 +551,27 @@ public class MembersMailController extends FormBasicController {
 				identityKeys.add(member.getKey());
 			}
 			List<Identity> selectedIdentities = securityManager.loadIdentityByKeys(identityKeys);
-			contactList.addAllIdentites(selectedIdentities);
+			ContactList otherList = new ContactList(translate("contact.list.others"));
+			otherList.addAllIdentites(selectedIdentities);
+			contactList.add(otherList);
 		}
 		
 		if(externalEl != null && externalEl.isAtLeastSelected(1)) {
 			String value = externalAddressesEl.getValue();
 			if(StringHelper.containsNonWhitespace(value)) {
+				ContactList externalList = new ContactList(translate("contact.list.external"));
 				for(StringTokenizer tokenizer= new StringTokenizer(value, ",\r\n", false); tokenizer.hasMoreTokens(); ) {
 					String email = tokenizer.nextToken().trim();
-					contactList.add(email);
+					externalList.add(email);
 				}
+				contactList.add(externalList);
 			}
 		}
 
 		doSendEmailToMember(ureq, contactList);
 	}
 	
-	private void doSendEmailToMember(UserRequest ureq, ContactList contactList) {
+	private void doSendEmailToMember(UserRequest ureq, List<ContactList> contactList) {
 		boolean success = false;
 		try {
 			File[] attachmentArr = getAttachments();
@@ -564,7 +579,7 @@ public class MembersMailController extends FormBasicController {
 			MailBundle bundle = new MailBundle();
 			bundle.setContext(context);
 			bundle.setFromId(getIdentity());						
-			bundle.setContactLists(Collections.singletonList(contactList));
+			bundle.setContactLists(contactList);
 			bundle.setContent(subjectEl.getValue(), bodyEl.getValue(), attachmentArr);
 			MailerResult result = mailService.sendMessage(bundle);
 			if(copyFromEl.isAtLeastSelected(1)) {
diff --git a/src/main/java/org/olat/commons/memberlist/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/commons/memberlist/ui/_i18n/LocalStrings_de.properties
index c1d6e89cbe9..e47919630ff 100644
--- a/src/main/java/org/olat/commons/memberlist/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/commons/memberlist/ui/_i18n/LocalStrings_de.properties
@@ -3,3 +3,9 @@ table.header.firstTime=Beitritt
 table.header.lastTime=Zuletzt besucht
 table.header.online=$org.olat.group.ui.main\:table.header.online
 nomembers=Keine Mitglieder
+contact.list.external=Externe Empf\u00E4nger
+contact.list.others=Diverse
+contact.list.participants=Teilnehmer
+contact.list.coaches=Betreuer
+contact.list.owners=Besitzer
+contact.list.waiting=Warteliste
diff --git a/src/main/java/org/olat/commons/memberlist/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/commons/memberlist/ui/_i18n/LocalStrings_en.properties
index 3ffdcd55cdd..95178e11b1e 100644
--- a/src/main/java/org/olat/commons/memberlist/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/commons/memberlist/ui/_i18n/LocalStrings_en.properties
@@ -2,4 +2,10 @@
 table.header.firstTime=Registration
 table.header.lastTime=Last visit
 table.header.online=$org.olat.group.ui.main\:table.header.online
-nomembers=No members
\ No newline at end of file
+nomembers=No members
+contact.list.external=External recipients
+contact.list.others=Divers
+contact.list.participants=Participants
+contact.list.coaches=Coaches
+contact.list.owners=Owners
+contact.list.waiting=Waiting list
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/util/mail/ContactList.java b/src/main/java/org/olat/core/util/mail/ContactList.java
index 75ec7da502a..01e516f469a 100644
--- a/src/main/java/org/olat/core/util/mail/ContactList.java
+++ b/src/main/java/org/olat/core/util/mail/ContactList.java
@@ -38,7 +38,8 @@ import javax.mail.internet.InternetAddress;
 
 import org.olat.core.id.Identity;
 import org.olat.core.id.UserConstants;
-import org.olat.core.logging.LogDelegator;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
 
 /**
@@ -56,7 +57,10 @@ import org.olat.core.util.StringHelper;
  * @author patrick
  */
 
-public class ContactList extends LogDelegator {
+public class ContactList {
+	
+	private static final OLog log = Tracing.createLoggerFor(ContactList.class);
+	
 	private String name;
 	private String description;
 	//container for addresses contributed as strings
@@ -152,7 +156,7 @@ public class ContactList extends LogDelegator {
 			rfc2047name = javax.mail.internet.MimeUtility.encodeWord(name, "UTF-8", null);
 		}
 		catch (java.io.UnsupportedEncodingException e) {
-			logWarn("Error MIME-encoding name: " + e, e);
+			log.warn("Error MIME-encoding name: " + e, e);
 			rfc2047name = name;
 		}
 
@@ -303,7 +307,7 @@ public class ContactList extends LogDelegator {
 
 	private void setName(String nameP) {
 		if (!StringHelper.containsNoneOfCoDouSemi(nameP)){
-			logWarn("Contact list name \"" + nameP + "\" doesn't match "+ StringHelper.ALL_WITHOUT_COMMA_2POINT_STRPNT, null);
+			log.warn("Contact list name \"" + nameP + "\" doesn't match "+ StringHelper.ALL_WITHOUT_COMMA_2POINT_STRPNT, null);
 			//replace bad chars with bad char in rfc compliant comments
 			nameP = nameP.replaceAll(":","¦");
 			nameP = nameP.replaceAll(";","_");
-- 
GitLab