diff --git a/src/main/java/org/olat/commons/calendar/notification/CalendarNotificationHandler.java b/src/main/java/org/olat/commons/calendar/notification/CalendarNotificationHandler.java index 4decf30ae346f73247d48d9a8591002e0e9ddeac..c8ba7e8ec48bba6982b9a6780f76e0101b9ab27f 100644 --- a/src/main/java/org/olat/commons/calendar/notification/CalendarNotificationHandler.java +++ b/src/main/java/org/olat/commons/calendar/notification/CalendarNotificationHandler.java @@ -49,7 +49,6 @@ import org.olat.course.CourseModule; import org.olat.group.BusinessGroup; import org.olat.group.manager.BusinessGroupDAO; import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryEntryStatusEnum; import org.olat.repository.RepositoryManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -100,10 +99,9 @@ public class CalendarNotificationHandler implements NotificationsHandler { String calType = null; String title = null; if (type.equals(CalendarController.ACTION_CALENDAR_COURSE)) { - RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(OresHelper.createOLATResourceableInstance("CourseModule", id), false); - RepositoryEntryStatusEnum status = re.getEntryStatus(); - if(status.decommissioned()) { - return NotificationsManager.getInstance().getNoSubscriptionInfo(); + RepositoryEntry re = repositoryManager.lookupRepositoryEntry(OresHelper.createOLATResourceableInstance("CourseModule", id), false); + if(re == null || re.getEntryStatus().decommissioned()) { + return notificationsManager.getNoSubscriptionInfo(); } String displayName = re.getDisplayname(); calType = CalendarManager.TYPE_COURSE; diff --git a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java index f26d0797be82b7df632ee1523680c37853725571..91fb67d53bb5b582fb0c628048de08e92dd616b7 100644 --- a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java +++ b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java @@ -26,7 +26,6 @@ import java.util.Locale; import org.olat.commons.info.InfoMessage; import org.olat.commons.info.InfoMessageManager; -import org.olat.core.CoreSpringFactory; import org.olat.core.commons.services.notifications.NotificationHelper; import org.olat.core.commons.services.notifications.NotificationsHandler; import org.olat.core.commons.services.notifications.NotificationsManager; @@ -46,7 +45,6 @@ import org.olat.core.util.resource.OresHelper; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupService; import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryEntryStatusEnum; import org.olat.repository.RepositoryManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -67,8 +65,14 @@ public class InfoMessageNotificationHandler implements NotificationsHandler { private static final String CSS_CLASS_ICON = "o_infomsg_icon"; + @Autowired + private RepositoryManager repositoryManager; @Autowired private InfoMessageManager infoMessageManager; + @Autowired + private NotificationsManager notificationsManager; + @Autowired + private BusinessGroupService businessGroupService; @Override public SubscriptionInfo createSubscriptionInfo(Subscriber subscriber, Locale locale, Date compareDate) { @@ -89,16 +93,13 @@ public class InfoMessageNotificationHandler implements NotificationsHandler { String displayName; String notificationtitle; if ("BusinessGroup".equals(resName)) { - BusinessGroupService groupService = CoreSpringFactory.getImpl(BusinessGroupService.class); - BusinessGroup group = groupService.loadBusinessGroup(resId); + BusinessGroup group = businessGroupService.loadBusinessGroup(resId); displayName = group.getName(); notificationtitle = "notification.title.group"; } else { - RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(OresHelper.createOLATResourceableInstance(resName, resId), false); - if(re== null || re.getEntryStatus() == RepositoryEntryStatusEnum.closed - || re.getEntryStatus() == RepositoryEntryStatusEnum.trash - || re.getEntryStatus() == RepositoryEntryStatusEnum.deleted) { - return NotificationsManager.getInstance().getNoSubscriptionInfo(); + RepositoryEntry re = repositoryManager.lookupRepositoryEntry(OresHelper.createOLATResourceableInstance(resName, resId), false); + if(re== null || re.getEntryStatus().decommissioned()) { + return notificationsManager.getNoSubscriptionInfo(); } displayName = re.getDisplayname(); notificationtitle = "notification.title"; @@ -122,10 +123,10 @@ public class InfoMessageNotificationHandler implements NotificationsHandler { } } catch (Exception e) { log.error("Unexpected exception", e); - si = NotificationsManager.getInstance().getNoSubscriptionInfo(); + si = notificationsManager.getNoSubscriptionInfo(); } } else { - si = NotificationsManager.getInstance().getNoSubscriptionInfo(); + si = notificationsManager.getNoSubscriptionInfo(); } return si; } @@ -133,7 +134,7 @@ public class InfoMessageNotificationHandler implements NotificationsHandler { @Override public String createTitleInfo(Subscriber subscriber, Locale locale) { Translator translator = Util.createPackageTranslator(this.getClass(), locale); - String displayName = RepositoryManager.getInstance().lookupDisplayNameByOLATResourceableId(subscriber.getPublisher().getResId()); + String displayName = repositoryManager.lookupDisplayNameByOLATResourceableId(subscriber.getPublisher().getResId()); return translator.translate("notification.title", new String[]{displayName}); } diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java index 139a3ccb4783d088336cfa1781a13e25ad1a3369..9c94f7b536f1791c594c9e707cbda43bafab3d3e 100644 --- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java +++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java @@ -128,7 +128,11 @@ public class PersistingCourseGroupManager implements CourseGroupManager { @Override public boolean isNotificationsAllowed() { - return false; + RepositoryEntry re = getCourseEntry(); + if(re == null || re.getEntryStatus() == null) { + return false; + } + return !re.getEntryStatus().decommissioned(); } public void updateRepositoryEntry(RepositoryEntry entry) { diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAMarkedNotificationsHandler.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAMarkedNotificationsHandler.java index e2498f23b806c373b10a3658151f4f631a566079..f597a2f966a4f2ebe680ca0f5d1a1c68e96c1d76 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTAMarkedNotificationsHandler.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAMarkedNotificationsHandler.java @@ -95,7 +95,6 @@ public class GTAMarkedNotificationsHandler implements NotificationsHandler { } } catch (Exception e) { log.error("Cannot create gtask notifications for subscriber: " + subscriber.getKey(), e); - //checkPublisher(p); si = notificationsManager.getNoSubscriptionInfo(); } return si; diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTANotifications.java b/src/main/java/org/olat/course/nodes/gta/manager/GTANotifications.java index 31aece7b3113b13ef4aa1bc268ebb076429e6d9a..7d28a5598501658167d4b218e2e2939ac9bb1228 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTANotifications.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTANotifications.java @@ -71,7 +71,6 @@ import org.olat.modules.assessment.Role; import org.olat.modules.assessment.manager.AssessmentEntryDAO; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryRelationType; -import org.olat.repository.RepositoryEntryStatusEnum; import org.olat.repository.RepositoryService; import org.olat.user.UserManager; @@ -145,14 +144,12 @@ class GTANotifications { if(subIdentifier.startsWith("Marked::")) { subIdentifier = subIdentifier.substring("Marked::".length(), subIdentifier.length()); } - CourseNode node = course.getRunStructure().getNode(subIdentifier); - RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); - if(entry == null || entry.getEntryStatus() == RepositoryEntryStatusEnum.closed - || entry.getEntryStatus() == RepositoryEntryStatusEnum.trash - || entry.getEntryStatus() == RepositoryEntryStatusEnum.deleted) { + if(!course.getCourseEnvironment().getCourseGroupManager().isNotificationsAllowed()) { return Collections.emptyList(); } + CourseNode node = course.getRunStructure().getNode(subIdentifier); + RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); if(node instanceof GTACourseNode) { gtaNode = (GTACourseNode)node; displayName = entry.getDisplayname(); diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTANotificationsHandler.java b/src/main/java/org/olat/course/nodes/gta/manager/GTANotificationsHandler.java index e7a6a1248333048c5b49812b8719b8f40047abc1..6ecac9adfaa3540af62e4e4432cd16f9bcc7a5bd 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTANotificationsHandler.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTANotificationsHandler.java @@ -95,7 +95,6 @@ public class GTANotificationsHandler implements NotificationsHandler { } } catch (Exception e) { log.error("Cannot create gtask notifications for subscriber: " + subscriber.getKey(), e); - //checkPublisher(p); si = notificationsManager.getNoSubscriptionInfo(); } return si; diff --git a/src/main/java/org/olat/course/nodes/pf/manager/PFNotifications.java b/src/main/java/org/olat/course/nodes/pf/manager/PFNotifications.java index 2e6d5f951020adf547135cac6991d076ca3c7fa7..52e8b1a6e1be4b1f50030c09ccbc1e9be2025884 100644 --- a/src/main/java/org/olat/course/nodes/pf/manager/PFNotifications.java +++ b/src/main/java/org/olat/course/nodes/pf/manager/PFNotifications.java @@ -25,6 +25,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -83,19 +84,23 @@ public class PFNotifications { translator = Util.createPackageTranslator(PFRunController.class, locale); } - public List<SubscriptionListItem> getItems() throws Exception { + public List<SubscriptionListItem> getItems() { Publisher p = subscriber.getPublisher(); Identity identity = subscriber.getIdentity(); ICourse course = CourseFactory.loadCourse(p.getResId()); CourseEnvironment courseEnv = course.getCourseEnvironment(); - CourseGroupManager groupManager = courseEnv.getCourseGroupManager(); + if(!courseEnv.getCourseGroupManager().isNotificationsAllowed()) { + return Collections.emptyList(); + } + CourseNode node = course.getRunStructure().getNode(p.getSubidentifier()); - RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); Date latestNews = p.getLatestNewsDate(); if (notificationsManager.isPublisherValid(p) && compareDate.before(latestNews)) { + RepositoryEntry entry = course.getCourseEnvironment().getCourseGroupManager().getCourseEntry(); this.displayname = entry.getDisplayname(); - + + CourseGroupManager groupManager = courseEnv.getCourseGroupManager(); if (groupManager.isIdentityCourseCoach(identity) || groupManager.isIdentityCourseAdministrator(identity)) { List<Identity> participants = pfManager.getParticipants(identity, courseEnv, groupManager.isIdentityCourseAdministrator(identity)); diff --git a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java index b08b9cfe6f109602aa7121d90a881534d5ca4ba0..5ebe911152f3c62cc29a07bbdb449b422c4eeaed 100644 --- a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java +++ b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java @@ -42,7 +42,6 @@ import org.olat.core.commons.services.notifications.model.TitleItem; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; import org.olat.core.id.context.BusinessControlFactory; -import org.olat.core.logging.LogDelegator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; @@ -52,7 +51,6 @@ import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupService; import org.olat.modules.fo.manager.ForumManager; import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryEntryStatusEnum; import org.olat.repository.RepositoryManager; /** @@ -60,7 +58,7 @@ import org.olat.repository.RepositoryManager; * * @author Felix Jost */ -public class ForumNotificationsHandler extends LogDelegator implements NotificationsHandler { +public class ForumNotificationsHandler implements NotificationsHandler { private static final OLog log = Tracing.createLoggerFor(ForumNotificationsHandler.class); public ForumNotificationsHandler() { @@ -85,16 +83,14 @@ public class ForumNotificationsHandler extends LogDelegator implements Notificat try { forumKey = Long.parseLong(p.getData()); } catch (NumberFormatException e) { - logError("Could not parse forum key!", e); + log.error("Could not parse forum key!", e); NotificationsManager.getInstance().deactivate(p); return NotificationsManager.getInstance().getNoSubscriptionInfo(); } if("CourseModule".equals(p.getResName())) { RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(OresHelper.createOLATResourceableInstance(p.getResName(), p.getResId()), false); - if(re == null || re.getEntryStatus() == RepositoryEntryStatusEnum.closed - || re.getEntryStatus() == RepositoryEntryStatusEnum.trash - || re.getEntryStatus() == RepositoryEntryStatusEnum.deleted) { + if(re == null || re.getEntryStatus().decommissioned()) { return NotificationsManager.getInstance().getNoSubscriptionInfo(); } } @@ -153,17 +149,17 @@ public class ForumNotificationsHandler extends LogDelegator implements Notificat if("BusinessGroup".equals(p.getResName())) { BusinessGroup bg = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(p.getResId()); if(bg == null) { - logInfo("deactivating publisher with key; " + p.getKey(), null); + log.info("deactivating publisher with key; " + p.getKey(), null); NotificationsManager.getInstance().deactivate(p); } } else if ("CourseModule".equals(p.getResName())) { if(!NotificationsUpgradeHelper.checkCourse(p)) { - logInfo("deactivating publisher with key; " + p.getKey(), null); + log.info("deactivating publisher with key; " + p.getKey(), null); NotificationsManager.getInstance().deactivate(p); } } } catch (Exception e) { - logError("", e); + log.error("", e); } } diff --git a/src/main/java/org/olat/modules/webFeed/manager/FeedNotificationsHandler.java b/src/main/java/org/olat/modules/webFeed/manager/FeedNotificationsHandler.java index f0900fbec4096a72adbf2ca46697fd612e1f9ce6..19cf8e07f5177fc75d0bf079833efb824a9d9643 100644 --- a/src/main/java/org/olat/modules/webFeed/manager/FeedNotificationsHandler.java +++ b/src/main/java/org/olat/modules/webFeed/manager/FeedNotificationsHandler.java @@ -49,7 +49,6 @@ import org.olat.modules.webFeed.Feed; import org.olat.modules.webFeed.Item; import org.olat.modules.webFeed.ui.FeedMainController; import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryEntryStatusEnum; import org.olat.repository.RepositoryManager; import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; @@ -85,29 +84,28 @@ public abstract class FeedNotificationsHandler implements NotificationsHandler { try { final Translator translator = Util.createPackageTranslator(FeedMainController.class, locale); if (notificationsManager.isPublisherValid(p) && compareDate.before(latestNews)) { + + RepositoryEntry re = repoManager.lookupRepositoryEntry( + OresHelper.createOLATResourceableInstance(p.getResName(), p.getResId()), false); + if (re.getEntryStatus().decommissioned()) { + return notificationsManager.getNoSubscriptionInfo(); + } + String title; - try { - RepositoryEntry re = repoManager.lookupRepositoryEntry( - OresHelper.createOLATResourceableInstance(p.getResName(), p.getResId()), false); - RepositoryEntryStatusEnum status = re.getEntryStatus(); - if (status.decommissioned()) { + String displayName = re.getDisplayname(); + if("CourseModule".equals(p.getResName())) { + ICourse course = CourseFactory.loadCourse(re); + CourseNode node = course.getRunStructure().getNode(p.getSubidentifier()); + if(node == null) { + notificationsManager.deactivate(p); return notificationsManager.getNoSubscriptionInfo(); } - String displayName = re.getDisplayname(); - if("CourseModule".equals(p.getResName())) { - ICourse course = CourseFactory.loadCourse(re); - CourseNode node = course.getRunStructure().getNode(p.getSubidentifier()); - if(node == null) { - notificationsManager.deactivate(p); - return notificationsManager.getNoSubscriptionInfo(); - } - title = translator.translate(NOTIFICATIONS_HEADER_COURSE, new String[]{displayName}); - } else { - title = getHeader(translator, displayName); + if (!course.getCourseEnvironment().getCourseGroupManager().isNotificationsAllowed()) { + return notificationsManager.getNoSubscriptionInfo(); } - } catch (Exception e) { - log.error("Unknown Exception", e); - return notificationsManager.getNoSubscriptionInfo(); + title = translator.translate(NOTIFICATIONS_HEADER_COURSE, new String[]{displayName}); + } else { + title = getHeader(translator, displayName); } OLATResourceable feedOres = OresHelper.createOLATResourceableInstance(p.getType(), new Long(p.getData())); @@ -138,6 +136,10 @@ public abstract class FeedNotificationsHandler implements NotificationsHandler { String urlToSend = BusinessControlFactory.getInstance() .getURLFromBusinessPathString(businessPath); String iconCssClass = item.extraCSSClass(); + if(!StringHelper.containsNonWhitespace(iconCssClass)) { + iconCssClass = getCssClassIcon(); + } + Date publishDate = item.getPublishDate(); if(item.isPublished()) { if(compareDate.before(publishDate)) {