diff --git a/src/main/java/org/olat/commons/info/notification/InfoSubscriptionManagerImpl.java b/src/main/java/org/olat/commons/info/notification/InfoSubscriptionManagerImpl.java index 09947020f887306ecd7848a83f604840b4e71315..884fb6d3e4c8e52da8b6da3c99d9ce17aaa05cc9 100644 --- a/src/main/java/org/olat/commons/info/notification/InfoSubscriptionManagerImpl.java +++ b/src/main/java/org/olat/commons/info/notification/InfoSubscriptionManagerImpl.java @@ -73,7 +73,7 @@ public class InfoSubscriptionManagerImpl implements InfoSubscriptionManager { return Collections.emptyList(); } - return notificationsManager.getSubscriberIdentities(publisher); + return notificationsManager.getSubscriberIdentities(publisher, true); } @Override diff --git a/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java b/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java index cfd75a6dde6654e5d953c260d27d81d50c8cc178..b119e002b38e6db07d129fa133e88771ea7dc983 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java +++ b/src/main/java/org/olat/core/commons/services/notifications/NotificationsManager.java @@ -154,9 +154,10 @@ public interface NotificationsManager { * Return identities of all enabled subscribers of the publisher. * * @param publisher The publisher + * @param enabledOnly true to exclude disabled subscriptions * @return A list of identities */ - public List<Identity> getSubscriberIdentities(Publisher publisher); + public List<Identity> getSubscriberIdentities(Publisher publisher, boolean enabledOnly); /** * sets the latest visited date of the subscription to 'now' .assumes the diff --git a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java index 3aef0fc1473f3c1f7f38ff67ba8cc027d93088bb..5b57b6730b20dfdd52b0dc847b787546ec3328b2 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java +++ b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java @@ -834,9 +834,18 @@ public class NotificationsManagerImpl implements NotificationsManager, UserDataD } @Override - public List<Identity> getSubscriberIdentities(Publisher publisher) { + public List<Identity> getSubscriberIdentities(Publisher publisher, boolean enabledOnly) { + StringBuilder sb = new StringBuilder(256); + sb.append("select ident from notisub sub") + .append(" inner join sub.identity as ident") + .append(" inner join ident.user as identUser") + .append(" where sub.publisher=:publisher"); + if(enabledOnly) { + sb.append(" and sub.enabled=true"); + } + return dbInstance.getCurrentEntityManager() - .createNamedQuery("identitySubscribersByPublisher", Identity.class) + .createQuery(sb.toString(), Identity.class) .setParameter("publisher", publisher) .getResultList(); } diff --git a/src/main/java/org/olat/core/commons/services/notifications/model/SubscriberImpl.java b/src/main/java/org/olat/core/commons/services/notifications/model/SubscriberImpl.java index 155f70cca5f06f16156cfa7f5dadbd8f043fdfea..8e97438a6ca67218d90c0108218e056ed77f5721 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/model/SubscriberImpl.java +++ b/src/main/java/org/olat/core/commons/services/notifications/model/SubscriberImpl.java @@ -61,7 +61,6 @@ import org.olat.core.id.Persistable; @Table(name="o_noti_sub") @NamedQuery(name="subscribersByPublisher", query="select sub from notisub sub where sub.publisher=:publisher") @NamedQuery(name="subscribersByPublisherAndIdentity", query="select sub from notisub as sub where sub.publisher.key=:publisherKey and sub.identity.key=:identityKey") -@NamedQuery(name="identitySubscribersByPublisher", query="select sub.identity from notisub sub where sub.publisher=:publisher") public class SubscriberImpl implements Subscriber, CreateInfo, Persistable { private static final long serialVersionUID = 6165097156137862263L; diff --git a/src/test/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerTest.java b/src/test/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerTest.java index 3edc97afbe85dd8cfd3682108cb7dfbe591d71c5..63c8d462f432bc17700b4d05d1f8ce996bdbd7c4 100644 --- a/src/test/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerTest.java +++ b/src/test/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerTest.java @@ -324,8 +324,9 @@ public class NotificationsManagerTest extends OlatTestCase { @Test public void testGetSubscriberIdentities() { - Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("valid1b-" + UUID.randomUUID().toString()); - Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("valid1b-" + UUID.randomUUID().toString()); + Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("valid1b1-"); + Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("valid1b2-"); + Identity id3 = JunitTestHelper.createAndPersistIdentityAsRndUser("disabled1b-"); //create a publisher String identifier = UUID.randomUUID().toString().replace("-", ""); SubscriptionContext context = new SubscriptionContext("Subscribers", Long.valueOf(123), identifier); @@ -335,14 +336,26 @@ public class NotificationsManagerTest extends OlatTestCase { //add subscribers notificationManager.subscribe(id1, context, publisherData); notificationManager.subscribe(id2, context, publisherData); + notificationManager.subscribe(id3, context, publisherData); dbInstance.commitAndCloseSession(); - //get identities - List<Identity> identities = notificationManager.getSubscriberIdentities(publisher); + notificationManager.unsubscribe(id3, context); + dbInstance.commitAndCloseSession(); + + //get identities with enabled subscribers + List<Identity> identities = notificationManager.getSubscriberIdentities(publisher, true); Assert.assertNotNull(identities); Assert.assertEquals(2, identities.size()); Assert.assertTrue(identities.contains(id1)); Assert.assertTrue(identities.contains(id2)); + + //get identities with enabled subscribers + List<Identity> allIdentities = notificationManager.getSubscriberIdentities(publisher, false); + Assert.assertNotNull(allIdentities); + Assert.assertEquals(3, allIdentities.size()); + Assert.assertTrue(allIdentities.contains(id1)); + Assert.assertTrue(allIdentities.contains(id2)); + Assert.assertTrue(allIdentities.contains(id3)); } @Test @@ -405,9 +418,9 @@ public class NotificationsManagerTest extends OlatTestCase { @Test public void testSubscriptions() { - Identity id1 = JunitTestHelper.createAndPersistIdentityAsUser("fi1-" + UUID.randomUUID().toString()); - Identity id2 = JunitTestHelper.createAndPersistIdentityAsUser("fi2-" + UUID.randomUUID().toString()); - Identity id3 = JunitTestHelper.createAndPersistIdentityAsUser("fi3-" + UUID.randomUUID().toString()); + Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fi1-"); + Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fi2-"); + Identity id3 = JunitTestHelper.createAndPersistIdentityAsRndUser("fi3-"); SubscriptionContext sc = new SubscriptionContext("Course", Long.valueOf(123), UUID.randomUUID().toString()); PublisherData pd = new PublisherData("Forum", "e.g. forumdata=keyofforum", null);