Example #1
0
 /// <summary>
 /// 逻辑删除
 /// </summary>
 /// <param name="eventOperationType"></param>
 /// <returns></returns>
 public static string LogicalDelete(this EventOperationType eventOperationType)
 {
     return("LogicalDelete");
 }
Example #2
0
        /// <summary>
        /// 更新审核状态
        /// </summary>
        /// <param name="threadId">待被更新的主题帖Id</param>
        /// <param name="isApproved">是否通过审核</param>
        public void UpdateAuditStatus(long threadId, bool isApproved)
        {
            BarThread   thread      = barThreadRepository.Get(threadId);
            AuditStatus auditStatus = isApproved ? AuditStatus.Success : AuditStatus.Fail;

            if (thread.AuditStatus == auditStatus)
            {
                return;
            }
            AuditStatus oldAuditStatus = thread.AuditStatus;

            thread.AuditStatus = auditStatus;
            barThreadRepository.Update(thread);
            string operationType = isApproved ? EventOperationType.Instance().Approved() : EventOperationType.Instance().Disapproved();

            EventBus <BarThread> .Instance().OnAfter(thread, new CommonEventArgs(operationType));

            EventBus <BarThread, AuditEventArgs> .Instance().OnAfter(thread, new AuditEventArgs(oldAuditStatus, thread.AuditStatus));
        }
Example #3
0
        /// <summary>
        /// 批量设置精华
        /// </summary>
        /// <param name="threadIds">待被更新的主题帖Id集合</param>
        /// <param name="isEssential">是否设为精华</param>
        public void BatchSetEssential(IEnumerable <long> threadIds, bool isEssential)
        {
            IEnumerable <BarThread> threads = GetBarThreads(threadIds);
            string operationType            = isEssential ? EventOperationType.Instance().SetEssential() : EventOperationType.Instance().CancelEssential();

            foreach (var thread in threads)
            {
                if (thread.IsEssential == isEssential)
                {
                    continue;
                }
                thread.IsEssential = isEssential;
                barThreadRepository.Update(thread);


                EventBus <BarThread> .Instance().OnAfter(thread, new CommonEventArgs(operationType));
            }
        }
Example #4
0
        /// <summary>
        /// 更新ContentItem
        /// </summary>
        /// <param name="contentItem"></param>
        public void Update(ContentItem contentItem)
        {
            //执行事件
            EventBus <ContentItem> .Instance().OnBefore(contentItem, new CommonEventArgs(EventOperationType.Instance().Update()));

            AuditStatus prevAuditStatus = contentItem.AuditStatus;

            //设置审核状态
            AuditService auditService = new AuditService();

            auditService.ChangeAuditStatusForUpdate(contentItem.UserId, contentItem);
            if (contentItem.AdditionalProperties.Get <bool>("FirstAsTitleImage", false))
            {
                IEnumerable <Attachment> attachments = new AttachmentService(TenantTypeIds.Instance().ContentItem()).GetsByAssociateId(contentItem.ContentItemId);
                Attachment fristImage = attachments.Where(n => n.MediaType == MediaType.Image).FirstOrDefault();
                if (fristImage != null)
                {
                    contentItem.FeaturedImageAttachmentId = fristImage.AttachmentId;
                    contentItem.FeaturedImage             = fristImage.GetRelativePath() + "\\" + fristImage.FileName;
                }
            }
            contentItemRepository.Update(contentItem);

            //执行事件
            EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(EventOperationType.Instance().Update(), ApplicationIds.Instance().CMS()));

            EventBus <ContentItem, AuditEventArgs> .Instance().OnAfter(contentItem, new AuditEventArgs(prevAuditStatus, contentItem.AuditStatus));
        }
Example #5
0
        /// <summary>
        /// 设置精华
        /// </summary>
        /// <param name="threadId">主题帖Id</param>
        /// <param name="isEssential">是否设为精华</param>
        public void SetEssential(long threadId, bool isEssential)
        {
            BarThread thread = barThreadRepository.Get(threadId);

            if (thread.IsEssential == isEssential)
            {
                return;
            }
            thread.IsEssential = isEssential;
            barThreadRepository.Update(thread);



            string operationType = isEssential ? EventOperationType.Instance().SetEssential() : EventOperationType.Instance().CancelEssential();

            EventBus <BarThread> .Instance().OnAfter(thread, new CommonEventArgs(operationType));
        }
Example #6
0
        /// <summary>
        /// 设置/取消 精华
        /// </summary>
        /// <param name="contentItemId"></param>
        /// <param name="isEssential"></param>
        public void SetEssential(long contentItemId, bool isEssential)
        {
            ContentItem contentItem = contentItemRepository.Get(contentItemId);

            if (contentItem != null && contentItem.IsEssential != isEssential)
            {
                contentItem.IsEssential = isEssential;
                contentItemRepository.Update(contentItem);

                //执行事件
                if (isEssential)
                {
                    EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(EventOperationType.Instance().SetEssential(), ApplicationIds.Instance().CMS()));
                }
                else
                {
                    EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(EventOperationType.Instance().CancelEssential(), ApplicationIds.Instance().CMS()));
                }
            }
        }
