From f452704aad71033faf4aa265a02f3d5d52a28c3b Mon Sep 17 00:00:00 2001
From: strentini <none@none>
Date: Fri, 15 Jul 2011 10:59:38 +0200
Subject: [PATCH] OLAT-6171 : remove orphant infomessages and
 subscriptions/subscribers to a deleted course.

FXOLAT-193

--HG--
branch : uzhFixes711
---
 .../org/olat/course/nodes/InfoCourseNode.java | 23 +++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/InfoCourseNode.java b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/InfoCourseNode.java
index 931c062ac68..5bc00898a47 100644
--- a/olat3/webapp/WEB-INF/src/org/olat/course/nodes/InfoCourseNode.java
+++ b/olat3/webapp/WEB-INF/src/org/olat/course/nodes/InfoCourseNode.java
@@ -22,11 +22,16 @@ package org.olat.course.nodes;
 
 import java.util.List;
 
+import org.olat.commons.info.manager.InfoMessageFrontendManager;
+import org.olat.commons.info.model.InfoMessage;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.tabbable.TabbableController;
 import org.olat.core.util.Util;
+import org.olat.core.util.notifications.NotificationsManager;
+import org.olat.core.util.notifications.SubscriptionContext;
+import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
 import org.olat.course.condition.Condition;
 import org.olat.course.condition.interpreter.ConditionInterpreter;
@@ -195,4 +200,22 @@ public class InfoCourseNode extends AbstractAccessableCourseNode {
 		boolean admin = (getPreConditionAdmin().getConditionExpression() == null ? true : ci.evaluateCondition(getPreConditionAdmin()));
 		nodeEval.putAccessStatus(ADMIN_CONDITION_ID, admin);
 	}
+	
+		@Override
+	/**
+	 * is called when deleting this node, clean up info-messages and subscriptions!
+	 */
+	public void cleanupOnDelete(ICourse course) {
+		// delete infoMessages and subscriptions (OLAT-6171)
+		List<InfoMessage>  messages = InfoMessageFrontendManager.getInstance().loadInfoMessageByResource(course,null, null, null, null, 0, 0);
+		InfoMessageFrontendManager infoMessageManager = InfoMessageFrontendManager.getInstance();
+		for (InfoMessage im : messages) {
+			infoMessageManager.deleteInfoMessage(im);
+		}
+		
+		final SubscriptionContext subscriptionContext = CourseModule.createTechnicalSubscriptionContext(course.getCourseEnvironment(), this);
+		NotificationsManager notifManagar =  NotificationsManager.getInstance();
+		notifManagar.delete(subscriptionContext);
+		super.cleanupOnDelete(course);
+	}
 }
-- 
GitLab