public async Task <IActionResult> Post([FromRoute] uint id, CommentPostRequest req) { if (!ModelState.IsValid) { return(BadRequest()); } IssuePost post = (await Db.IssuePosts.AddAsync(new IssuePost() { AuthorId = HttpContext.User.IsAnonymous() ? null : new uint?((uint)HttpContext.User.GetUserId()), IssueId = id, ContainedText = req.Text, DateOfCreation = DateTime.UtcNow })).Entity; await Db.IssueActivities.AddIssueActivity(HttpContext, id, new PostActivity() { ContainedText = req.Text, Post = post }); await Db.SaveChangesAsync(); return(RedirectToAction("ViewTalk", "Issue", new { id = id }, post.Id.ToString())); }
public async Task <IActionResult> Comment([FromRoute] string path, CommentPostRequest req) { if (!ModelState.IsValid) { return(Forbid()); } var page = await Db.Infopages.SingleAsync(x => x.Path == path.Replace("%2F", "/", true, CultureInfo.InvariantCulture)); if (!HttpContext.UserCan("kb.secrecy." + page.Secrecy.ToString())) { return(Forbid()); } InfopageComment post = (await Db.InfopageComments.AddAsync(new InfopageComment() { AuthorId = HttpContext.User.IsAnonymous() ? null : new uint?((uint)HttpContext.User.GetUserId()), Infopage = page, ContainedText = req.Text, DateOfCreation = DateTime.UtcNow })).Entity; await Db.KBActivities.AddKBActivity(HttpContext, page.Id, new CommentActivity() { Comment = post, ContainedText = req.Text }); await Db.SaveChangesAsync(); return(RedirectToAction("ViewTalk", "KnowledgeBase", new { path = path.Replace("%2F", "/", true, CultureInfo.InvariantCulture) }, post.Id.ToString())); }
public async Task <IActionResult> EditComment([FromRoute] uint id, CommentPostRequest req) { InfopageComment comment = await Db.InfopageComments .Include(x => x.Infopage) .SingleAsync(x => x.Id == id); if (!HttpContext.UserCan("kb.editcomment.all") && !(HttpContext.UserCan("kb.editcomment.own") && ((int?)comment.AuthorId ?? -1) == HttpContext.User.GetUserId())) { if (HttpContext.User.IsAnonymous()) { return(Challenge()); } else { return(Forbid()); } } if (!ModelState.IsValid) { return(View(comment)); } if (!HttpContext.UserCan("kb.secrecy." + comment.Infopage.Secrecy.ToString())) { return(Forbid()); } await Db.KBActivities.AddKBActivity(HttpContext, comment.Infopage.Id, new EditCommentActivity() { CommentId = id, OldContainedText = comment.ContainedText, NewContainedText = req.Text }); comment.DateOfEdit = DateTime.UtcNow; comment.ContainedText = req.Text; await Db.SaveChangesAsync(); return(RedirectToAction("ViewTalk", "KnowledgeBase", new { path = comment.Infopage.Path }, comment.Id.ToString())); }
public async Task <IActionResult> EditPost([FromRoute] uint id, CommentPostRequest req) { if (!ModelState.IsValid) { return(BadRequest()); } IssuePost post = await Db.IssuePosts.FindAsync(id); if (!HttpContext.UserCan("issue.editpost.all") && !(HttpContext.UserCan("issue.editpost.own") && ((int?)post.AuthorId ?? -1) == HttpContext.User.GetUserId())) { if (HttpContext.User.IsAnonymous()) { return(Challenge()); } else { return(Forbid()); } } if (post.ContainedText != req.Text) { await Db.IssueActivities.AddIssueActivity(HttpContext, id, new EditPostActivity() { OldContainedText = post.ContainedText, NewContainedText = req.Text, PostId = id }); post.DateOfEdit = DateTime.UtcNow; post.ContainedText = req.Text; await Db.SaveChangesAsync(); } return(RedirectToAction("ViewTalk", "Issue", new { id = post.IssueId }, post.Id.ToString())); }