diff --git a/config/alfresco/activities/activities-feed-context.xml b/config/alfresco/activities/activities-feed-context.xml
index 535b2e83d4..bd8aecffab 100644
--- a/config/alfresco/activities/activities-feed-context.xml
+++ b/config/alfresco/activities/activities-feed-context.xml
@@ -65,6 +65,7 @@
+
diff --git a/source/java/org/alfresco/repo/activities/ActivityServiceImpl.java b/source/java/org/alfresco/repo/activities/ActivityServiceImpl.java
index 5b1c282523..1a9e172f30 100644
--- a/source/java/org/alfresco/repo/activities/ActivityServiceImpl.java
+++ b/source/java/org/alfresco/repo/activities/ActivityServiceImpl.java
@@ -456,7 +456,7 @@ public class ActivityServiceImpl implements ActivityService
}
catch (SQLException e)
{
- throw new AlfrescoRuntimeException("Failed to set feed control: " + e, e);
+ throw new AlfrescoRuntimeException("Failed to get feed controls: " + e, e);
}
}
@@ -479,7 +479,7 @@ public class ActivityServiceImpl implements ActivityService
}
catch (SQLException e)
{
- throw new AlfrescoRuntimeException("Failed to set feed control: " + e, e);
+ throw new AlfrescoRuntimeException("Failed to unset feed control: " + e, e);
}
}
diff --git a/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java b/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java
index e74c3aeb96..8fa28170d7 100644
--- a/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java
+++ b/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java
@@ -47,6 +47,8 @@ public abstract class AbstractFeedGenerator implements FeedGenerator
private AuthenticationService authenticationService;
private String repoEndPoint; // http://hostname:port/webapp (eg. http://localhost:8080/alfresco)
+
+ private boolean userNamesAreCaseSensitive = false;
private RepoCtx ctx = null;
@@ -67,6 +69,11 @@ public abstract class AbstractFeedGenerator implements FeedGenerator
this.repoEndPoint = repoEndPoint;
}
+ public void setUserNamesAreCaseSensitive(boolean userNamesAreCaseSensitive)
+ {
+ this.userNamesAreCaseSensitive = userNamesAreCaseSensitive;
+ }
+
public void setMaxItemsPerCycle(int maxItemsPerCycle)
{
this.maxItemsPerCycle = maxItemsPerCycle;
@@ -95,6 +102,7 @@ public abstract class AbstractFeedGenerator implements FeedGenerator
public void init() throws Exception
{
ctx = new RepoCtx(repoEndPoint);
+ ctx.setUserNamesAreCaseSensitive(userNamesAreCaseSensitive);
busy = false;
}
diff --git a/source/java/org/alfresco/repo/activities/feed/FeedTaskProcessor.java b/source/java/org/alfresco/repo/activities/feed/FeedTaskProcessor.java
index 2467322fd6..78821de807 100644
--- a/source/java/org/alfresco/repo/activities/feed/FeedTaskProcessor.java
+++ b/source/java/org/alfresco/repo/activities/feed/FeedTaskProcessor.java
@@ -408,6 +408,12 @@ public abstract class FeedTaskProcessor
{
JSONObject member = (JSONObject)ja.get(i);
JSONObject person = (JSONObject)member.getJSONObject("person");
+
+ String userName = person.getString("userName");
+ if (! ctx.isUserNamesAreCaseSensitive())
+ {
+ userName = userName.toLowerCase();
+ }
members.add(person.getString("userName"));
}
}
@@ -523,7 +529,7 @@ public abstract class FeedTaskProcessor
for (FeedControlDAO feedControl : feedControls)
{
- if ((feedControl.getSiteNetwork() == null) && (feedControl.getAppTool() != null))
+ if (((feedControl.getSiteNetwork() == null) || (feedControl.getSiteNetwork().length() == 0)) && (feedControl.getAppTool() != null))
{
if (feedControl.getAppTool().equals(activityPost.getAppTool()))
{
@@ -531,7 +537,7 @@ public abstract class FeedTaskProcessor
return false;
}
}
- else if ((feedControl.getAppTool() == null) && (feedControl.getSiteNetwork() != null))
+ else if (((feedControl.getAppTool() == null) || (feedControl.getAppTool().length() == 0)) && (feedControl.getSiteNetwork() != null))
{
if (feedControl.getSiteNetwork().equals(activityPost.getSiteNetwork()))
{
@@ -539,7 +545,8 @@ public abstract class FeedTaskProcessor
return false;
}
}
- else if ((feedControl.getSiteNetwork() != null) && (feedControl.getAppTool() != null))
+ else if (((feedControl.getSiteNetwork() != null) && (feedControl.getSiteNetwork().length() > 0)) &&
+ ((feedControl.getAppTool() != null) && (feedControl.getAppTool().length() > 0)))
{
if ((feedControl.getSiteNetwork().equals(activityPost.getSiteNetwork())) &&
(feedControl.getAppTool().equals(activityPost.getAppTool())))
diff --git a/source/java/org/alfresco/repo/activities/feed/RepoCtx.java b/source/java/org/alfresco/repo/activities/feed/RepoCtx.java
index f57e0d025a..7f9cf6059d 100644
--- a/source/java/org/alfresco/repo/activities/feed/RepoCtx.java
+++ b/source/java/org/alfresco/repo/activities/feed/RepoCtx.java
@@ -32,6 +32,8 @@ import java.io.Serializable;
public class RepoCtx implements Serializable
{
private String repoEndPoint; // http://hostname:port/webapp (eg. http://localhost:8080/alfresco)
+ private boolean userNamesAreCaseSensitive = false;
+
private String ticket;
public static final long serialVersionUID = -3896042917378679686L;
@@ -54,4 +56,14 @@ public class RepoCtx implements Serializable
{
this.ticket = ticket;
}
+
+ public boolean isUserNamesAreCaseSensitive()
+ {
+ return userNamesAreCaseSensitive;
+ }
+
+ public void setUserNamesAreCaseSensitive(boolean userNamesAreCaseSensitive)
+ {
+ this.userNamesAreCaseSensitive = userNamesAreCaseSensitive;
+ }
}
diff --git a/source/java/org/alfresco/repo/activities/script/Activity.java b/source/java/org/alfresco/repo/activities/script/Activity.java
index f58339be1b..a4741c3cc0 100644
--- a/source/java/org/alfresco/repo/activities/script/Activity.java
+++ b/source/java/org/alfresco/repo/activities/script/Activity.java
@@ -24,8 +24,11 @@
*/
package org.alfresco.repo.activities.script;
+import java.util.List;
+
import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
import org.alfresco.service.cmr.activities.ActivityService;
+import org.alfresco.service.cmr.activities.FeedControl;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
@@ -46,6 +49,11 @@ public final class Activity extends BaseScopableProcessorExtension
{
this.activityService = activityService;
}
+
+
+ /*
+ * Post Activity
+ */
/**
* Post a custom activity type
@@ -108,4 +116,42 @@ public final class Activity extends BaseScopableProcessorExtension
{
activityService.postActivity(activityType, siteId, appTool, nodeRef, name, typeQName, parentNodeRef);
}
+
+
+ /*
+ * Manage User Feed Controls
+ */
+
+ /**
+ * For current user, get feed controls
+ *
+ * @return array of user feed controls
+ */
+ public FeedControl[] getFeedControls()
+ {
+ List feedControls = activityService.getFeedControls();
+ return (FeedControl[])feedControls.toArray(new FeedControl[feedControls.size()]);
+ }
+
+ /**
+ * For current user, set feed control (opt-out) for a site or an appTool or a site/appTool combination
+ *
+ * @param siteId - required (optional, if appToolId is supplied)
+ * @param appToolId - required (optional, if siteId is supplied)
+ */
+ public void setFeedControl(String siteId, String appToolId)
+ {
+ activityService.setFeedControl(new FeedControl(siteId, appToolId));
+ }
+
+ /**
+ * For current user, unset feed control
+ *
+ * @param siteId - required (optional, if appToolId is supplied)
+ * @param appToolId - required (optional, if siteId is supplied)
+ */
+ public void unsetFeedControl(String siteId, String appToolId)
+ {
+ activityService.unsetFeedControl(new FeedControl(siteId, appToolId));
+ }
}
diff --git a/source/java/org/alfresco/repo/activities/script/test_activityService.js b/source/java/org/alfresco/repo/activities/script/test_activityService.js
index a1b31182cc..0b7e562d2f 100644
--- a/source/java/org/alfresco/repo/activities/script/test_activityService.js
+++ b/source/java/org/alfresco/repo/activities/script/test_activityService.js
@@ -12,6 +12,33 @@ activities.postActivity("test activity type 5", "my site", null, '{ "item2" : 45
activities.postActivity("test activity type 6", "my site", "my app tool", '{ "item3" : 789 }');
activities.postActivity("test activity type 7", "my site", "my app tool", '{ invalidJSON }');
+// user feed controls
+var feedControls = activities.getFeedControls();
+test.assertEquals(0, feedControls.length);
+
+activities.setFeedControl("my site", "my app tool");
+
+feedControls = activities.getFeedControls();
+test.assertEquals(1, feedControls.length);
+
+activities.setFeedControl("my site", null);
+
+feedControls = activities.getFeedControls();
+test.assertEquals(2, feedControls.length);
+
+activities.setFeedControl("", "my app tool");
+
+feedControls = activities.getFeedControls();
+test.assertEquals(3, feedControls.length);
+
+
+activities.unsetFeedControl("my site", "my app tool");
+activities.unsetFeedControl("my site", "");
+activities.unsetFeedControl(null, "my app tool");
+
+feedControls = activities.getFeedControls();
+test.assertEquals(0, feedControls.length);
+
failure = "";
diff --git a/source/java/org/alfresco/service/cmr/activities/ActivityService.java b/source/java/org/alfresco/service/cmr/activities/ActivityService.java
index 4136e7d7bf..8a091def1e 100644
--- a/source/java/org/alfresco/service/cmr/activities/ActivityService.java
+++ b/source/java/org/alfresco/service/cmr/activities/ActivityService.java
@@ -116,7 +116,7 @@ public interface ActivityService
*/
/**
- * For current user, set feed control (opt-out) for a site or an appTool or a site/appTool
+ * For current user, set feed control (opt-out) for a site or an appTool or a site/appTool combination
*
* @param feedControl - required
*/
diff --git a/source/java/org/alfresco/service/cmr/activities/FeedControl.java b/source/java/org/alfresco/service/cmr/activities/FeedControl.java
index 2a3fc6b21f..5dd34102ec 100644
--- a/source/java/org/alfresco/service/cmr/activities/FeedControl.java
+++ b/source/java/org/alfresco/service/cmr/activities/FeedControl.java
@@ -24,11 +24,16 @@
*/
package org.alfresco.service.cmr.activities;
-public class FeedControl
+import java.io.Serializable;
+
+public class FeedControl implements Serializable
{
+ private static final long serialVersionUID = -1934566916718472843L;
+
private String siteId;
private String appToolId;
+
public FeedControl(String siteId, String appToolId)
{
if (siteId == null) siteId = "";