Example #7
0
        /// <summary>
        /// 设置审核设置
        /// </summary>
        public void UpdateAuditStatus(long contentItemId, bool isApproved)
        {
            AuditStatus auditStatus = isApproved ? AuditStatus.Success : AuditStatus.Fail;

            ContentItem contentItem   = contentItemRepository.Get(contentItemId);
            string      operationType = isApproved ? EventOperationType.Instance().Approved() : EventOperationType.Instance().Disapproved();

            if (contentItem != null && contentItem.AuditStatus != auditStatus)
            {
                AuditStatus oldAuditStatus = contentItem.AuditStatus;
                contentItem.AuditStatus = auditStatus;

                contentItemRepository.Update(contentItem);

                //触发事件
                EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(operationType, ApplicationIds.Instance().CMS()));

                EventBus <ContentItem, AuditEventArgs> .Instance().OnAfter(contentItem, new AuditEventArgs(oldAuditStatus, auditStatus));
            }
        }
Example #8
0
        /// <summary>
        /// 发布回答
        /// </summary>
        /// <remarks>
        /// 1.每个回答者针对每个问题只能回答一次,创建回答前需做重复检查
        /// 2.注意维护相关问题的回答数,AnswerCount++
        /// 3.注意需要在EventModule中处理动态、积分、通知、自动关注(回答者自动关注该问题)
        /// 4.注意使用AuditService.ChangeAuditStatusForCreate设置审核状态;
        /// 5.注意调用AttachmentService转换临时附件;
        /// 6.需要触发的事件:1)Create的OnBefore、OnAfter;2)审核状态变更;
        /// </remarks>
        /// <param name="answer">回答实体</param>
        /// <returns>是否创建成功</returns>
        public bool CreateAnswer(AskAnswer answer)
        {
            //先查询当前用户是否已经回答了指定问题
            if (GetUserAnswerByQuestionId(answer.UserId, answer.QuestionId) == null)
            {
                EventBus <AskAnswer> .Instance().OnBefore(answer, new CommonEventArgs(EventOperationType.Instance().Create()));

                //设置审核状态
                new AuditService().ChangeAuditStatusForCreate(answer.UserId, answer);

                askAnswerRepository.Insert(answer);

                if (answer.AnswerId > 0)
                {
                    //维护相关问题的内容
                    AskQuestion question = askQuestionRepository.Get(answer.QuestionId);
                    question.LastAnswerUserId = answer.UserId;
                    question.LastAnswerAuthor = answer.Author;
                    question.LastAnswerDate   = answer.DateCreated;
                    question.AnswerCount++;

                    //调用Service中的Update方法,以触发相应的事件,但是不更新审核状态
                    this.UpdateQuestion(question, false);

                    //将临时附件转换为正式附件
                    AttachmentService attachmentService = new AttachmentService(TenantTypeIds.Instance().AskAnswer());
                    attachmentService.ToggleTemporaryAttachments(answer.UserId, TenantTypeIds.Instance().AskAnswer(), answer.AnswerId);

                    //用户回答数计数
                    OwnerDataService ownerDataService = new OwnerDataService(TenantTypeIds.Instance().User());
                    ownerDataService.Change(answer.UserId, OwnerDataKeys.Instance().AnswerCount(), 1);

                    EventBus <AskAnswer> .Instance().OnAfter(answer, new CommonEventArgs(EventOperationType.Instance().Create()));

                    EventBus <AskAnswer, AuditEventArgs> .Instance().OnAfter(answer, new AuditEventArgs(null, answer.AuditStatus));
                }
            }

            return(answer.AnswerId > 0);
        }
Example #9
0
        /// <summary>
        /// 管理员审核问题
        /// </summary>
        /// <remarks>
        /// 1.审核状态未变化不用进行任何操作;
        /// 2.审核状态的变化影响动态的生成与删除、积分的变化
        /// 3.需要触发的事件:1) 批准或不批准;2) 审核状态变更;
        /// </remarks>
        /// <param name="questiongId">问题id</param>
        /// <param name="isApproved">是否通过审核</param>
        public void ApproveQuestion(long questiongId, bool isApproved)
        {
            AskQuestion question        = askQuestionRepository.Get(questiongId);
            AuditStatus prevAuditStatus = question.AuditStatus;
            AuditStatus auditStatus     = AuditStatus.Fail;

            if (isApproved)
            {
                auditStatus = AuditStatus.Success;
            }
            if (question.AuditStatus != auditStatus)
            {
                question.AuditStatus = auditStatus;

                this.UpdateQuestion(question, false);

                string eventOperationType = isApproved ? EventOperationType.Instance().Approved() : EventOperationType.Instance().Disapproved();
                EventBus <AskQuestion> .Instance().OnAfter(question, new CommonEventArgs(eventOperationType));

                EventBus <AskQuestion, AuditEventArgs> .Instance().OnAfter(question, new AuditEventArgs(prevAuditStatus, question.AuditStatus));
            }
        }
