public ExpandoObject Comment(CommentSaveModel model) { dynamic o = new ExpandoObject(); var currentMemberId = Members.GetCurrentMemberId(); var c = new Comment(); c.Body = model.Body; c.MemberId = currentMemberId; c.Created = DateTime.Now; c.ParentCommentId = model.Parent; c.TopicId = model.Topic; c.IsSpam = c.DetectSpam(); CommentService.Save(c); if (c.IsSpam) AntiSpam.SpamChecker.SendSlackSpamReport(c.Body, c.TopicId, "comment", c.MemberId); o.id = c.Id; o.body = c.Body.Sanitize().ToString(); o.topicId = c.TopicId; o.authorId = c.MemberId; o.created = c.Created.ConvertToRelativeTime(); var author = Members.GetById(currentMemberId); o.authorKarma = author.Karma(); o.authorName = author.Name; o.roles = System.Web.Security.Roles.GetRolesForUser(); o.cssClass = model.Parent > 0 ? "level-2" : string.Empty; o.parent = model.Parent; return o; }
public void Delete(Comment comment) { var eventArgs = new CommentEventArgs() { Comment = comment }; if (Deleting.RaiseAndContinue(this, eventArgs)) { UpdateTopicPostsCount(comment, false); _databaseContext.Database.Delete(comment); Deleted.Raise(this, eventArgs); } else CancelledByEvent.Raise(this, eventArgs); }
/* Crud */ public Comment Save(Comment comment, bool updateTopicPostCount = true) { var newComment = comment.Id <= 0; var eventArgs = new CommentEventArgs() { Comment = comment }; if (newComment) Creating.Raise(this, eventArgs); else Updating.Raise(this, eventArgs); if (!eventArgs.Cancel) { //save comment _databaseContext.Database.Save(comment); //topic post count if(updateTopicPostCount) UpdateTopicPostsCount(comment); //parent comment state if (comment.ParentCommentId > 0) { var p = GetById(comment.ParentCommentId); if (p != null) p.HasChildren = true; Save(p); } if (newComment) Created.Raise(this, eventArgs); else Updated.Raise(this, eventArgs); } else { CancelledByEvent.Raise(this, eventArgs); } return comment; }
private void UpdateTopicPostsCount(Comment c, bool adding = true) { var ts = _topicService; var t = ts.GetById(c.TopicId); t.Replies = adding ? t.Replies + 1 : t.Replies - 1; t.Updated = DateTime.Now; if (adding) t.LatestReplyAuthor = c.MemberId; ts.Save(t); }