/// <summary> /// 逻辑删除 /// </summary> /// <param name="eventOperationType"></param> /// <returns></returns> public static string LogicalDelete(this EventOperationType eventOperationType) { return("LogicalDelete"); }
/// <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)); }
/// <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)); } }
/// <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)); }
/// <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)); }
/// <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())); } } }
/// <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)); } }
/// <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); }
/// <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)); } }
/// <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)); }
/// <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)); } }
/// <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())); }
/// <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); }
/// <summary> /// 恢复删除的词条 /// </summary> /// <param name="eventOperationType"></param> /// <returns></returns> public static string Restore(this EventOperationType eventOperationType) { return("Restore"); }
/// <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)); } }
/// <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)); } }
/// <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())); } }
/// <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); }
/// <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())); } }
/// <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)); }
/// <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)); }
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); } }
/// <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); } }
/// <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); } } }
/// <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)); }
/// <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); }
/// <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)); } }
/// <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); }
/// <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)); } }
/// <summary> /// 解锁 /// </summary> /// <param name="eventOperationType"></param> /// <returns></returns> public static string CancelLock(this EventOperationType eventOperationType) { return("CancelLock"); }