Example #10
0
        /// <summary>
        /// 删除问题
        /// </summary>
        /// <remarks>
        /// 1.只有管理员可删除问题,已解决问题的积分不返还,未解决的问题应该解除冻结积分,通过EventModule处理;
        /// 2.注意需要删除动态,通过EventModule处理;
        /// 3.注意需要扣除发布问题时增加的积分,通过EventModule处理;
        /// 4.注意需要删除所有用户对该问题的关注,通过EventModule处理;
        /// 5.注意删除与标签的关联,其它数据的删除由各模块自动处理
        /// 6.需要触发的事件:1)Delete的OnBefore、OnAfter;2)审核状态变更
        /// </remarks>
        /// <param name="question">问题实体</param>
        public void DeleteQuestion(AskQuestion question)
        {
            EventBus <AskQuestion> .Instance().OnBefore(question, new CommonEventArgs(EventOperationType.Instance().Delete()));

            //删除与标签的关联
            TagService tagService = new TagService(TenantTypeIds.Instance().AskQuestion());

            tagService.ClearTagsFromItem(question.QuestionId, question.UserId);

            //删除问题的所有回答
            int pageSize  = 100;
            int pageIndex = 1;
            int pageCount = 1;

            do
            {
                PagingDataSet <AskAnswer> answers = this.GetAnswersByQuestionId(question.QuestionId, SortBy_AskAnswer.DateCreated_Desc, pageSize, pageIndex);
                foreach (AskAnswer answer in answers)
                {
                    this.DeleteAnswer(answer);
                }
                pageCount = answers.PageCount;
                pageIndex++;
            } while (pageIndex <= pageCount);

            //删除问题
            askQuestionRepository.Delete(question);

            OwnerDataService ownerDataService = new OwnerDataService(TenantTypeIds.Instance().User());

            ownerDataService.Change(question.UserId, OwnerDataKeys.Instance().QuestionCount(), -1);

            EventBus <AskQuestion> .Instance().OnAfter(question, new CommonEventArgs(EventOperationType.Instance().Delete()));

            EventBus <AskQuestion, AuditEventArgs> .Instance().OnAfter(question, new AuditEventArgs(question.AuditStatus, null));
        }
Example #11
0
        /// <summary>
        /// 设置/取消精华问题(管理员操作)
        /// </summary>
        /// <remarks>
        /// 1.精华状态未变化不用进行任何操作
        /// 2.在EventModule里处理积分
        /// 3.需要触发的事件:加精或取消精华SetEssential的OnAfter
        /// </remarks>
        /// <param name="question">问题实体</param>
        /// <param name="isEssential">是否精华</param>
        public void SetEssential(AskQuestion question, bool isEssential)
        {
            if (question.IsEssential != isEssential)
            {
                askQuestionRepository.SetEssential(question, isEssential);

                string eventOperationType = isEssential ? EventOperationType.Instance().SetEssential() : EventOperationType.Instance().CancelEssential();
                EventBus <AskQuestion> .Instance().OnAfter(question, new CommonEventArgs(eventOperationType));
            }
        }
Example #12
0
        /// <summary>
        /// 添加敏感词
        /// </summary>
        /// <param name="words">敏感词集合</param>
        /// <param name="typeId">敏感词类型Id</param>
        public void BatchCreate(IList <string> words, int?typeId)
        {
            if (words == null)
            {
                return;
            }

            words = words.Distinct().ToList();

            List <SensitiveWord> sensitiveWords = new List <SensitiveWord>();

            foreach (string word in words)
            {
                SensitiveWord sensitiveWord = SensitiveWord.New();
                if (word.Contains("="))
                {
                    string[] parts = word.Split('=');

                    if (parts.Count() == 2)
                    {
                        sensitiveWord.Word        = parts[0];
                        sensitiveWord.Replacement = parts[1];
                    }
                }
                else
                {
                    sensitiveWord.Word        = word;
                    sensitiveWord.Replacement = "*";
                }

                if (typeId.HasValue)
                {
                    sensitiveWord.TypeId = typeId.Value;
                }

                sensitiveWords.Add(sensitiveWord);
            }

            EventBus <SensitiveWord> .Instance().OnBatchBefore(sensitiveWords, new CommonEventArgs(EventOperationType.Instance().Create()));

            sensitiveWordRepository.BatchInsert(sensitiveWords);
            EventBus <SensitiveWord> .Instance().OnBatchAfter(sensitiveWords, new CommonEventArgs(EventOperationType.Instance().Create()));
        }
