private async Task ResolveMentionsAsync(CommentModel comment, IntranetEntityTypeEnum activityType) { var mentionIds = _mentionService.GetMentions(comment.Text).ToList(); var isActivity = activityType.Is(IntranetEntityTypeEnum.Events, IntranetEntityTypeEnum.News, IntranetEntityTypeEnum.Social); if (mentionIds.Any()) { UintraLinkModel url; if (isActivity) { url = await _commentLinkHelper.GetDetailsUrlWithCommentAsync(comment.ActivityId, comment.Id); } else { var content = _nodeModelService.AsEnumerable().FirstOrDefault(x => x.Key == comment.ActivityId); url = _commentLinkHelper.GetDetailsUrlWithComment(content, comment.Id); } _mentionService.ProcessMention(new MentionModel { MentionedSourceId = comment.Id, CreatorId = await _intranetMemberService.GetCurrentMemberIdAsync(), MentionedUserIds = mentionIds, Title = comment.Text.StripMentionHtml().TrimByWordEnd(50), Url = url, ActivityType = CommunicationTypeEnum.CommunicationSettings }); } }
public async Task <CommentsOverviewModel> Delete(Guid targetId, IntranetEntityTypeEnum targetType, Guid commentId) { var comment = await _commentsService.GetAsync(commentId); if (!_commentsService.CanDelete(comment, await _intranetMemberService.GetCurrentMemberIdAsync())) { return(await _commentsHelper.OverViewAsync(comment.ActivityId)); } var command = new RemoveCommentCommand(targetId, targetType, commentId); _commandPublisher.Publish(command); switch (targetType) { case IntranetEntityTypeEnum type when type.Is(IntranetEntityTypeEnum.News, IntranetEntityTypeEnum.Social, IntranetEntityTypeEnum.Events): var activityCommentsInfo = GetActivityComments(targetId); return(await _commentsHelper.OverViewAsync(activityCommentsInfo.Id, activityCommentsInfo.Comments, activityCommentsInfo.IsReadOnly)); default: return(await _commentsHelper.OverViewAsync(comment.ActivityId)); } }
public async Task <IHttpActionResult> AddLike([FromUri] Guid entityId, [FromUri] IntranetEntityTypeEnum entityType) { if (!await CanAddRemoveLikeAsync(entityId, entityType)) { return(StatusCode(HttpStatusCode.Forbidden)); } var command = new AddLikeCommand(entityId, entityType, await _intranetMemberService.GetCurrentMemberIdAsync()); _commandPublisher.Publish(command); switch (entityType) { case IntranetEntityTypeEnum.Comment: return(Ok(await _likesService.GetLikeModelsAsync(entityId))); case IntranetEntityTypeEnum.ContentPage: return(Ok(await _likesService.GetLikeModelsAsync(entityId))); case IntranetEntityTypeEnum type when type.Is(IntranetEntityTypeEnum.News, IntranetEntityTypeEnum.Social, IntranetEntityTypeEnum.Events): var activityLikeInfo = GetActivityLikes(entityId); return(Ok(activityLikeInfo.Likes)); default: throw new IndexOutOfRangeException(); } }
private async Task <bool> CanAddRemoveLikeAsync(Guid entityId, IntranetEntityTypeEnum entityType) { if (entityType.Is(IntranetEntityTypeEnum.Social, IntranetEntityTypeEnum.News, IntranetEntityTypeEnum.Events)) { var member = await _intranetMemberService.GetCurrentMemberAsync(); var activityGroupId = _groupActivityService.GetGroupId(entityId); if (activityGroupId.HasValue) { var group = _groupService.Get(activityGroupId.Value); if (group == null || group.IsHidden) { return(false); } } if (activityGroupId.HasValue && !member.GroupIds.Contains(activityGroupId.Value)) { return(false); } } else if (entityType.Is(IntranetEntityTypeEnum.Comment)) { var comment = await _commentsService.GetAsync(entityId); var activityType = _activityTypeHelper.GetActivityType(comment.ActivityId); return(await CanAddRemoveLikeAsync(comment.ActivityId, (IntranetEntityTypeEnum)activityType)); } return(true); }
public async Task <IEnumerable <LikeModel> > RemoveLike(Guid entityId, IntranetEntityTypeEnum entityType) { if (await CanAddRemoveLikeAsync(entityId, entityType)) { var command = new RemoveLikeCommand(entityId, entityType, await _intranetMemberService.GetCurrentMemberIdAsync()); _commandPublisher.Publish(command); } switch (entityType) { case IntranetEntityTypeEnum.Comment: return(await _likesService.GetLikeModelsAsync(entityId)); case IntranetEntityTypeEnum.ContentPage: return(await _likesService.GetLikeModelsAsync(entityId)); case IntranetEntityTypeEnum type when type.Is(IntranetEntityTypeEnum.News, IntranetEntityTypeEnum.Social, IntranetEntityTypeEnum.Events): var activityLikeInfo = GetActivityLikes(entityId); return(activityLikeInfo.Likes); default: throw new IndexOutOfRangeException(); } }
private async Task OnCommentEditedAsync(Guid commentId, IntranetEntityTypeEnum activityType) { var comment = await _commentsService.GetAsync(commentId); await ResolveMentionsAsync(comment, activityType); }