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
This commit is contained in:
Florian Mü
2011-06-25 17:58:43 +00:00
parent 8dc34a60c0
commit 0a61f72c15
4 changed files with 55 additions and 22 deletions

View File

@@ -7,9 +7,9 @@
<url>/api/activities/feed/user?s={siteId?}</url> <url>/api/activities/feed/user?s={siteId?}</url>
<url>/api/activities/feed/user?s={siteId?}&amp;format=atomfeed</url> <url>/api/activities/feed/user?s={siteId?}&amp;format=atomfeed</url>
<url>/api/activities/feed/user?s={siteId?}&amp;format=json</url> <url>/api/activities/feed/user?s={siteId?}&amp;format=json</url>
<url>/api/activities/feed/user?s={siteId?}&amp;exclUser={false?}&amp;exclOthers={false?}</url> <url>/api/activities/feed/user?s={siteId?}&amp;exclUser={false?}&amp;exclOthers={false?}&amp;following={false?}&amp;activityFilter={activityFilter}</url>
<url>/api/activities/feed/user?s={siteId?}&amp;exclUser={false?}&amp;exclOthers={false?}&amp;format=atomfeed</url> <url>/api/activities/feed/user?s={siteId?}&amp;exclUser={false?}&amp;exclOthers={false?}&amp;following={false?}&amp;activityFilter={activityFilter}&amp;format=atomfeed</url>
<url>/api/activities/feed/user?s={siteId?}&amp;exclUser={false?}&amp;exclOthers={false?}&amp;format=json</url> <url>/api/activities/feed/user?s={siteId?}&amp;exclUser={false?}&amp;exclOthers={false?}&amp;following={false?}&amp;activityFilter={activityFilter}&amp;format=json</url>
<format default="atomfeed"></format> <format default="atomfeed"></format>
<authentication>user</authentication> <authentication>user</authentication>
<transaction allow="readonly">required</transaction> <transaction allow="readonly">required</transaction>

View File

@@ -25,6 +25,10 @@ function main()
model.success = true; model.success = true;
model.userStatus = newStatus; model.userStatus = newStatus;
model.userStatusTime = statusTime; model.userStatusTime = statusTime;
var activity = {};
activity.status = newStatus;
activities.postActivity("org.alfresco.profile.status-changed", null, "profile", jsonUtils.toJSONString(activity));
} }
} }
} }

View File

@@ -549,13 +549,13 @@
<!-- Activity User Feed - to get activities feed for logged in user --> <!-- Activity User Feed - to get activities feed for logged in user -->
<bean id="webscript.org.alfresco.repository.activities.feed.userfeed.get" class="org.alfresco.repo.web.scripts.activities.feed.UserFeedRetrieverWebScript" parent="webscript"> <bean id="webscript.org.alfresco.repository.activities.feed.userfeed.get" class="org.alfresco.repo.web.scripts.activities.feed.UserFeedRetrieverWebScript" parent="webscript">
<property name="activityService" ref="activityService"/> <property name="activityService" ref="activityService"/>
<property name="authorityService" ref="AuthorityService"/> <property name="subscriptionService" ref="SubscriptionService"/>
</bean> </bean>
<!-- Activity Admin Feed - to get activities feed for specified user --> <!-- Activity Admin Feed - to get activities feed for specified user -->
<bean id="webscript.org.alfresco.repository.activities.feed.userfeed-admin.get" class="org.alfresco.repo.web.scripts.activities.feed.UserFeedRetrieverWebScript" parent="webscript"> <bean id="webscript.org.alfresco.repository.activities.feed.userfeed-admin.get" class="org.alfresco.repo.web.scripts.activities.feed.UserFeedRetrieverWebScript" parent="webscript">
<property name="activityService" ref="activityService"/> <property name="activityService" ref="activityService"/>
<property name="authorityService" ref="AuthorityService"/> <property name="subscriptionService" ref="SubscriptionService"/>
</bean> </bean>
<!-- Activity Site Feed - to get activities feed for given site, if private site then need to be a member or admin --> <!-- Activity Site Feed - to get activities feed for given site, if private site then need to be a member or admin -->

View File

