From b0e3369a4ca8c60f9b86879a2ebcf30abdeb4e80 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 5 Apr 2017 11:01:44 +0200
Subject: [PATCH] OO-2621: update the messages author and modifier if someone
 is removed the async way

---
 .../info/manager/InfoMessageFrontendManager.java      |  4 +++-
 .../info/manager/InfoMessageFrontendManagerImpl.java  | 11 ++++++-----
 .../manager/BusinessGroupMembershipProcessor.java     |  4 ++++
 .../olat/group/manager/BusinessGroupServiceImpl.java  |  1 -
 4 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java
index c59d8869e22..a43fc80e807 100644
--- a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java
+++ b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManager.java
@@ -24,11 +24,13 @@ import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
+import org.olat.basesecurity.IdentityRef;
 import org.olat.commons.info.model.InfoMessage;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.group.BusinessGroup;
+import org.olat.group.BusinessGroupRef;
 
 /**
  * 
@@ -62,7 +64,7 @@ public interface InfoMessageFrontendManager {
 	
 	public void deleteInfoMessage(InfoMessage infoMessage);
 	
-	public void updateInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity);
+	public void updateInfoMessagesOfIdentity(BusinessGroupRef businessGroup, IdentityRef identity);
 	
 	public void removeInfoMessagesAndSubscriptionContext(BusinessGroup group);
 	
diff --git a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java
index a361b29f9ab..518e2912430 100644
--- a/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java
+++ b/src/main/java/org/olat/commons/info/manager/InfoMessageFrontendManagerImpl.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Set;
 
+import org.olat.basesecurity.IdentityRef;
 import org.olat.commons.info.model.InfoMessage;
 import org.olat.commons.info.model.InfoMessageImpl;
 import org.olat.commons.info.notification.InfoSubscriptionManager;
@@ -44,6 +45,7 @@ import org.olat.core.util.mail.MailContextImpl;
 import org.olat.core.util.mail.MailManager;
 import org.olat.core.util.mail.MailerResult;
 import org.olat.group.BusinessGroup;
+import org.olat.group.BusinessGroupRef;
 
 /**
  * 
@@ -164,16 +166,15 @@ public class InfoMessageFrontendManagerImpl implements InfoMessageFrontendManage
 	}
 	
 	@Override
-	public void updateInfoMessagesOfIdentity(BusinessGroup businessGroup, Identity identity) {
+	public void updateInfoMessagesOfIdentity(BusinessGroupRef businessGroup, IdentityRef identity) {
 		List<InfoMessage> infoMessages = infoMessageManager.loadInfoMessagesOfIdentity(businessGroup, identity);
 		for (InfoMessage infoMessage : infoMessages) {
 			Identity author = infoMessage.getAuthor();
-			Identity modifier = infoMessage.getModifier();
-			if (author != null && author.equals(identity)) {
+			if (author != null && author.getKey().equals(identity.getKey())) {
 				((InfoMessageImpl)infoMessage).setAuthor(null);
-				infoSubscriptionManager.markPublisherNews(infoMessage.getOLATResourceable(), infoMessage.getResSubPath());
 			} 
-			if (modifier != null && modifier.equals(identity)) {
+			Identity modifier = infoMessage.getModifier();
+			if (modifier != null && modifier.getKey().equals(identity.getKey())) {
 				infoMessage.setModifier(null);
 			}
 			infoMessageManager.saveInfoMessage(infoMessage);
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupMembershipProcessor.java b/src/main/java/org/olat/group/manager/BusinessGroupMembershipProcessor.java
index 1f6bcbdeda2..5fe41b1e5b0 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupMembershipProcessor.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupMembershipProcessor.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.IdentityRef;
 import org.olat.basesecurity.model.IdentityRefImpl;
+import org.olat.commons.info.manager.InfoMessageFrontendManager;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.gui.control.Event;
 import org.olat.core.util.coordinate.CoordinatorManager;
@@ -61,6 +62,8 @@ public class BusinessGroupMembershipProcessor implements InitializingBean, Gener
 	@Autowired
 	private NotificationsManager notificationsManager;
 	@Autowired
+	private InfoMessageFrontendManager infoMessageManager;
+	@Autowired
 	private RepositoryManager repositoryManager;
 	@Autowired
 	private BusinessGroupRelationDAO businessGroupRelationDao;
@@ -108,6 +111,7 @@ public class BusinessGroupMembershipProcessor implements InitializingBean, Gener
 		BusinessGroupRef groupRef = new BusinessGroupRefImpl(groupKey);
 		
 		if(!businessGroupRelationDao.hasAnyRole(identityRef, groupRef)) {
+			infoMessageManager.updateInfoMessagesOfIdentity(groupRef, identityRef);
 			notificationsManager.unsubscribeAllForIdentityAndResId(identityRef, groupRef.getKey());
 			
 			List<BGRepositoryEntryRelation> relations = businessGroupRelationDao
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
index db310cfa666..de911c43218 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
@@ -1035,7 +1035,6 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD
 
 	private void removeParticipant(Identity ureqIdentity, Identity identity, BusinessGroup group, MailPackage mailing,
 			List<BusinessGroupModifiedEvent.Deferred> events) {
-		infoMessageManager.updateInfoMessagesOfIdentity(group, identity);
 		boolean removed = businessGroupRelationDAO.removeRole(identity, group, GroupRoles.participant.name());
 		if(removed) {
 			// notify currently active users of this business group
-- 
GitLab