Example #13
0
        /// <summary>
        /// 添加敏感词
        /// </summary>
        /// <param name="sensitiveWord">敏感词实体类型</param>
        public int Create(SensitiveWord sensitiveWord)
        {
            EventBus <SensitiveWord> .Instance().OnBefore(sensitiveWord, new CommonEventArgs(EventOperationType.Instance().Create()));

            int judge = sensitiveWordRepository.Create(sensitiveWord);

            EventBus <SensitiveWord> .Instance().OnAfter(sensitiveWord, new CommonEventArgs(EventOperationType.Instance().Create()));

            return(judge);
        }
Example #14
0
 /// <summary>
 /// 恢复删除的词条
 /// </summary>
 /// <param name="eventOperationType"></param>
 /// <returns></returns>
 public static string Restore(this EventOperationType eventOperationType)
 {
     return("Restore");
 }
Example #15
0
        /// <summary>
        /// 删除ContentItem
        /// </summary>
        /// <param name="contentItem"></param>
        public void Delete(ContentItem contentItem)
        {
            if (contentItem != null)
            {
                //执行事件
                EventBus <ContentItem> .Instance().OnBefore(contentItem, new CommonEventArgs(EventOperationType.Instance().Delete()));

                contentItemRepository.Delete(contentItem);
                //用户投稿计数-1
                OwnerDataService ownerDataService = new OwnerDataService(TenantTypeIds.Instance().User());
                ownerDataService.Change(contentItem.UserId, OwnerDataKeys.Instance().ContributeCount(), -1);

                //删除标签关联
                TagService tagService = new TagService(TenantTypeIds.Instance().ContentItem());
                tagService.ClearTagsFromItem(contentItem.ContentItemId, contentItem.UserId);
                //删除评论
                CommentService commentService = new CommentService();
                commentService.DeleteCommentedObjectComments(contentItem.ContentItemId);
                //执行事件
                EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(EventOperationType.Instance().Delete(), ApplicationIds.Instance().CMS()));

                EventBus <ContentItem, AuditEventArgs> .Instance().OnAfter(contentItem, new AuditEventArgs(contentItem.AuditStatus, null));
            }
        }
Example #16
0
        /// <summary>
        /// 管理员审核回答
        /// </summary>
        /// <remarks>
        /// 1.审核状态未变化不用进行任何操作;
        /// 2.审核状态的变化影响动态的生成与删除、积分的变化
        /// 3.需要触发的事件:1) 批准或不批准;2) 审核状态变更;
        /// </remarks>
        /// <param name="answerId">问题id</param>
        /// <param name="isApproved">是否通过审核</param>
        public void ApproveAnswer(long answerId, bool isApproved)
        {
            AskAnswer   answer          = askAnswerRepository.Get(answerId);
            AuditStatus prevAuditStatus = answer.AuditStatus;
            AuditStatus auditStatus     = AuditStatus.Fail;

            if (isApproved)
            {
                auditStatus = AuditStatus.Success;
            }
            if (answer.AuditStatus != auditStatus)
            {
                answer.AuditStatus = auditStatus;

                this.UpdateAnswer(answer, false);

                string eventOperationType = isApproved ? EventOperationType.Instance().Approved() : EventOperationType.Instance().Disapproved();
                EventBus <AskAnswer> .Instance().OnAfter(answer, new CommonEventArgs(eventOperationType));

                EventBus <AskAnswer, AuditEventArgs> .Instance().OnAfter(answer, new AuditEventArgs(prevAuditStatus, answer.AuditStatus));
            }
        }
Example #17
0
        /// <summary>
        /// 批量移动ContentItem
        /// </summary>
        /// <param name="contentItemIds"></param>
        /// <param name="toContentFolderId"></param>
        public void Move(IEnumerable <long> contentItemIds, int toContentFolderId)
        {
            ContentFolderService contentFolderService = new ContentFolderService();

            ContentFolder toContentFolder = contentFolderService.Get(toContentFolderId);

            if (toContentFolder == null)
            {
                return;
            }

            contentItemIds = contentItemIds.Distinct();
            IEnumerable <ContentItem> contentItemsForMove = contentItemRepository.PopulateEntitiesByEntityIds(contentItemIds).Where(c => c.ContentFolderId != toContentFolderId);

            contentItemRepository.Move(contentItemsForMove, toContentFolderId);
            foreach (var contentItem in contentItemsForMove)
            {
                //执行事件
                EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(EventOperationType.Instance().Update(), ApplicationIds.Instance().CMS()));
            }
        }
