diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.desc.xml
index 0809a475ef..99e07543d8 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.desc.xml
+++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed.get.desc.xml
@@ -7,9 +7,9 @@
/api/activities/feed/user?s={siteId?}
/api/activities/feed/user?s={siteId?}&format=atomfeed
/api/activities/feed/user?s={siteId?}&format=json
- /api/activities/feed/user?s={siteId?}&exclUser={false?}&exclOthers={false?}
- /api/activities/feed/user?s={siteId?}&exclUser={false?}&exclOthers={false?}&format=atomfeed
- /api/activities/feed/user?s={siteId?}&exclUser={false?}&exclOthers={false?}&format=json
+ /api/activities/feed/user?s={siteId?}&exclUser={false?}&exclOthers={false?}&following={false?}&activityFilter={activityFilter}
+ /api/activities/feed/user?s={siteId?}&exclUser={false?}&exclOthers={false?}&following={false?}&activityFilter={activityFilter}&format=atomfeed
+ /api/activities/feed/user?s={siteId?}&exclUser={false?}&exclOthers={false?}&following={false?}&activityFilter={activityFilter}&format=json
user
required
diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/profile/userstatus.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/profile/userstatus.post.json.js
index df48383572..b50a416630 100644
--- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/profile/userstatus.post.json.js
+++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/profile/userstatus.post.json.js
@@ -25,6 +25,10 @@ function main()
model.success = true;
model.userStatus = newStatus;
model.userStatusTime = statusTime;
+
+ var activity = {};
+ activity.status = newStatus;
+ activities.postActivity("org.alfresco.profile.status-changed", null, "profile", jsonUtils.toJSONString(activity));
}
}
}
diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml
index 5dda2ce57d..4167448b0b 100644
--- a/config/alfresco/web-scripts-application-context.xml
+++ b/config/alfresco/web-scripts-application-context.xml
@@ -549,13 +549,13 @@
-
+
-
+
diff --git a/source/java/org/alfresco/repo/web/scripts/activities/feed/UserFeedRetrieverWebScript.java b/source/java/org/alfresco/repo/web/scripts/activities/feed/UserFeedRetrieverWebScript.java
index 9f374ac600..3f4e7c5869 100644
--- a/source/java/org/alfresco/repo/web/scripts/activities/feed/UserFeedRetrieverWebScript.java
+++ b/source/java/org/alfresco/repo/web/scripts/activities/feed/UserFeedRetrieverWebScript.java
@@ -20,22 +20,26 @@ package org.alfresco.repo.web.scripts.activities.feed;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException;
+import org.alfresco.query.PagingRequest;
import org.alfresco.repo.activities.feed.FeedTaskProcessor;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.service.cmr.activities.ActivityService;
-import org.alfresco.service.cmr.security.AuthorityService;
+import org.alfresco.service.cmr.subscriptions.PagingFollowingResults;
+import org.alfresco.service.cmr.subscriptions.SubscriptionService;
import org.alfresco.util.JSONtoFmModel;
-import org.springframework.extensions.webscripts.DeclarativeWebScript;
-import org.springframework.extensions.webscripts.Status;
-import org.springframework.extensions.webscripts.WebScriptRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONException;
+import org.springframework.extensions.webscripts.DeclarativeWebScript;
+import org.springframework.extensions.webscripts.Status;
+import org.springframework.extensions.webscripts.WebScriptRequest;
/**
* Java-backed WebScript to retrieve Activity User Feed
@@ -43,26 +47,27 @@ import org.json.JSONException;
public class UserFeedRetrieverWebScript extends DeclarativeWebScript
{
private static final Log logger = LogFactory.getLog(UserFeedRetrieverWebScript.class);
-
+
// URL request parameter names
public static final String PARAM_SITE_ID = "s";
public static final String PARAM_EXCLUDE_THIS_USER = "exclUser";
public static final String PARAM_EXCLUDE_OTHER_USERS = "exclOthers";
+ public static final String PARAM_ONLY_FOLLOWING = "following";
+ public static final String PARAM_ACTIVITY_FILTER = "activityFilter";
private ActivityService activityService;
- private AuthorityService authorityService;
+ private SubscriptionService subscriptionService;
public void setActivityService(ActivityService activityService)
{
this.activityService = activityService;
}
-
- public void setAuthorityService(AuthorityService authorityService)
+
+ public void setSubscriptionService(SubscriptionService subscriptionService)
{
- this.authorityService = authorityService;
+ this.subscriptionService = subscriptionService;
}
-
/* (non-Javadoc)
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse)
*/
@@ -76,7 +81,7 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
format = getDescription().getDefaultFormat();
}
- // process extension
+ // process extension
String extensionPath = req.getExtensionPath();
String[] extParts = extensionPath == null ? new String[1] : extensionPath.split("/");
@@ -90,10 +95,12 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
throw new AlfrescoRuntimeException("Unexpected extension: " + extensionPath);
}
- // process arguments
+ // process arguments
String siteId = req.getParameter(PARAM_SITE_ID); // optional
String exclThisUserStr = req.getParameter(PARAM_EXCLUDE_THIS_USER); // optional
String exclOtherUsersStr = req.getParameter(PARAM_EXCLUDE_OTHER_USERS); // optional
+ String onlyFollowingStr = req.getParameter(PARAM_ONLY_FOLLOWING); // optional
+ String activityFilterStr = req.getParameter(PARAM_ACTIVITY_FILTER); // optional
boolean exclThisUser = false;
if ((exclThisUserStr != null) && (exclThisUserStr.equalsIgnoreCase("true") || exclThisUserStr.equalsIgnoreCase("t")))
@@ -107,9 +114,31 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
exclOtherUsers = true;
}
+ Set userFilter = null;
+ if ((onlyFollowingStr != null) && (onlyFollowingStr.equalsIgnoreCase("true") || onlyFollowingStr.equalsIgnoreCase("t")))
+ {
+ PagingFollowingResults following = subscriptionService.getFollowers(AuthenticationUtil.getRunAsUser(), new PagingRequest(-1, null));
+ if (following.getPage() != null)
+ {
+ userFilter = new HashSet();
+ userFilter.addAll(following.getPage());
+ }
+ }
+
+ Set activityFilter = null;
+ if (activityFilterStr != null)
+ {
+ activityFilter = new HashSet();
+ String[] activities = activityFilterStr.split(",");
+ for (String s : activities)
+ {
+ activityFilter.add(s);
+ }
+ }
+
if ((feedUserId == null) || (feedUserId.length() == 0))
{
- feedUserId = AuthenticationUtil.getFullyAuthenticatedUser();
+ feedUserId = AuthenticationUtil.getFullyAuthenticatedUser();
}
// map feed collection format to feed entry format (if not the same), eg.
@@ -117,7 +146,7 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
// atom -> atomentry
if (format.equals("atomfeed") || format.equals("atom"))
{
- format = "atomentry";
+ format = "atomentry";
}
Map model = new HashMap();
@@ -127,7 +156,7 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
List feedEntries = activityService.getUserFeedEntries(feedUserId, format, siteId, exclThisUser, exclOtherUsers);
if (format.equals(FeedTaskProcessor.FEED_FORMAT_JSON))
- {
+ {
model.put("feedEntries", feedEntries);
model.put("siteId", siteId);
}
@@ -135,14 +164,14 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
{
List