From bdae2181b41df35cdacaba529cd0d558273e4d58 Mon Sep 17 00:00:00 2001 From: Jan Vonka Date: Fri, 27 Mar 2009 15:39:51 +0000 Subject: [PATCH] MOB-594 - user activities feed now returns all activities (including own) - also have optional filters to either exclude own or exclude others git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13764 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../feed/userfeed-admin.get.desc.xml | 7 ++- .../activities/feed/userfeed.get.desc.xml | 11 ++-- .../activities/SiteActivitySystemTest.java | 63 ++++++++++++++++++- .../feed/SiteFeedRetrieverWebScript.java | 15 ++++- .../feed/UserFeedRetrieverWebScript.java | 25 +++++++- 5 files changed, 105 insertions(+), 16 deletions(-) diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.desc.xml index 0c0efd3102..b91bfe64cc 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/activities/feed/userfeed-admin.get.desc.xml @@ -4,11 +4,12 @@ /api/activities/feed/user/{userId} /api/activities/feed/user/{userId}?format=atomfeed /api/activities/feed/user/{userId}?format=json - /api/activities/feed/user/{userId}?format=rss /api/activities/feed/user/{userId}?s={siteId} /api/activities/feed/user/{userId}?s={siteId}&format=atomfeed - /api/activities/feed/user/{userId}?s={siteId}&format=json - /api/activities/feed/user/{userId}?s={siteId}&format=rss + /api/activities/feed/user/{userId}?s={siteId}&format=json + /api/activities/feed/user/{userId}?s={siteId?}&exclUser={false?}&exclOthers={false?} + /api/activities/feed/user/{userId}?s={siteId?}&exclUser={false?}&exclOthers={false?}&format=atomfeed + /api/activities/feed/user/{userId}?s={siteId?}&exclUser={false?}&exclOthers={false?}&format=json argument admin required 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 9622ae57bb..0999585d63 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 @@ -4,11 +4,12 @@ /api/activities/feed/user /api/activities/feed/user?format=atomfeed /api/activities/feed/user?format=json - /api/activities/feed/user?format=rss - /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}&format=rss + /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 user required diff --git a/source/java/org/alfresco/repo/web/scripts/activities/SiteActivitySystemTest.java b/source/java/org/alfresco/repo/web/scripts/activities/SiteActivitySystemTest.java index 098c31105b..14c0b6a21f 100644 --- a/source/java/org/alfresco/repo/web/scripts/activities/SiteActivitySystemTest.java +++ b/source/java/org/alfresco/repo/web/scripts/activities/SiteActivitySystemTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -38,8 +38,8 @@ import java.util.Date; import junit.framework.TestCase; -import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.site.SiteModel; +import org.alfresco.repo.web.scripts.activities.feed.UserFeedRetrieverWebScript; import org.alfresco.util.Base64; import org.alfresco.util.ISO8601DateFormat; import org.apache.commons.logging.Log; @@ -272,6 +272,8 @@ public class SiteActivitySystemTest extends TestCase { testCreateSites(); + // as admin + String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW); getUserFeed(user1, ticket, true, 0); @@ -279,10 +281,14 @@ public class SiteActivitySystemTest extends TestCase getUserFeed(user3, ticket, true, 0); getUserFeed(user4, ticket, true, 0); + // as user1 + ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user1, USER_PW); getUserFeed(user1, ticket, false, 0); + // as user2 + ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user2, USER_PW); try @@ -295,11 +301,41 @@ public class SiteActivitySystemTest extends TestCase { assertTrue(ioe.getMessage().contains("HTTP response code: 401")); } + + + // as user1 - with filter args ... + + ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user1, USER_PW); + + getUserFeed(null, site1, ticket, false, false, false, 0); + getUserFeed(null, site2, ticket, false, false, false, 0); + getUserFeed(null, site3, ticket, false, false, false, 0); + + getUserFeed(null, null, ticket, false, true, false, 0); + getUserFeed(null, null, ticket, false, false, true, 0); + getUserFeed(null, null, ticket, false, true, true, 0); } protected void getUserFeed(String userId, String ticket, boolean isAdmin, int expectedCount) throws Exception { - String url = WEBSCRIPT_ENDPOINT + URL_ACTIVITIES + URL_USER_FEED + (isAdmin ? "/" + userId : "") + "?format=json"; + getUserFeed(userId, null, ticket, isAdmin, false, false, expectedCount); + } + + protected void getUserFeed(String userId, String siteId, String ticket, boolean isAdmin, boolean excludeThisUser, boolean excludeOtherUsers, int expectedCount) throws Exception + { + StringBuilder sb = new StringBuilder(); + + sb.append(WEBSCRIPT_ENDPOINT). + append(URL_ACTIVITIES). + append(URL_USER_FEED). + append(isAdmin ? "/" + userId : ""). // optional + append("?"). + append((siteId != null) ? UserFeedRetrieverWebScript.PARAM_SITE_ID + "=" + siteId + "&": ""). // optional + append(excludeThisUser ? UserFeedRetrieverWebScript.PARAM_EXCLUDE_THIS_USER + "=true&" : ""). // optional + append(excludeOtherUsers ? UserFeedRetrieverWebScript.PARAM_EXCLUDE_OTHER_USERS + "=true&" : ""). // optional + append("format=json"); + + String url = sb.toString(); String jsonArrayResult = callGetWebScript(url, ticket); if (jsonArrayResult != null) @@ -482,6 +518,8 @@ public class SiteActivitySystemTest extends TestCase testRemoveMembershipsWithPause(); testUserFeedControls(); + // as admin + String ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, ADMIN_USER, ADMIN_PW); // 2 sites, with 4 users, each with 1 join and 1 role change = 8x2 @@ -492,10 +530,14 @@ public class SiteActivitySystemTest extends TestCase getUserFeed(user3, ticket, true, 14); // 8 = due to feed control - exclude site membership activities for site 1 getUserFeed(user4, ticket, true, 16); // 16 = no feed control + // as user1 + ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user1, USER_PW); getUserFeed(user1, ticket, false, 14); + // as user2 + ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user2, USER_PW); try @@ -508,6 +550,21 @@ public class SiteActivitySystemTest extends TestCase { assertTrue(ioe.getMessage().contains("HTTP response code: 401")); } + + // as user1 - with filter args ... + + ticket = callLoginWebScript(WEBSCRIPT_ENDPOINT, user1, USER_PW); + + getUserFeed(null, site1, ticket, false, false, false, 0); + getUserFeed(null, site2, ticket, false, false, false, 8); + getUserFeed(null, site3, ticket, false, false, false, 6); + + getUserFeed(null, null, ticket, false, false, false, 14); // no filter + getUserFeed(null, null, ticket, false, true, false, 14); // exclude any from user1 + getUserFeed(null, null, ticket, false, false, true, 0); // exclude all except user1 + getUserFeed(null, null, ticket, false, true, true, 0); // exclude all (NOOP) + + // TODO - add more (eg. other non-admin user activities) } private void addMembership(String siteId, String userName, String ticket, String role) throws Exception diff --git a/source/java/org/alfresco/repo/web/scripts/activities/feed/SiteFeedRetrieverWebScript.java b/source/java/org/alfresco/repo/web/scripts/activities/feed/SiteFeedRetrieverWebScript.java index d7995f9f45..04851b5ef9 100644 --- a/source/java/org/alfresco/repo/web/scripts/activities/feed/SiteFeedRetrieverWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/activities/feed/SiteFeedRetrieverWebScript.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,6 +31,7 @@ import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; 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.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; @@ -100,7 +101,17 @@ public class SiteFeedRetrieverWebScript extends DeclarativeWebScript Map model = new HashMap(); // if site is null then either does not exist or is private (and current user is not admin or a member) - hence return 401 (unauthorised) - SiteInfo siteInfo = siteService.getSite(siteId); + + SiteInfo siteInfo = null; + try + { + siteInfo = siteService.getSite(siteId); + } + catch (AccessDeniedException ade) + { + // ignore - fall through + } + if (siteInfo == null) { String currentUser = AuthenticationUtil.getFullyAuthenticatedUser(); 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 9b76640b65..c387defaef 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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -48,6 +48,11 @@ 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"; + private ActivityService activityService; private AuthorityService authorityService; @@ -90,8 +95,22 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript } // process arguments - String siteId = req.getParameter("s"); // optional + 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 + boolean exclThisUser = false; + if ((exclThisUserStr != null) && (exclThisUserStr.equalsIgnoreCase("true") || exclThisUserStr.equalsIgnoreCase("t"))) + { + exclThisUser = true; + } + + boolean exclOtherUsers = false; + if ((exclOtherUsersStr != null) && (exclOtherUsersStr.equalsIgnoreCase("true") || exclOtherUsersStr.equalsIgnoreCase("t"))) + { + exclOtherUsers = true; + } + if ((feedUserId == null) || (feedUserId.length() == 0)) { feedUserId = AuthenticationUtil.getFullyAuthenticatedUser(); @@ -118,7 +137,7 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript Map model = new HashMap(); - List feedEntries = activityService.getUserFeedEntries(feedUserId, format, siteId); + List feedEntries = activityService.getUserFeedEntries(feedUserId, format, siteId, exclThisUser, exclOtherUsers); if (format.equals("json")) {