From 0a61f72c159b2a097dba6acbcc8442be1b2265b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BC?= Date: Sat, 25 Jun 2011 17:58:43 +0000 Subject: [PATCH] User status changes now generate activities Activities Dashlet: - added "I'm following" filter - prepared activities filter (not working yet) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28589 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../activities/feed/userfeed.get.desc.xml | 6 +- .../slingshot/profile/userstatus.post.json.js | 4 ++ .../web-scripts-application-context.xml | 4 +- .../feed/UserFeedRetrieverWebScript.java | 63 ++++++++++++++----- 4 files changed, 55 insertions(+), 22 deletions(-) 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> activityFeedModels = new ArrayList>(); try - { + { for (String feedEntry : feedEntries) { activityFeedModels.add(JSONtoFmModel.convertJSONObjectToMap(feedEntry)); } } catch (JSONException je) - { + { throw new AlfrescoRuntimeException("Unable to get user feed entries: " + je.getMessage()); }