diff --git a/src/main/java/cc/ryanc/halo/model/enums/BlogProperties.java b/src/main/java/cc/ryanc/halo/model/enums/BlogProperties.java index 845710312..3df748d65 100644 --- a/src/main/java/cc/ryanc/halo/model/enums/BlogProperties.java +++ b/src/main/java/cc/ryanc/halo/model/enums/BlogProperties.java @@ -71,6 +71,11 @@ public enum BlogProperties { */ COMMENT_REPLY_NOTICE("comment_reply_notice"), + /** + * 新评论是否需要审核 + */ + NEW_COMMENT_NEED_CHECK("new_comment_need_check"), + /** * 新评论通知 */ diff --git a/src/main/java/cc/ryanc/halo/repository/CommentRepository.java b/src/main/java/cc/ryanc/halo/repository/CommentRepository.java index 1182377c8..46b7e64c3 100644 --- a/src/main/java/cc/ryanc/halo/repository/CommentRepository.java +++ b/src/main/java/cc/ryanc/halo/repository/CommentRepository.java @@ -64,6 +64,15 @@ public interface CommentRepository extends JpaRepository { */ List findCommentsByPostAndCommentStatus(Post post, Integer status); + /** + * 根据文章和评论状态(为不查询的)查询评论 不分页 + * + * @param post post + * @param status status + * @return List + */ + List findCommentsByPostAndCommentStatusNot(Post post, Integer status); + /** * 查询最新的前五条评论 * diff --git a/src/main/java/cc/ryanc/halo/service/CommentService.java b/src/main/java/cc/ryanc/halo/service/CommentService.java index 3802171a8..fbc714c59 100644 --- a/src/main/java/cc/ryanc/halo/service/CommentService.java +++ b/src/main/java/cc/ryanc/halo/service/CommentService.java @@ -98,6 +98,15 @@ public interface CommentService { */ List findCommentsByPostAndCommentStatus(Post post, Integer status); + /** + * 根据文章和评论状态(为不查询的)查询评论 不分页 + * + * @param post post + * @param status status + * @return List + */ + List findCommentsByPostAndCommentStatusNot(Post post, Integer status); + /** * 查询最新的前五条评论 * diff --git a/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java index ca7786d32..10f257681 100644 --- a/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/CommentServiceImpl.java @@ -151,6 +151,18 @@ public class CommentServiceImpl implements CommentService { return commentRepository.findCommentsByPostAndCommentStatus(post, status); } + /** + * 根据文章和评论状态(为不查询的)查询评论 不分页 + * + * @param post post + * @param status status + * @return List + */ + @Override + public List findCommentsByPostAndCommentStatusNot(Post post, Integer status) { + return commentRepository.findCommentsByPostAndCommentStatusNot(post, status); + } + /** * 查询最新的前五条评论 * diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java index c157325fb..9813adf12 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java @@ -2,14 +2,14 @@ package cc.ryanc.halo.web.controller.front; import cc.ryanc.halo.model.domain.Comment; import cc.ryanc.halo.model.domain.Post; -import cc.ryanc.halo.model.enums.CommentStatus; -import cc.ryanc.halo.model.enums.PostStatus; -import cc.ryanc.halo.model.enums.PostType; +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.enums.*; import cc.ryanc.halo.service.CommentService; import cc.ryanc.halo.service.PostService; import cc.ryanc.halo.utils.CommentUtil; import cc.ryanc.halo.web.controller.core.BaseController; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -118,7 +118,12 @@ public class FrontArchiveController extends BaseController { if (null != afterPosts && afterPosts.size() > 0) { model.addAttribute("afterPost", afterPosts.get(afterPosts.size() - 1)); } - List comments = commentService.findCommentsByPostAndCommentStatus(post, CommentStatus.PUBLISHED.getCode()); + List comments = null; + if (StringUtils.equals(HaloConst.OPTIONS.get(BlogProperties.NEW_COMMENT_NEED_CHECK.getProp()), TrueFalse.TRUE.getDesc()) || HaloConst.OPTIONS.get(BlogProperties.NEW_COMMENT_NEED_CHECK.getProp()) == null) { + comments = commentService.findCommentsByPostAndCommentStatus(post, CommentStatus.PUBLISHED.getCode()); + } else { + comments = commentService.findCommentsByPostAndCommentStatusNot(post, CommentStatus.RECYCLE.getCode()); + } model.addAttribute("post", post); model.addAttribute("comments", CommentUtil.getComments(comments)); model.addAttribute("commentsCount", comments.size()); diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java index 0cd5b4faf..cca76dd16 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontCommentController.java @@ -78,10 +78,10 @@ public class FrontCommentController { @GetMapping(value = "/loadComment") @ResponseBody public List loadComment(@RequestParam(value = "page") Integer page, - @RequestParam(value = "post") Post post){ - Sort sort = new Sort(Sort.Direction.DESC,"commentDate"); - Pageable pageable = PageRequest.of(page-1,10,sort); - List comments = commentService.findCommentsByPostAndCommentStatus(post,pageable,CommentStatus.PUBLISHED.getCode()).getContent(); + @RequestParam(value = "post") Post post) { + Sort sort = new Sort(Sort.Direction.DESC, "commentDate"); + Pageable pageable = PageRequest.of(page - 1, 10, sort); + List comments = commentService.findCommentsByPostAndCommentStatus(post, pageable, CommentStatus.PUBLISHED.getCode()).getContent(); return comments; } @@ -96,15 +96,15 @@ public class FrontCommentController { @PostMapping(value = "/newComment") @ResponseBody public JsonResult newComment(@ModelAttribute("comment") Comment comment, - @ModelAttribute("post") Post post, - HttpServletRequest request) { + @ModelAttribute("post") Post post, + HttpServletRequest request) { if (StringUtils.equals(StringUtils.trim(comment.getCommentAuthor()), "")) { return new JsonResult(ResultCode.FAIL.getCode(), "请正确输入昵称!"); } if (StringUtils.equals(StringUtils.trim(comment.getCommentContent()), "")) { return new JsonResult(ResultCode.FAIL.getCode(), "请正确输入评论内容!"); } - try{ + try { Comment lastComment = null; post = postService.findByPostId(post.getPostId()).get(); comment.setCommentAuthorEmail(HtmlUtil.encode(comment.getCommentAuthorEmail()).toLowerCase()); @@ -113,34 +113,38 @@ public class FrontCommentController { comment.setCommentAuthorIp(ServletUtil.getClientIP(request)); comment.setIsAdmin(0); comment.setCommentAuthor(HtmlUtil.encode(comment.getCommentAuthor())); - if(comment.getCommentParent()>0){ + if (comment.getCommentParent() > 0) { lastComment = commentService.findCommentById(comment.getCommentParent()).get(); String lastContent = "@" + lastComment.getCommentAuthor() + ""; comment.setCommentContent(lastContent + StringUtils.substringAfter(OwoUtil.markToImg(HtmlUtil.encode(comment.getCommentContent())), ":")); - }else{ + } else { //将评论内容的字符专为安全字符 comment.setCommentContent(OwoUtil.markToImg(HtmlUtil.encode(comment.getCommentContent()))); } - if(StringUtils.isNotEmpty(comment.getCommentAuthorUrl())){ + if (StringUtils.isNotEmpty(comment.getCommentAuthorUrl())) { comment.setCommentAuthorUrl(URLUtil.formatUrl(comment.getCommentAuthorUrl())); } commentService.saveByComment(comment); - if(comment.getCommentParent()>0){ - new EmailToParent(comment,lastComment,post).start(); + if (comment.getCommentParent() > 0) { + new EmailToParent(comment, lastComment, post).start(); + new EmailToAdmin(comment, post).start(); + } else { new EmailToAdmin(comment, post).start(); - }else{ - new EmailToAdmin(comment,post).start(); } - return new JsonResult(ResultCode.SUCCESS.getCode(),"你的评论已经提交,待博主审核之后可显示。"); - }catch (Exception e){ - return new JsonResult(ResultCode.FAIL.getCode(),"评论失败!"); + if (StringUtils.equals(HaloConst.OPTIONS.get(BlogProperties.NEW_COMMENT_NEED_CHECK.getProp()), TrueFalse.TRUE.getDesc()) || HaloConst.OPTIONS.get(BlogProperties.NEW_COMMENT_NEED_CHECK.getProp()) == null) { + return new JsonResult(ResultCode.SUCCESS.getCode(), "你的评论已经提交,待博主审核之后可显示。"); + } else { + return new JsonResult(ResultCode.SUCCESS.getCode(), "你的评论已经提交,刷新后即可显示。"); + } + } catch (Exception e) { + return new JsonResult(ResultCode.FAIL.getCode(), "评论失败!"); } } /** * 发送邮件给博主 */ - class EmailToAdmin extends Thread{ + class EmailToAdmin extends Thread { private Comment comment; private Post post; @@ -148,8 +152,9 @@ public class FrontCommentController { this.comment = comment; this.post = post; } + @Override - public void run(){ + public void run() { if (StringUtils.equals(HaloConst.OPTIONS.get(BlogProperties.SMTP_EMAIL_ENABLE.getProp()), TrueFalse.TRUE.getDesc()) && StringUtils.equals(HaloConst.OPTIONS.get(BlogProperties.NEW_COMMENT_NOTICE.getProp()), TrueFalse.TRUE.getDesc())) { try { //发送邮件到博主 @@ -174,7 +179,7 @@ public class FrontCommentController { /** * 发送邮件给被评论方 */ - class EmailToParent extends Thread{ + class EmailToParent extends Thread { private Comment comment; private Comment lastComment; private Post post; @@ -189,22 +194,22 @@ public class FrontCommentController { public void run() { //发送通知给对方 if (StringUtils.equals(HaloConst.OPTIONS.get(BlogProperties.SMTP_EMAIL_ENABLE.getProp()), TrueFalse.TRUE.getDesc()) && StringUtils.equals(HaloConst.OPTIONS.get(BlogProperties.NEW_COMMENT_NOTICE.getProp()), TrueFalse.TRUE.getDesc())) { - if(Validator.isEmail(lastComment.getCommentAuthorEmail())){ + if (Validator.isEmail(lastComment.getCommentAuthorEmail())) { Map map = new HashMap<>(); - map.put("blogTitle",HaloConst.OPTIONS.get(BlogProperties.BLOG_TITLE.getProp())); - map.put("commentAuthor",lastComment.getCommentAuthor()); - map.put("pageName",lastComment.getPost().getPostTitle()); + map.put("blogTitle", HaloConst.OPTIONS.get(BlogProperties.BLOG_TITLE.getProp())); + map.put("commentAuthor", lastComment.getCommentAuthor()); + map.put("pageName", lastComment.getPost().getPostTitle()); if (StringUtils.equals(post.getPostType(), PostType.POST_TYPE_POST.getDesc())) { map.put("pageUrl", HaloConst.OPTIONS.get(BlogProperties.BLOG_URL.getProp()) + "/archives/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); } else { map.put("pageUrl", HaloConst.OPTIONS.get(BlogProperties.BLOG_URL.getProp()) + "/p/" + post.getPostUrl() + "#comment-id-" + comment.getCommentId()); } - map.put("commentContent",lastComment.getCommentContent()); - map.put("replyAuthor",comment.getCommentAuthor()); - map.put("replyContent",comment.getCommentContent()); - map.put("blogUrl",HaloConst.OPTIONS.get(BlogProperties.BLOG_URL.getProp())); + map.put("commentContent", lastComment.getCommentContent()); + map.put("replyAuthor", comment.getCommentAuthor()); + map.put("replyContent", comment.getCommentContent()); + map.put("blogUrl", HaloConst.OPTIONS.get(BlogProperties.BLOG_URL.getProp())); mailService.sendTemplateMail( - lastComment.getCommentAuthorEmail(),"您在"+HaloConst.OPTIONS.get(BlogProperties.BLOG_TITLE.getProp())+"的评论有了新回复",map,"common/mail/mail_reply.ftl"); + lastComment.getCommentAuthorEmail(), "您在" + HaloConst.OPTIONS.get(BlogProperties.BLOG_TITLE.getProp()) + "的评论有了新回复", map, "common/mail/mail_reply.ftl"); } } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java index 8c3e9a1e3..43e16c2b3 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java @@ -3,13 +3,17 @@ package cc.ryanc.halo.web.controller.front; import cc.ryanc.halo.model.domain.Comment; import cc.ryanc.halo.model.domain.Gallery; import cc.ryanc.halo.model.domain.Post; +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.enums.BlogProperties; import cc.ryanc.halo.model.enums.CommentStatus; import cc.ryanc.halo.model.enums.PostType; +import cc.ryanc.halo.model.enums.TrueFalse; import cc.ryanc.halo.service.CommentService; import cc.ryanc.halo.service.GalleryService; import cc.ryanc.halo.service.PostService; import cc.ryanc.halo.utils.CommentUtil; import cc.ryanc.halo.web.controller.core.BaseController; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -69,7 +73,12 @@ public class FrontPageController extends BaseController { if (null == post) { return this.renderNotFound(); } - List comments = commentService.findCommentsByPostAndCommentStatus(post, CommentStatus.PUBLISHED.getCode()); + List comments = null; + if (StringUtils.equals(HaloConst.OPTIONS.get(BlogProperties.NEW_COMMENT_NEED_CHECK.getProp()), TrueFalse.TRUE.getDesc()) || HaloConst.OPTIONS.get(BlogProperties.NEW_COMMENT_NEED_CHECK.getProp()) == null) { + comments = commentService.findCommentsByPostAndCommentStatus(post, CommentStatus.PUBLISHED.getCode()); + } else { + comments = commentService.findCommentsByPostAndCommentStatusNot(post, CommentStatus.RECYCLE.getCode()); + } model.addAttribute("post", post); model.addAttribute("comments", CommentUtil.getComments(comments)); model.addAttribute("commentsCount", comments.size()); diff --git a/src/main/resources/templates/admin/admin_option.ftl b/src/main/resources/templates/admin/admin_option.ftl index 4f9c33e1d..f880efc6e 100755 --- a/src/main/resources/templates/admin/admin_option.ftl +++ b/src/main/resources/templates/admin/admin_option.ftl @@ -232,6 +232,17 @@ +
+ +
+ + +
+
diff --git a/src/main/resources/templates/common/comment/_native_comment.ftl b/src/main/resources/templates/common/comment/_native_comment.ftl index 78abccae6..1080ea5ff 100644 --- a/src/main/resources/templates/common/comment/_native_comment.ftl +++ b/src/main/resources/templates/common/comment/_native_comment.ftl @@ -388,6 +388,7 @@ $(".native-message").fadeOut(1000); $("#btn-push").removeAttr("disabled"); $("#btn-push").html("提交"); + window.location.reload(); },1500); } });