@@ -20,22 +20,26 @@ package org.alfresco.repo.web.scripts.activities.feed;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.query.PagingRequest;
import org.alfresco.repo.activities.feed.FeedTaskProcessor; import org.alfresco.repo.activities.feed.FeedTaskProcessor;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.service.cmr.activities.ActivityService; 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.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.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.json.JSONException; 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 * Java-backed WebScript to retrieve Activity User Feed
@@ -43,26 +47,27 @@ import org.json.JSONException;
public class UserFeedRetrieverWebScript extends DeclarativeWebScript public class UserFeedRetrieverWebScript extends DeclarativeWebScript
{ {
private static final Log logger = LogFactory.getLog(UserFeedRetrieverWebScript.class); private static final Log logger = LogFactory.getLog(UserFeedRetrieverWebScript.class);
// URL request parameter names // URL request parameter names
public static final String PARAM_SITE_ID = "s"; public static final String PARAM_SITE_ID = "s";
public static final String PARAM_EXCLUDE_THIS_USER = "exclUser"; public static final String PARAM_EXCLUDE_THIS_USER = "exclUser";
public static final String PARAM_EXCLUDE_OTHER_USERS = "exclOthers"; 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 ActivityService activityService;
private AuthorityService authorityService; private SubscriptionService subscriptionService;
public void setActivityService(ActivityService activityService) public void setActivityService(ActivityService activityService)
{ {
this.activityService = activityService; this.activityService = activityService;
} }
public void setAuthorityService(AuthorityService authorityService) public void setSubscriptionService(SubscriptionService subscriptionService)
{ {
this.authorityService = authorityService; this.subscriptionService = subscriptionService;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse) * @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(); format = getDescription().getDefaultFormat();
} }
// process extension // process extension
String extensionPath = req.getExtensionPath(); String extensionPath = req.getExtensionPath();
String[] extParts = extensionPath == null ? new String[1] : extensionPath.split("/"); String[] extParts = extensionPath == null ? new String[1] : extensionPath.split("/");
@@ -90,10 +95,12 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
throw new AlfrescoRuntimeException("Unexpected extension: " + extensionPath); throw new AlfrescoRuntimeException("Unexpected extension: " + extensionPath);
} }
// process arguments // process arguments
String siteId = req.getParameter(PARAM_SITE_ID); // optional String siteId = req.getParameter(PARAM_SITE_ID); // optional
String exclThisUserStr = req.getParameter(PARAM_EXCLUDE_THIS_USER); // optional String exclThisUserStr = req.getParameter(PARAM_EXCLUDE_THIS_USER); // optional
String exclOtherUsersStr = req.getParameter(PARAM_EXCLUDE_OTHER_USERS); // 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; boolean exclThisUser = false;
if ((exclThisUserStr != null) && (exclThisUserStr.equalsIgnoreCase("true") || exclThisUserStr.equalsIgnoreCase("t"))) if ((exclThisUserStr != null) && (exclThisUserStr.equalsIgnoreCase("true") || exclThisUserStr.equalsIgnoreCase("t")))
@@ -107,9 +114,31 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
exclOtherUsers = true; exclOtherUsers = true;
} }
Set<String> 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<String>();
userFilter.addAll(following.getPage());
}
}
Set<String> activityFilter = null;
if (activityFilterStr != null)
{
activityFilter = new HashSet<String>();
String[] activities = activityFilterStr.split(",");
for (String s : activities)
{
activityFilter.add(s);
}
}
if ((feedUserId == null) || (feedUserId.length() == 0)) 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. // map feed collection format to feed entry format (if not the same), eg.
@@ -117,7 +146,7 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
// atom -> atomentry // atom -> atomentry
if (format.equals("atomfeed") || format.equals("atom")) if (format.equals("atomfeed") || format.equals("atom"))
{ {
format = "atomentry"; format = "atomentry";
} }
Map<String, Object> model = new HashMap<String, Object>(); Map<String, Object> model = new HashMap<String, Object>();
@@ -127,7 +156,7 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
List<String> feedEntries = activityService.getUserFeedEntries(feedUserId, format, siteId, exclThisUser, exclOtherUsers); List<String> feedEntries = activityService.getUserFeedEntries(feedUserId, format, siteId, exclThisUser, exclOtherUsers);
if (format.equals(FeedTaskProcessor.FEED_FORMAT_JSON)) if (format.equals(FeedTaskProcessor.FEED_FORMAT_JSON))
{ {
model.put("feedEntries", feedEntries); model.put("feedEntries", feedEntries);
model.put("siteId", siteId); model.put("siteId", siteId);
} }
@@ -135,14 +164,14 @@ public class UserFeedRetrieverWebScript extends DeclarativeWebScript
{ {
List<Map<String, Object>> activityFeedModels = new ArrayList<Map<String, Object>>(); List<Map<String, Object>> activityFeedModels = new ArrayList<Map<String, Object>>();
try try
{ {
for (String feedEntry : feedEntries) for (String feedEntry : feedEntries)
{ {
activityFeedModels.add(JSONtoFmModel.convertJSONObjectToMap(feedEntry)); activityFeedModels.add(JSONtoFmModel.convertJSONObjectToMap(feedEntry));
} }
} }
catch (JSONException je) catch (JSONException je)
{ {
throw new AlfrescoRuntimeException("Unable to get user feed entries: " + je.getMessage()); throw new AlfrescoRuntimeException("Unable to get user feed entries: " + je.getMessage());
} }