Example #18
0
        /// <summary>
        /// 发布问题
        /// </summary>
        /// <remarks>
        /// 1.用户提问时,悬赏的积分会被冻结,需要先扣除相应的用户积分;同时发布问题会产生新积分
        /// 2.注意在EventModule中处理动态、积分、通知、自动关注(提问者自动关注该问题);
        /// 3.使用AuditService.ChangeAuditStatusForCreate设置审核状态;
        /// 4.注意调用AttachmentService转换临时附件;
        /// 5.需要触发的事件:1)Create的OnBefore、OnAfter;2)审核状态变更;
        /// </remarks>
        /// <param name="question">问题实体</param>
        /// <returns>是否创建成功</returns>
        public bool CreateQuestion(AskQuestion question)
        {
            EventBus <AskQuestion> .Instance().OnBefore(question, new CommonEventArgs(EventOperationType.Instance().Create()));

            //设置审核状态
            new AuditService().ChangeAuditStatusForCreate(question.UserId, question);

            askQuestionRepository.Insert(question);
            if (question.QuestionId > 0)
            {
                //将临时附件转换为正式附件
                AttachmentService attachmentService = new AttachmentService(TenantTypeIds.Instance().AskQuestion());
                attachmentService.ToggleTemporaryAttachments(question.UserId, TenantTypeIds.Instance().AskQuestion(), question.QuestionId);

                //用户计数
                OwnerDataService ownerDataService = new OwnerDataService(TenantTypeIds.Instance().User());
                ownerDataService.Change(question.UserId, OwnerDataKeys.Instance().QuestionCount(), 1);

                AtUserService atUserService = new AtUserService(TenantTypeIds.Instance().AskQuestion());
                atUserService.ResolveBodyForEdit(question.Body, question.UserId, question.QuestionId);


                EventBus <AskQuestion> .Instance().OnAfter(question, new CommonEventArgs(EventOperationType.Instance().Create()));

                EventBus <AskQuestion, AuditEventArgs> .Instance().OnAfter(question, new AuditEventArgs(null, question.AuditStatus));
            }

            return(question.QuestionId > 0);
        }
Example #19
0
        /// <summary>
        /// 设置置顶
        /// </summary>
        /// <param name="contentItemId"></param>
        /// <param name="isGlobalSticky"></param>
        /// <param name="globalStickyDate"></param>
        /// <param name="isFolderSticky"></param>
        /// <param name="folderStickyDate"></param>
        public void SetSticky(long contentItemId, bool isGlobalSticky, DateTime globalStickyDate, bool isFolderSticky, DateTime folderStickyDate)
        {
            ContentItem contentItem = contentItemRepository.Get(contentItemId);

            if (contentItem == null)
            {
                return;
            }
            string eventOperationTypeGlobal = string.Empty;

            if (contentItem.IsGlobalSticky != isGlobalSticky)
            {
                contentItem.IsGlobalSticky   = isGlobalSticky;
                contentItem.GlobalStickyDate = ValueUtility.GetSafeSqlDateTime(globalStickyDate);
                eventOperationTypeGlobal     = isGlobalSticky ? EventOperationType.Instance().SetGlobalSticky() : EventOperationType.Instance().CancelGlobalSticky();
            }
            string eventOperationTypeFolder = string.Empty;

            if (contentItem.IsFolderSticky != isFolderSticky)
            {
                contentItem.IsFolderSticky   = isFolderSticky;
                contentItem.FolderStickyDate = ValueUtility.GetSafeSqlDateTime(folderStickyDate);
                eventOperationTypeFolder     = isFolderSticky ? EventOperationType.Instance().SetFolderSticky() : EventOperationType.Instance().CancelFolderSticky();
            }

            contentItemRepository.Update(contentItem);

            if (!string.IsNullOrEmpty(eventOperationTypeGlobal))
            {//执行事件
                EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(eventOperationTypeGlobal, ApplicationIds.Instance().CMS()));
            }
            if (!string.IsNullOrEmpty(eventOperationTypeFolder))
            {//执行事件
                EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(eventOperationTypeFolder, ApplicationIds.Instance().CMS()));
            }
        }
Example #20
0
        /// <summary>
        /// 编辑问题
        /// </summary>
        /// <remarks>
        /// 1.使用AuditService.ChangeAuditStatusForUpdate设置审核状态;
        /// 2.Repository更新时不处理:IsEssential
        /// 3.需要触发的事件:Update的OnBefore、OnAfter;
        /// </remarks>
        /// <param name="question">问题实体</param>
        /// <param name="changeAuditStatusForUpdate">是否更新审核状态</param>
        public void UpdateQuestion(AskQuestion question, bool changeAuditStatusForUpdate = true)
        {
            AskQuestion question_beforeUpDate = GetQuestion(question.QuestionId);

            if (question.Reward != question_beforeUpDate.Reward && question.Reward < (question.User.TradePoints + question_beforeUpDate.Reward))
            {
                question.AddedReward = question.Reward - question_beforeUpDate.Reward;
            }
            else
            {
                question.AddedReward = 0;
            }

            EventBus <AskQuestion> .Instance().OnBefore(question, new CommonEventArgs(EventOperationType.Instance().Update()));

            AuditStatus prevAuditStatus = question.AuditStatus;

            //设置审核状态
            if (changeAuditStatusForUpdate)
            {
                new AuditService().ChangeAuditStatusForUpdate(question.UserId, question);
            }

            askQuestionRepository.Update(question);

            AtUserService atUserService = new AtUserService(TenantTypeIds.Instance().AskQuestion());

            atUserService.ResolveBodyForEdit(question.Body, question.UserId, question.QuestionId);

            EventBus <AskQuestion> .Instance().OnAfter(question, new CommonEventArgs(EventOperationType.Instance().Update()));

            EventBus <AskQuestion, AuditEventArgs> .Instance().OnAfter(question, new AuditEventArgs(prevAuditStatus, question.AuditStatus));
        }
