public IActionResult Merge([FromForm] PostMergeRequestInputDtoBase dto) { var merge = PostMergeRequestService.GetById(dto.Id) ?? throw new NotFoundException("待合并文章未找到"); Mapper.Map(dto, merge); var b = PostMergeRequestService.SaveChanges() > 0; if (b) { return(Merge(merge.Id)); } return(ResultData(null, false, "文章合并失败!")); }
public ActionResult GetPageData(int page = 1, int size = 10, string kw = "") { Expression <Func <PostMergeRequest, bool> > where = r => true; if (!string.IsNullOrEmpty(kw)) { where = where.And(r => r.Title.Contains(kw) || r.Content.Contains(kw) || r.Modifier.Contains(kw) || r.ModifierEmail.Contains(kw)); } var list = PostMergeRequestService.GetQuery(where).OrderByDescending(d => d.MergeState == MergeStatus.Pending).ThenByDescending(r => r.Id).Skip((page - 1) * size).Take(size).ProjectTo <PostMergeRequestDtoBase>(MapperConfig).ToList(); var count = PostMergeRequestService.Count(where); var pageCount = Math.Ceiling(count * 1.0 / size).ToInt32(); return(PageResult(list, pageCount, count)); }
public ActionResult GetPageData(int page = 1, int size = 10, string kw = "") { Expression <Func <PostMergeRequest, bool> > where = r => true; if (!string.IsNullOrEmpty(kw)) { where = where.And(r => r.Title.Contains(kw) || r.Content.Contains(kw) || r.Modifier.Contains(kw) || r.ModifierEmail.Contains(kw)); } var list = PostMergeRequestService.GetQuery(where).OrderByDescending(d => d.MergeState == MergeStatus.Pending).ThenByDescending(r => r.Id).ToPagedList <PostMergeRequest, PostMergeRequestDtoBase>(page, size, MapperConfig); foreach (var item in list.Data) { item.SubmitTime = item.SubmitTime.ToTimeZone(HttpContext.Session.Get <string>(SessionKey.TimeZone)); } return(Ok(list)); }
public ActionResult Reject(int id, string reason) { var merge = PostMergeRequestService.GetById(id) ?? throw new NotFoundException("待合并文章未找到"); merge.MergeState = MergeStatus.Reject; var b = PostMergeRequestService.UpdateEntitySaved(merge); if (b) { string link = Request.Scheme + "://" + Request.Host + "/" + merge.Post.Id + "/merge/" + id; string content = System.IO.File.ReadAllText(HostingEnvironment.WebRootPath + "/template/merge-reject.html").Replace("{{link}}", link).Replace("{{title}}", merge.Post.Title).Replace("{{reason}}", reason); BackgroundJob.Enqueue(() => CommonHelper.SendMail(CommonHelper.SystemSettings["Title"] + "博客你提交的修改已被拒绝", content, merge.ModifierEmail)); return(ResultData(null, true, "合并已拒绝!")); } return(ResultData(null, false, "操作失败!")); }
public async Task <ActionResult> Reject(int id, string reason) { var merge = await PostMergeRequestService.GetByIdAsync(id) ?? throw new NotFoundException("待合并文章未找到"); merge.MergeState = MergeStatus.Reject; var b = await PostMergeRequestService.SaveChangesAsync() > 0; if (!b) { return(ResultData(null, false, "操作失败!")); } var link = Request.Scheme + "://" + Request.Host + "/" + merge.Post.Id + "/merge/" + id; var content = new Template(await System.IO.File.ReadAllTextAsync(HostEnvironment.WebRootPath + "/template/merge-reject.html")).Set("link", link).Set("title", merge.Post.Title).Set("reason", reason).Render(); BackgroundJob.Enqueue(() => CommonHelper.SendMail(CommonHelper.SystemSettings["Title"] + "博客你提交的修改已被拒绝", content, merge.ModifierEmail, "127.0.0.1")); return(ResultData(null, true, "合并已拒绝!")); }
public IActionResult Merge(int id) { var merge = PostMergeRequestService.GetById(id) ?? throw new NotFoundException("待合并文章未找到"); var history = merge.Post.Mapper <PostHistoryVersion>(); history.Id = 0; merge.Post = Mapper.Map(merge, merge.Post); merge.Post.PostHistoryVersion.Add(history); merge.Post.ModifyDate = DateTime.Now; merge.MergeState = MergeStatus.Merged; var b = PostMergeRequestService.UpdateEntitySaved(merge); if (b) { string link = Request.Scheme + "://" + Request.Host + "/" + merge.Post.Id; string content = System.IO.File.ReadAllText(HostingEnvironment.WebRootPath + "/template/merge-pass.html").Replace("{{link}}", link).Replace("{{title}}", merge.Post.Title); BackgroundJob.Enqueue(() => CommonHelper.SendMail(CommonHelper.SystemSettings["Title"] + "博客你提交的修改已通过", content, merge.ModifierEmail)); return(ResultData(null, true, "文章合并完成!")); } return(ResultData(null, false, "文章合并失败!")); }
public async Task <IActionResult> Merge(int id) { var merge = await PostMergeRequestService.GetByIdAsync(id) ?? throw new NotFoundException("待合并文章未找到"); var history = merge.Post.Mapper <PostHistoryVersion>(); history.Id = 0; merge.Post = Mapper.Map(merge, merge.Post); merge.Post.PostHistoryVersion.Add(history); merge.Post.ModifyDate = DateTime.Now; merge.MergeState = MergeStatus.Merged; var b = await PostMergeRequestService.SaveChangesAsync() > 0; if (!b) { return(ResultData(null, false, "文章合并失败!")); } string link = Request.Scheme + "://" + Request.Host + "/" + merge.Post.Id; string content = new Template(await System.IO.File.ReadAllTextAsync(HostEnvironment.WebRootPath + "/template/merge-pass.html")).Set("link", link).Set("title", merge.Post.Title).Render(); BackgroundJob.Enqueue(() => CommonHelper.SendMail(CommonHelper.SystemSettings["Title"] + "博客你提交的修改已通过", content, merge.ModifierEmail, "127.0.0.1")); return(ResultData(null, true, "文章合并完成!")); }
public ActionResult PushMerge(PostMergeRequestCommand dto) { if (RedisHelper.Get("code:" + dto.ModifierEmail) != dto.Code) { return(ResultData(null, false, "验证码错误!")); } var post = PostService.GetById(dto.PostId) ?? throw new NotFoundException("文章未找到"); var diff = new HtmlDiff.HtmlDiff(post.Content.RemoveHtmlTag(), dto.Content.RemoveHtmlTag()); if (post.Title.Equals(dto.Title) && !diff.Build().Contains(new[] { "diffmod", "diffdel", "diffins" })) { return(ResultData(null, false, "内容未被修改!")); } #region 合并验证 if (PostMergeRequestService.Any(p => p.ModifierEmail == dto.ModifierEmail && p.MergeState == MergeStatus.Block)) { return(ResultData(null, false, "由于您曾经多次恶意修改文章,已经被标记为黑名单,无法修改任何文章,如有疑问,请联系网站管理员进行处理。")); } if (post.PostMergeRequests.Any(p => p.ModifierEmail == dto.ModifierEmail && p.MergeState == MergeStatus.Pending)) { return(ResultData(null, false, "您已经提交过一次修改请求正在待处理,暂不能继续提交修改请求!")); } #endregion #region 直接合并 if (post.Email.Equals(dto.ModifierEmail)) { var history = post.Mapper <PostHistoryVersion>(); Mapper.Map(dto, post); post.PostHistoryVersion.Add(history); post.ModifyDate = DateTime.Now; return(PostService.SaveChanges() > 0 ? ResultData(null, true, "你是文章原作者,无需审核,文章已自动更新并在首页展示!") : ResultData(null, false, "操作失败!")); } #endregion var merge = post.PostMergeRequests.FirstOrDefault(r => r.Id == dto.Id && r.MergeState != MergeStatus.Merged); if (merge != null) { Mapper.Map(dto, merge); merge.SubmitTime = DateTime.Now; merge.MergeState = MergeStatus.Pending; } else { merge = Mapper.Map <PostMergeRequest>(dto); post.PostMergeRequests.Add(merge); } var b = PostService.SaveChanges() > 0; if (!b) { return(ResultData(null, false, "操作失败!")); } RedisHelper.Expire("code:" + dto.ModifierEmail, 1); MessageService.AddEntitySaved(new InternalMessage() { Title = $"来自【{dto.Modifier}】的文章修改合并请求", Content = dto.Title, Link = "#/merge/compare?id=" + merge.Id }); var content = new Template(System.IO.File.ReadAllText(HostEnvironment.WebRootPath + "/template/merge-request.html")).Set("title", post.Title).Set("link", Url.Action("Index", "Dashboard", new { }, Request.Scheme) + "#/merge/compare?id=" + merge.Id).Render(); BackgroundJob.Enqueue(() => CommonHelper.SendMail("博客文章修改请求:", content, CommonHelper.SystemSettings["ReceiveEmail"])); return(ResultData(null, true, "您的修改请求已提交,已进入审核状态,感谢您的参与!")); }
public ActionResult Get(int id) { return(ResultData(Mapper.Map <PostMergeRequestOutputDto>(PostMergeRequestService.GetById(id)))); }