diff --git a/config/alfresco/activities/activities-feed-context.xml b/config/alfresco/activities/activities-feed-context.xml index 59084cc311..e6d0a14511 100644 --- a/config/alfresco/activities/activities-feed-context.xml +++ b/config/alfresco/activities/activities-feed-context.xml @@ -25,6 +25,7 @@ + ${activities.feed.max.age.mins} diff --git a/source/java/org/alfresco/repo/activities/feed/cleanup/FeedCleaner.java b/source/java/org/alfresco/repo/activities/feed/cleanup/FeedCleaner.java index a7efe3b4ea..2d96bcb4ed 100644 --- a/source/java/org/alfresco/repo/activities/feed/cleanup/FeedCleaner.java +++ b/source/java/org/alfresco/repo/activities/feed/cleanup/FeedCleaner.java @@ -24,6 +24,8 @@ import java.util.List; import org.alfresco.repo.domain.activities.ActivityFeedDAO; import org.alfresco.repo.domain.activities.ActivityFeedEntity; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.service.cmr.site.SiteService; import org.alfresco.util.PropertyCheck; import org.alfresco.util.VmShutdownListener; import org.apache.commons.logging.Log; @@ -45,11 +47,18 @@ public class FeedCleaner private ActivityFeedDAO feedDAO; + private SiteService siteService; + public void setFeedDAO(ActivityFeedDAO feedDAO) { this.feedDAO = feedDAO; } + public void setSiteService(SiteService siteService) + { + this.siteService = siteService; + } + public void setMaxAgeMins(int mins) { this.maxAgeMins = mins; @@ -122,11 +131,13 @@ public class FeedCleaner for (ActivityFeedEntity feed : feeds) { String siteId = feed.getSiteNetwork(); - String feedUserId = feed.getFeedUserId(); + final String feedUserId = feed.getFeedUserId(); String format = feed.getActivitySummaryFormat(); List feedToClean; + int feedUserSiteCount = 0; + if ((feedUserId == null) || (feedUserId.length() == 0)) { feedToClean = feedDAO.selectSiteFeedEntries(siteId, format); @@ -134,9 +145,22 @@ public class FeedCleaner else { feedToClean = feedDAO.selectUserFeedEntries(feedUserId, format, null, false, false); + + if (siteService != null) + { + // note: allow for fact that Share Activities dashlet currently uses userfeed within site context + feedUserSiteCount = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() + { + public Integer doWork() throws Exception + { + return siteService.listSites(feedUserId).size(); + } + }, AuthenticationUtil.SYSTEM_USER_NAME); + } } - if (feedToClean.size() > maxFeedSize) + if (((feedUserSiteCount == 0) && (feedToClean.size() > maxFeedSize)) || + ((feedToClean.size() > (maxFeedSize * feedUserSiteCount)))) { Date oldestFeedEntry = feedToClean.get(maxFeedSize-1).getPostDate(); diff --git a/source/java/org/alfresco/repo/site/SiteServiceImpl.java b/source/java/org/alfresco/repo/site/SiteServiceImpl.java index 28ac8355bb..84191579cb 100644 --- a/source/java/org/alfresco/repo/site/SiteServiceImpl.java +++ b/source/java/org/alfresco/repo/site/SiteServiceImpl.java @@ -680,8 +680,29 @@ public class SiteServiceImpl implements SiteService, SiteModel /** * @see org.alfresco.service.cmr.site.SiteService#listSites(java.lang.String) */ - public List listSites(String userName) - { + public List listSites(final String userName) + { + // MT share - for activity service system callback + if (tenantService.isEnabled() && (AuthenticationUtil.SYSTEM_USER_NAME.equals(AuthenticationUtil.getRunAsUser())) && tenantService.isTenantUser(userName)) + { + final String tenantDomain = tenantService.getUserDomain(userName); + + return AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork>() + { + public List doWork() throws Exception + { + return listSitesImpl(userName); + } + }, tenantService.getDomainUser(AuthenticationUtil.getSystemUserName(), tenantDomain)); + } + else + { + return listSitesImpl(userName); + } + } + + private List listSitesImpl(String userName) + { List result = null; // get the Groups this user is contained within (at any level)