Example #21
0
        /// <summary>
        /// 创建ContentItem
        /// </summary>
        /// <param name="contentItem"></param>
        public void Create(ContentItem contentItem)
        {
            //设置审核状态
            if (contentItem.IsContributed && contentItem.ContentFolder != null && contentItem.ContentFolder.NeedAuditing)
            {
                new AuditService().ChangeAuditStatusForCreate(contentItem.UserId, contentItem);
            }
            else
            {
                contentItem.AuditStatus = AuditStatus.Success;
            }

            //执行事件
            EventBus <ContentItem> .Instance().OnBefore(contentItem, new CommonEventArgs(EventOperationType.Instance().Create()));

            contentItemRepository.Insert(contentItem);
            //转换临时附件
            AttachmentService attachmentService = new AttachmentService(TenantTypeIds.Instance().ContentItem());

            attachmentService.ToggleTemporaryAttachments(contentItem.UserId, TenantTypeIds.Instance().ContentItem(), contentItem.ContentItemId);
            if (contentItem.AdditionalProperties.Get <bool>("FirstAsTitleImage", false))
            {
                IEnumerable <Attachment> attachments = new AttachmentService(TenantTypeIds.Instance().ContentItem()).GetsByAssociateId(contentItem.ContentItemId);
                Attachment fristImage = attachments.Where(n => n.MediaType == MediaType.Image).FirstOrDefault();
                if (fristImage != null)
                {
                    contentItem.FeaturedImageAttachmentId = fristImage.AttachmentId;
                    contentItem.FeaturedImage             = fristImage.GetRelativePath() + "\\" + fristImage.FileName;
                }
            }
            //用户投稿计数+1
            OwnerDataService ownerDataService = new OwnerDataService(TenantTypeIds.Instance().User());

            ownerDataService.Change(contentItem.UserId, OwnerDataKeys.Instance().ContributeCount(), 1);
            //执行事件
            EventBus <ContentItem> .Instance().OnAfter(contentItem, new CommonEventArgs(EventOperationType.Instance().Create(), ApplicationIds.Instance().CMS()));

            EventBus <ContentItem, AuditEventArgs> .Instance().OnAfter(contentItem, new AuditEventArgs(null, contentItem.AuditStatus));
        }
Example #22
0
        void AutoMaintainBarSectionModule_After(TopicEntity sender, CommonEventArgs eventArgs)
        {
            BarSectionService barSectionService = new BarSectionService();

            if (eventArgs.EventOperationType == EventOperationType.Instance().Create())
            {
                BarSection barSection = BarSection.New();

                barSection.TenantTypeId         = TenantTypeIds.Instance().Topic();
                barSection.SectionId            = sender.TopicId;
                barSection.OwnerId              = sender.TopicId;
                barSection.UserId               = sender.UserId;
                barSection.Name                 = sender.TopicName;
                barSection.IsEnabled            = true;
                barSection.LogoImage            = sender.Logo;
                barSection.ThreadCategoryStatus = ThreadCategoryStatus.NotForceEnabled;
                barSectionService.Create(barSection, sender.UserId, null, null);
            }
            else if (eventArgs.EventOperationType == EventOperationType.Instance().Update())
            {
                BarSection barSection = barSectionService.Get(sender.TopicId);
                barSection.UserId    = sender.UserId;
                barSection.Name      = sender.TopicName;
                barSection.LogoImage = sender.Logo;

                IList <long> managerIds = null;
                if (barSection.SectionManagers != null)
                {
                    managerIds = barSection.SectionManagers.Select(n => n.UserId).ToList();
                }
                barSectionService.Update(barSection, sender.UserId, managerIds, null);
            }
            else if (eventArgs.EventOperationType == EventOperationType.Instance().Approved() || eventArgs.EventOperationType == EventOperationType.Instance().Disapproved())
            {
                BarSection barSection = barSectionService.Get(sender.TopicId);
                barSection.AuditStatus = sender.AuditStatus;
                IList <long> managerIds = null;
                if (barSection.SectionManagers != null)
                {
                    managerIds = barSection.SectionManagers.Select(n => n.UserId).ToList();
                }
                barSectionService.Update(barSection, sender.UserId, managerIds, null);
            }
            else
            {
                barSectionService.Delete(sender.TopicId);
            }
        }
