Name

global.ActivityServiceImpl

Description

Gets installed as part of com.snc.activity_subscriptions plugin Activity Subscriptions Framework. Contains all the methods to perform Activity related operations.

Script

var ActivityServiceImpl = Class.create();
ActivityServiceImpl.prototype = {
  initialize: function(activitySubContext) {
  	this.activitySubContext = activitySubContext;
  	this.activityDAO = activitySubContext.getActivityDAO();
  	this.subscriptionDAO =  activitySubContext.getSubscriptionDAO();
  	this.ACTIVITY_RATE_COUNT_LIMIT = 100;
  	this.ACTIVITY_RATE_TIME_LIMIT = 36000;
  },

  getRelatedActivity: function(activityGr){
  	return new global.ActivityDAO().getRelatedActivity(activityGr);
  },
  
  getActivitiesData: function(reqObj) {
  	if(!reqObj) return {"status": 400, "message": gs.getMessage("Make sure to pass proper request parameters")};
  	
  	//If contextId is passed, get the activities based on context
  	if(reqObj.contextId) {
  		var activityContextService = this.activitySubContext.getService(ActivityConstants.ACTIVITY_CONTEXT_SERVICE);
  		return activityContextService.getActivities(reqObj);
  	}
  	else { //If contextId is not passed, get the activities from activities or activity stream tables
  		return this.getActivities(reqObj.profileId, reqObj.activity_count, reqObj.stream, reqObj.stFrom, reqObj.last, reqObj.before, reqObj.actor, reqObj.enableAggregation, reqObj.isFirstLoad);
  	}
  },
  
  	getActivities: function(profileId, activity_count, stream, stFrom, last, before, actor, enableAggregation, isFirstLoad){
  		var user = profileId || this.subscriptionDAO.getLiveProfileId();
  		if(!user || !stream)
  		return {"status":400,
  		    "message":"Make sure a valid stream and user are passed",
  		    "user":user,
  		    "stream":stream};
  		var results;
  		var fanoutEnabled = this.activityDAO.isFanoutEnabled(stream);
  		if(!fanoutEnabled || fanoutEnabled == 0){
  			var reqParameters = {
  				"countToReturn":activity_count,
  				"liveProfileId":user,
  				"streamId":stream,
  				"enableAggregation":enableAggregation
  			};
  			if(!this.gatherActivities(reqParameters))//update stream table with latest activities
  				gs.info('Unable to sync activities for the stream ' + stream);
  			before = new GlideDateTime();
  		}
  		this.activityDAO.updateLastAccessTime(stream);
  		results = this.activityDAO.getActivities(activity_count, stream, stFrom, last, before, actor, enableAggregation, isFirstLoad);
  		return {"status":200,"data":results};
  	},
  
  gatherActivities: function(reqParameters){
  	if(!reqParameters.liveProfileId || !reqParameters.streamId)
  		return false;
  	var pullService = new ActivityStreamPullService(this.activitySubContext);
  	if(!pullService.updateStreamWithLatestActivities(reqParameters))
  		return false;
  	return true;
  },
  
  initializeActivity: function(){
  	var gr=this.activityDAO.initializeActivity();
  	return gr;
  },
  createActivity: function(source, verb, isUndoActivity,activityGr, valueMap, module) {
  	if(!source)
  		return {"status":400,
  				"message":"Make sure a valid source is passed",
  				"source":source};
  	if(this.isRateLimitReached() === true){
  		return {"status":400,
  				"message":"Create Activity Rate Limit is reached. Please try after sometime",
  				"source":source};
  	}
  	if(this.activitySubContext.isPluginEnabled())
  		this.activityDAO.createActivity(source, verb, isUndoActivity,activityGr, valueMap, module);
  },

  populateActivityStream: function(activity,subscribers,activityJSON, additionalAttributes){	
  	if(!activity || !subscribers)
  		return {"status":400,
  				"message":"Make sure activity and subscribers are valid",
  				"activity":activity,
  				"subscribers":subscribers};

  	this.activityDAO.populateActivityStream(activity,subscribers,activityJSON, additionalAttributes);
  },

  flushStreamCacheForSubscribers : function(subscribers) {
  	if(!subscribers)
  		return {"status":400,
  				"message":"Make sure subscribers are valid",
  				"subscribers":subscribers};
  	this.activityDAO.flushStreamCacheForSubscribers(subscribers);
  },

  isActivityValid: function(content, profile_id, verb, isUndoActivity){
  	if(this.activitySubContext.isCommunityPluginActive == true)
  		return new sn_communities.CommunityActivityService().isActivityValid(content, profile_id, verb, isUndoActivity);
  },
  getFeedbackedMembers: function(content,verb){
  	if(this.activitySubContext.isCommunityPluginActive == true)
  		return new sn_communities.CommunityActivityService().getFeedbackedMembers(content,verb);
  },
  initiateFanout: function(current){
  		this.activityDAO.initiateFanout(current);
  },
  isRateLimitReached: function(){
  	var rateLimitCount = parseInt(gs.getProperty('com.snc.actsub.activity.rate.count.limit',this.ACTIVITY_RATE_COUNT_LIMIT));
  	var rateLimitTime = parseInt(gs.getProperty('com.snc.actsub.activity.rate.time.limit',this.ACTIVITY_RATE_TIME_LIMIT));
  	var lastNthActivityCrDate = this.activityDAO._getRecentNthActivityCrDt(rateLimitCount);
  	if(lastNthActivityCrDate){
  		var diffSeconds = Math.abs(parseInt(gs.dateDiff(gs.nowDateTime(), lastNthActivityCrDate, true)));
  		if(diffSeconds <= rateLimitTime)
  			return true;
  	}
  	return false;
  },

  getActivityInfo: function(activityId) {
  	if(!activityId)
  		return null;
  	return this.activityDAO.getActivityInfo(activityId);
  },
  
  filterByFanoutFlag: function(subscribersList){
  	return this.activityDAO.filterByFanoutFlag(subscribersList);
  },

  deleteInvalidRecords: function(){
  	this.activityDAO.deleteInvalidRecords();
  },

  hasAccessToActivityStream: function(operation, activityStream) {
  	var activity = activityStream.activity_id;
  	var userId = activityStream.stream_id.user_id.document;
      if (gs.hasRole('actsub_admin'))
          return true;
      if (pm.isActive('com.sn_communities') && gs.hasRole('sn_communities.community_user'))
          return new sn_communities.CommunityActivityService().hasAccessToActivity(activity, operation);
      if (gs.hasRole('actsub_user')){
  		if(operation == ActivityConstants.CREATE)
  			return true;
  		return gs.getUserID() == userId;
  	}
      return false;
  },
  type: 'ActivityServiceImpl'
};

Sys ID

987e4b666713220089ec9a6617415afc

Offical Documentation

Official Docs: