Пример #1
0
 /// <summary>
 /// 检查用户是否接收动态
 /// </summary>
 /// <param name="activityService"></param>
 /// <param name="isPublic">群组是否为公开群组</param>
 /// <param name="userId">UserId</param>
 /// <param name="activity">动态</param>
 /// <returns>接收动态返回true,否则返回false</returns>
 private bool IsReceiveActivity(ActivityService activityService, bool isPublic, long userId, Activity activity)
 {
     if (isPublic)
     {
         //检查用户是否已在信息发布者的粉丝圈里面
         FollowService followService = new FollowService();
         if (followService.IsFollowed(userId, activity.UserId))
             return false;
     }
     //检查用户是否已屏蔽群组
     if (new UserBlockService().IsBlockedGroup(userId, activity.OwnerId))
         return false;
     //检查用户是否接收该动态项目
     Dictionary<string, bool> userSettings = activityService.GetActivityItemUserSettings(userId);
     if (userSettings.ContainsKey(activity.ActivityItemKey))
         return userSettings[activity.ActivityItemKey];
     else
     {
         //如果用户没有设置从默认设置获取
         ActivityItem activityItem = activityService.GetActivityItem(activity.ActivityItemKey);
         if (activityItem != null)
             return activityItem.IsUserReceived;
         else
             return true;
     }
 }
 /// <summary>
 /// 获取接收人UserId集合
 /// </summary>
 /// <param name="activityService">动态业务逻辑类</param>
 /// <param name="ownerId">动态拥有者Id</param>
 /// <param name="userId">动态发布者Id</param>
 /// <param name="activityItemKey">动态项目标识</param>
 /// <returns></returns>
 IEnumerable<long> IActivityReceiverGetter.GetReceiverUserIds(ActivityService activityService, Activity activity)
 {
     SubscribeService subscribeService = new SubscribeService(TenantTypeIds.Instance().BlogThread());
     IEnumerable<long> followerUserIds = subscribeService.GetUserIdsOfObject(activity.OwnerId);
     if (followerUserIds == null)
         return new List<long>();
     return followerUserIds.Where(n => IsReceiveActivity(activityService, n, activity));
 }
 //done:zhengw,by mazq 缺少注释
 //zhengw回复:已修改
 /// <summary>
 /// 获取接收人UserId集合
 /// </summary>
 /// <param name="activityService">动态业务逻辑类</param>
 /// <param name="activity">动态</param>
 /// <returns></returns>
 IEnumerable<long> IActivityReceiverGetter.GetReceiverUserIds(ActivityService activityService, Activity activity)
 {
     //1、获取用户的所有粉丝,然后通过IsReceiveActivity()检查,是否给该粉丝推送动态;
     FollowService followService = new FollowService();
     IEnumerable<long> followerUserIds = followService.GetTopFollowerUserIds(activity.OwnerId, Follow_SortBy.DateCreated_Desc, ValueUtility.GetSqlMaxInt());
     if (followerUserIds == null)
         return new List<long>();
     return followerUserIds.Where(n => IsReceiveActivity(activityService, n, activity));
 }
Пример #4
0
 /// <summary>
 /// 是否具有删除群组动态的权限
 /// </summary>
 /// <param name="authorizer"></param>
 /// <param name="activity"></param>
 /// <returns></returns>
 public static bool Group_DeleteGroupActivity(this Authorizer authorizer, Activity activity)
 {
     IUser currentUser = UserContext.CurrentUser;
     if (currentUser == null)
         return false;
     if (authorizer.Group_Manage(activity.OwnerId))
         return true;
     if (currentUser.UserId == activity.UserId)
         return true;
     return false;
 }