Example #23
0
        /// <summary>
        /// 照片审核触发的事件
        /// </summary>
        private void PhotoPointModule_After(Photo photo, AuditEventArgs eventArgs)
        {
            AuditService auditService = new AuditService();

            string pointItemKey       = string.Empty;
            string eventOperationType = string.Empty;

            bool?auditDirection = auditService.ResolveAuditDirection(eventArgs.OldAuditStatus, eventArgs.NewAuditStatus);

            if (auditDirection == true) //加积分
            {
                pointItemKey = PointItemKeys.Instance().Photo_UploadPhoto();
                if (eventArgs.OldAuditStatus == null)
                {
                    eventOperationType = EventOperationType.Instance().Create();
                }
                else
                {
                    eventOperationType = EventOperationType.Instance().Approved();
                }
            }
            else if (auditDirection == false) //减积分
            {
                pointItemKey = PointItemKeys.Instance().Photo_DeletePhoto();
                if (eventArgs.NewAuditStatus == null)
                {
                    eventOperationType = EventOperationType.Instance().Delete();
                }
                else
                {
                    eventOperationType = EventOperationType.Instance().Disapproved();
                }
            }

            if (!string.IsNullOrEmpty(pointItemKey))
            {
                string description = string.Format(ResourceAccessor.GetString("PointRecord_Pattern_" + eventOperationType), "照片", HtmlUtility.TrimHtml(photo.Description, 64));
                pointService.GenerateByRole(photo.UserId, pointItemKey, description, eventOperationType == EventOperationType.Instance().Create() || eventOperationType == EventOperationType.Instance().Delete() && eventArgs.OperatorInfo.OperatorUserId == photo.UserId);
            }
        }
Example #24
0
        /// <summary>
        /// 帖吧申请处理结果通知
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventArgs"></param>
        void BarSectionNoticeEventModule_After(BarSection sender, CommonEventArgs eventArgs)
        {
            if (eventArgs.EventOperationType == EventOperationType.Instance().Approved() || eventArgs.EventOperationType == EventOperationType.Instance().Disapproved())
            {
                IUserService  userService   = DIContainer.Resolve <IUserService>();
                NoticeService noticeService = DIContainer.Resolve <NoticeService>();
                User          toUser        = userService.GetFullUser(sender.UserId);
                if (toUser == null)
                {
                    return;
                }
                Notice notice = Notice.New();
                notice.UserId             = sender.UserId;
                notice.ApplicationId      = BarConfig.Instance().ApplicationId;
                notice.TypeId             = NoticeTypeIds.Instance().Reply();
                notice.LeadingActorUserId = sender.UserId;
                notice.LeadingActor       = toUser.DisplayName;
                notice.LeadingActorUrl    = SiteUrls.FullUrl(SiteUrls.Instance().SpaceHome(toUser.UserName));
                notice.RelativeObjectId   = sender.SectionId;
                notice.RelativeObjectName = HtmlUtility.TrimHtml(sender.Name, 64);
                if (eventArgs.EventOperationType == EventOperationType.Instance().Approved())
                {
                    //通知吧主,其申请的帖吧通过了审核
                    notice.TemplateName = NoticeTemplateNames.Instance().ManagerApproved();
                }
                else
                {
                    //通知吧主,其申请的帖吧未通过审核
                    notice.TemplateName = NoticeTemplateNames.Instance().ManagerDisapproved();
                }

                notice.RelativeObjectUrl = SiteUrls.FullUrl(SiteUrls.Instance().SectionDetail(sender.SectionId));
                noticeService.Create(notice);
            }
            else if (eventArgs.EventOperationType == EventOperationType.Instance().Delete())
            {
                SubscribeService   subscribeService = new SubscribeService(TenantTypeIds.Instance().BarSection());
                IEnumerable <long> userIds          = subscribeService.GetTopUserIdsOfObject(sender.SectionId, int.MaxValue);

                foreach (long userId in userIds)
                {
                    subscribeService.CancelSubscribe(sender.SectionId, userId);
                }
            }
        }
Example #25
0
        /// <summary>
        /// 设置置顶
        /// </summary>
        /// <param name="threadId">待操作的主题帖Id</param>
        /// <param name="isSticky">待更新至的置顶状态</param>
        /// <param name="stickyDate">设为置顶时,需设置置顶时间;取消置顶时,不需要设置此参数</param>
        public void SetSticky(long threadId, bool isSticky, DateTime?stickyDate = null)
        {
            BarThread thread = barThreadRepository.Get(threadId);

            if (thread.IsSticky == isSticky)
            {
                return;
            }
            thread.IsSticky = isSticky;
            //设为置顶时,设置置顶时间
            if (isSticky)
            {
                thread.StickyDate = stickyDate ?? DateTime.UtcNow.AddDays(7);
            }
            barThreadRepository.Update(thread);



            string operationType = isSticky ? EventOperationType.Instance().SetSticky() : EventOperationType.Instance().CancelSticky();

            EventBus <BarThread> .Instance().OnAfter(thread, new CommonEventArgs(operationType));
        }
Example #26
0
        /// <summary>
        /// 删除被屏蔽对象
        /// </summary>
        /// <param name="id">Id</param>
        public bool Delete(long id)
        {
            UserBlockedObject userBlockedObject = userBlockRepository.Get(id);

            EventBus <UserBlockedObject> .Instance().OnBefore(userBlockedObject, new CommonEventArgs(EventOperationType.Instance().Delete()));

            if (userBlockedObject != null && userBlockRepository.Delete(userBlockedObject) > 0)
            {
                EventBus <UserBlockedObject> .Instance().OnAfter(userBlockedObject, new CommonEventArgs(EventOperationType.Instance().Delete()));

                return(true);
            }
            return(false);
        }
Example #27
0
        /// <summary>
        /// 批量更新审核状态
        /// </summary>
        /// <param name="threadIds">待被更新的主题帖Id集合</param>
        /// <param name="isApproved">是否通过审核</param>
        public void BatchUpdateAuditStatus(IEnumerable <long> threadIds, bool isApproved)
        {
            IEnumerable <BarThread> threads     = GetBarThreads(threadIds);
            AuditStatus             auditStatus = isApproved ? AuditStatus.Success : AuditStatus.Fail;
            string operationType = isApproved ? EventOperationType.Instance().Approved() : EventOperationType.Instance().Disapproved();

            foreach (var thread in threads)
            {
                if (thread.AuditStatus == auditStatus)
                {
                    continue;
                }
                AuditStatus oldAuditStatus = thread.AuditStatus;
                thread.AuditStatus = auditStatus;
                barThreadRepository.Update(thread);



                EventBus <BarThread> .Instance().OnAfter(thread, new CommonEventArgs(operationType));

                EventBus <BarThread, AuditEventArgs> .Instance().OnAfter(thread, new AuditEventArgs(oldAuditStatus, thread.AuditStatus));
            }
        }
Example #28
0
        /// <summary>
        /// 添加屏蔽对象
        /// </summary>
        /// <param name="userId">屏蔽人UserId</param>
        /// <param name="objectType">被屏蔽对象类型</param>
        /// <param name="objectId">被屏蔽对象Id</param>
        /// <param name="objectName">被屏蔽对象名称</param>
        public bool Create(long userId, int objectType, long objectId, string objectName)
        {
            //在Repository添加被屏蔽对象时,需要检查userId +  objectType + objectId 是否已存在,如果已存在则不添加
            UserBlockedObject userBlockedObject = new UserBlockedObject
            {
                ObjectId    = objectId,
                ObjectName  = objectName,
                ObjectType  = objectType,
                UserId      = userId,
                DateCreated = DateTime.UtcNow
            };

            EventBus <UserBlockedObject> .Instance().OnBefore(userBlockedObject, new CommonEventArgs(EventOperationType.Instance().Create()));

            if (IsBlocked(userId, objectType, objectId))
            {
                return(false);
            }
            object blockId = userBlockRepository.Insert(userBlockedObject) ?? 0;

            if (Convert.ToInt64(blockId) > 0)
            {
                EventBus <UserBlockedObject> .Instance().OnAfter(userBlockedObject, new CommonEventArgs(EventOperationType.Instance().Create()));

                return(true);
            }
            return(false);
        }
Example #29
0
        /// <summary>
        /// 批量设置置顶
        /// </summary>
        /// <param name="threadIds">待被更新的主题帖Id集合</param>
        /// <param name="isSticky">是否置顶</param>
        /// <param name="stickyDate">置顶时间</param>
        public void BatchSetSticky(IEnumerable <long> threadIds, bool isSticky, DateTime stickyDate)
        {
            IEnumerable <BarThread> threads = GetBarThreads(threadIds);
            string operationType            = isSticky ? EventOperationType.Instance().SetSticky() : EventOperationType.Instance().CancelSticky();

            foreach (var thread in threads)
            {
                if (thread.IsSticky == isSticky)
                {
                    continue;
                }

                thread.IsSticky = isSticky;
                //设为置顶时,设置置顶时间
                if (isSticky)
                {
                    thread.StickyDate = stickyDate;
                }
                barThreadRepository.Update(thread);


                EventBus <BarThread> .Instance().OnAfter(thread, new CommonEventArgs(operationType));
            }
        }
Example #30
0
 /// <summary>
 /// 解锁
 /// </summary>
 /// <param name="eventOperationType"></param>
 /// <returns></returns>
 public static string CancelLock(this EventOperationType eventOperationType)
 {
     return("CancelLock");
 }