Пример #5
0
 /// <summary>
 /// 获取接收人UserId集合
 /// </summary>
 /// <param name="activityService">动态业务逻辑类</param>
 /// <param name="activity">动态</param>
 /// <returns></returns>
 IEnumerable<long> IActivityReceiverGetter.GetReceiverUserIds(ActivityService activityService, Activity activity)
 {
     GroupService groupService = new GroupService();
     IEnumerable<long> userIds = groupService.GetUserIdsOfGroup(activity.OwnerId);
     bool isPublic = false;
     var group = groupService.Get(activity.OwnerId);
     if (group != null)
         isPublic = group.IsPublic;
     if (userIds == null)
         return new List<long>();
     return userIds.Where(n => IsReceiveActivity(activityService, isPublic, n, activity));
 }
        /// <summary>
        /// 检查用户是否接收动态
        /// </summary>
        /// <param name="userId">UserId</param>
        /// <param name="activityItemKey">动态项目标识</param>
        /// <param name="fromOwnerId">动态拥有者</param>
        /// <returns>接收动态返回true,否则返回false</returns>
        private bool IsReceiveActivity(ActivityService activityService, long userId, Activity activity)
        {
            //首先检查是否屏蔽用户
            UserBlockService userBlockService = new UserBlockService();
            if (userBlockService.IsBlockedUser(userId, activity.OwnerId))
                return false;

            //被验证用户为黑名单用户
            PrivacyService privacyService = new PrivacyService();
            if (privacyService.IsStopedUser(activity.OwnerId, userId))
                return false;

            //判断指定对象可见
            Dictionary<int, IEnumerable<ContentPrivacySpecifyObject>> dictionary = new ContentPrivacyService().GetPrivacySpecifyObjects(activity.TenantTypeId, activity.SourceId);
            if (dictionary != null && dictionary.Count() > 0)
            {
                foreach (var pair in dictionary)
                {
                    IPrivacySpecifyObjectValidator privacySpecifyUserGetter = DIContainer.ResolveNamed<IPrivacySpecifyObjectValidator>(pair.Key.ToString());
                    foreach (var specifyObject in pair.Value)
                    {
                        if (privacySpecifyUserGetter.Validate(activity.OwnerId, userId, specifyObject.SpecifyObjectId))
                            return true;
                    }
                }
                return false;
            }

            //检查用户是否接收该动态项目
            Dictionary<string, bool> userSettings = activityService.GetActivityItemUserSettings(userId);
            if (userSettings.ContainsKey(activity.ActivityItemKey))
                return userSettings[activity.ActivityItemKey];
            else
            {
                //如果用户没有设置从默认设置获取
                ActivityItem activityItem = activityService.GetActivityItem(activity.ActivityItemKey);
                if (activityItem != null)
                    return activityItem.IsUserReceived;
                else
                    return true;
            }
        }
Пример #7
0
        /// <summary>
        /// 生成动态
        /// </summary>
        /// <param name="activity">待生成的动态</param>
        /// <param name="toMyInbox">是否加入我的动态收件箱</param>
        /// <param name="isPublic">是否是公开的</param>
        public void Generate(Activity activity, bool toMyInbox, bool isPublic = true)
        {
            ActivityItem activityItem = GetActivityItem(activity.ActivityItemKey);
            if (activityItem == null)
                return;
            //1、首先检查IsOnlyOnce是否为true,如果为true并且已经生成过则仅更新动态的最后更新时间
            if (activityItem.IsOnlyOnce)
            {
                //检测是否已经存在,并更新动态的最后更新时间
                if (activityRepository.CheckExistAndUpdateLastModified(activity.OwnerId, activity.OwnerType, activity.ActivityItemKey))
                    return;
            }

            //2、如果存在ReferenceId,更新OwnerType+TenantTypeId+ReferenceId对应动态的LastModified;
            if (activity.ReferenceId > 0)
            {
                //对应主体内容动态的最后更新时间设置为当前时间(可能有多个Owner)
                activityRepository.UpdateLastModified(activity.ReferenceTenantTypeId, activity.ReferenceId);
                //3、判断用户是否对同一主体内容产生过从属内容动态,如果产生过则替换成本次操作;  处理类似连续回复的情况
                if (activityRepository.CheckExistAndUpdateSource(activity))
                    return;
            }

            //生成拥有者动态
            //change:by wuqh( 如果是群组中的动态,不生成拥有者动态)
            if (activity.OwnerType == ActivityOwnerTypes.Instance().Group() && activity.ReferenceId > 0)
                return;
            activityRepository.Insert(activity);
            //该类操作是否需要给用户推送动态
            if (!activityItem.IsUserReceived)
                return;

            //4、toMyInbox = true,也会加入自己的时间线(动态收件箱)
            if (toMyInbox)
            {
                //加入自己的时间线(动态收件箱)
                activityRepository.InsertUserInboxs(activity.ActivityId, new List<long> { activity.UserId });
            }

            //私有内容不推送给其他用户
            if (activity.IsPrivate)
                return;

            //5、通过IsReceiveActivity()检查,是否给该粉丝推送动态,推送时确保 ActivityId+UserId 已存在不再添加;
            IActivityReceiverGetter receiverGetter = DIContainer.ResolveNamed<IActivityReceiverGetter>(activity.OwnerType.ToString());
            IEnumerable<long> receiverUserIds = receiverGetter.GetReceiverUserIds(this, activity);
            activityRepository.InsertUserInboxs(activity.ActivityId, receiverUserIds);

            if (isPublic)
            {
                //推送给站点动态
                if (activityItem.IsSiteReceived && activity.OwnerType == ActivityOwnerTypes.Instance().User())
                    activityRepository.InsertSiteInbox(activity.ActivityId);
            }
        }
Пример #8
0
 /// <summary>
 /// 新建实体时使用
 /// </summary>
 public static Activity New()
 {
     Activity activity = new Activity()
     {
         OwnerName = string.Empty,
         DateCreated = DateTime.UtcNow,
         LastModified = DateTime.UtcNow,
         TenantTypeId = string.Empty,
         ReferenceTenantTypeId = string.Empty
     };
     return activity;
 }