From 3a143620dde4e3caee2fd0113bbca26550b1a005 Mon Sep 17 00:00:00 2001 From: ruibaby Date: Fri, 23 Nov 2018 20:48:44 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E7=AB=A0=E6=94=AF=E6=8C=81=E4=BF=AE=E6=94=B9=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/CommentController.java | 4 +- .../web/controller/admin/PageController.java | 285 +----------------- .../web/controller/admin/PostController.java | 17 +- .../templates/admin/admin_page_md_editor.ftl | 23 +- .../templates/admin/admin_post_md_editor.ftl | 35 ++- 5 files changed, 68 insertions(+), 296 deletions(-) diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java index a50d22ac4..7f4489e30 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/CommentController.java @@ -156,13 +156,13 @@ public class CommentController extends BaseController { HttpServletRequest request, HttpSession session) { try { - Post post = postService.findByPostId(postId).get(); + Post post = postService.findByPostId(postId).orElse(new Post()); //博主信息 User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); //被回复的评论 - Comment lastComment = commentService.findCommentById(commentId).get(); + Comment lastComment = commentService.findCommentById(commentId).orElse(new Comment()); //修改被回复的评论的状态 lastComment.setCommentStatus(CommentStatusEnum.PUBLISHED.getCode()); diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java index 918258449..369e26556 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/PageController.java @@ -1,284 +1 @@ -package cc.ryanc.halo.web.controller.admin; - -import cc.ryanc.halo.model.domain.*; -import cc.ryanc.halo.model.dto.HaloConst; -import cc.ryanc.halo.model.dto.JsonResult; -import cc.ryanc.halo.model.dto.LogsRecord; -import cc.ryanc.halo.model.enums.BlogPropertiesEnum; -import cc.ryanc.halo.model.enums.PostTypeEnum; -import cc.ryanc.halo.model.enums.ResultCodeEnum; -import cc.ryanc.halo.service.GalleryService; -import cc.ryanc.halo.service.LinkService; -import cc.ryanc.halo.service.LogsService; -import cc.ryanc.halo.service.PostService; -import cc.ryanc.halo.utils.HaloUtils; -import cc.ryanc.halo.utils.LocaleMessageUtil; -import cc.ryanc.halo.utils.MarkdownUtils; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.extra.servlet.ServletUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import java.util.List; -import java.util.Optional; - -/** - *
- *     后台页面管理控制器
- * 
- * - * @author : RYAN0UP - * @date : 2017/12/10 - */ -@Slf4j -@Controller -@RequestMapping(value = "/admin/page") -public class PageController { - - @Autowired - LocaleMessageUtil localeMessageUtil; - @Autowired - private LinkService linkService; - @Autowired - private GalleryService galleryService; - @Autowired - private PostService postService; - @Autowired - private LogsService logsService; - @Autowired - private HttpServletRequest request; - - /** - * 页面管理页面 - * - * @param model model - * @return 模板路径admin/admin_page - */ - @GetMapping - public String pages(Model model) { - List posts = postService.findAllPosts(PostTypeEnum.POST_TYPE_PAGE.getDesc()); - model.addAttribute("pages", posts); - return "admin/admin_page"; - } - - /** - * 获取友情链接列表并渲染页面 - * - * @return 模板路径admin/admin_page_link - */ - @GetMapping(value = "/links") - public String links() { - return "admin/admin_page_link"; - } - - /** - * 跳转到修改页面 - * - * @param model model - * @param linkId linkId 友情链接编号 - * @return String 模板路径admin/admin_page_link - */ - @GetMapping(value = "/links/edit") - public String toEditLink(Model model, @RequestParam("linkId") Long linkId) { - Optional link = linkService.findByLinkId(linkId); - model.addAttribute("updateLink", link.get()); - return "admin/admin_page_link"; - } - - /** - * 处理添加/修改友链的请求并渲染页面 - * - * @param link Link实体 - * @return 重定向到/admin/page/links - */ - @PostMapping(value = "/links/save") - public String saveLink(@ModelAttribute Link link) { - try { - linkService.saveByLink(link); - } catch (Exception e) { - log.error("Save/modify friendship link failed: {}", e.getMessage()); - } - return "redirect:/admin/page/links"; - } - - /** - * 处理删除友情链接的请求并重定向 - * - * @param linkId 友情链接编号 - * @return 重定向到/admin/page/links - */ - @GetMapping(value = "/links/remove") - public String removeLink(@RequestParam("linkId") Long linkId) { - try { - linkService.removeByLinkId(linkId); - } catch (Exception e) { - log.error("Deleting a friendship link failed: {}", e.getMessage()); - } - return "redirect:/admin/page/links"; - } - - /** - * 图库管理 - * - * @param model model - * @param page 当前页码 - * @param size 每页显示的条数 - * @return 模板路径admin/admin_page_gallery - */ - @GetMapping(value = "/galleries") - public String gallery(Model model, - @RequestParam(value = "page", defaultValue = "0") Integer page, - @RequestParam(value = "size", defaultValue = "18") Integer size) { - Sort sort = new Sort(Sort.Direction.DESC, "galleryId"); - Pageable pageable = PageRequest.of(page, size, sort); - Page galleries = galleryService.findAllGalleries(pageable); - model.addAttribute("galleries", galleries); - return "admin/admin_page_gallery"; - } - - /** - * 保存图片 - * - * @param gallery gallery - * @return 重定向到/admin/page/gallery - */ - @PostMapping(value = "/gallery/save") - public String saveGallery(@ModelAttribute Gallery gallery) { - try { - if (StrUtil.isEmpty(gallery.getGalleryThumbnailUrl())) { - gallery.setGalleryThumbnailUrl(gallery.getGalleryUrl()); - } - galleryService.saveByGallery(gallery); - } catch (Exception e) { - e.printStackTrace(); - } - return "redirect:/admin/page/galleries"; - } - - /** - * 处理获取图片详情的请求 - * - * @param model model - * @param galleryId 图片编号 - * @return 模板路径admin/widget/_gallery-detail - */ - @GetMapping(value = "/gallery") - public String gallery(Model model, @RequestParam("galleryId") Long galleryId) { - Optional gallery = galleryService.findByGalleryId(galleryId); - model.addAttribute("gallery", gallery.get()); - return "admin/widget/_gallery-detail"; - } - - /** - * 删除图库中的图片 - * - * @param galleryId 图片编号 - * @return JsonResult - */ - @GetMapping(value = "/gallery/remove") - @ResponseBody - public JsonResult removeGallery(@RequestParam("galleryId") Long galleryId) { - try { - galleryService.removeByGalleryId(galleryId); - } catch (Exception e) { - log.error("Failed to delete image: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-failed")); - } - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-success")); - } - - /** - * 跳转到新建页面 - * - * @param model model - * @return 模板路径admin/admin_page_md_editor - */ - @GetMapping(value = "/new") - public String newPage(Model model) { - List customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp())); - model.addAttribute("customTpls",customTpls); - return "admin/admin_page_md_editor"; - } - - /** - * 发表页面 - * - * @param post post - * @param session session - */ - @PostMapping(value = "/new/push") - @ResponseBody - public JsonResult pushPage(@ModelAttribute Post post, HttpSession session) { - String msg = localeMessageUtil.getMessage("code.admin.common.save-success"); - try { - post.setPostDate(DateUtil.date()); - //发表用户 - User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); - post.setUser(user); - post.setPostType(PostTypeEnum.POST_TYPE_PAGE.getDesc()); - if (null != post.getPostId()) { - post.setPostViews(postService.findByPostId(post.getPostId()).get().getPostViews()); - post.setPostDate(postService.findByPostId(post.getPostId()).get().getPostDate()); - post.setPostUpdate(DateUtil.date()); - msg = localeMessageUtil.getMessage("code.admin.common.update-success"); - } else { - post.setPostDate(DateUtil.date()); - post.setPostUpdate(DateUtil.date()); - } - post.setPostContent(MarkdownUtils.renderMarkdown(post.getPostContentMd())); - //当没有选择文章缩略图的时候,自动分配一张内置的缩略图 - if (StrUtil.equals(post.getPostThumbnail(), BlogPropertiesEnum.DEFAULT_THUMBNAIL.getProp())) { - post.setPostThumbnail("/static/images/thumbnail/thumbnail-" + RandomUtil.randomInt(1, 10) + ".jpg"); - } - postService.saveByPost(post); - logsService.saveByLogs(new Logs(LogsRecord.PUSH_PAGE, post.getPostTitle(), ServletUtil.getClientIP(request), DateUtil.date())); - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), msg); - } catch (Exception e) { - log.error("Save page failed: {}", e.getMessage()); - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed")); - } - } - - /** - * 跳转到修改页面 - * - * @param pageId 页面编号 - * @param model model - * @return admin/admin_page_md_editor - */ - @GetMapping(value = "/edit") - public String editPage(@RequestParam("pageId") Long pageId, Model model) { - Optional post = postService.findByPostId(pageId); - List customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp())); - model.addAttribute("post", post.get()); - model.addAttribute("customTpls",customTpls); - return "admin/admin_page_md_editor"; - } - - /** - * 检查该路径是否已经存在 - * - * @param postUrl postUrl - * @return JsonResult - */ - @GetMapping(value = "/checkUrl") - @ResponseBody - public JsonResult checkUrlExists(@RequestParam("postUrl") String postUrl) { - Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_PAGE.getDesc()); - if (null != post) { - return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists")); - } - return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), ""); - } -} +package cc.ryanc.halo.web.controller.admin; import cc.ryanc.halo.model.domain.*; import cc.ryanc.halo.model.dto.HaloConst; import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.dto.LogsRecord; import cc.ryanc.halo.model.enums.BlogPropertiesEnum; import cc.ryanc.halo.model.enums.PostTypeEnum; import cc.ryanc.halo.model.enums.ResultCodeEnum; import cc.ryanc.halo.service.GalleryService; import cc.ryanc.halo.service.LinkService; import cc.ryanc.halo.service.LogsService; import cc.ryanc.halo.service.PostService; import cc.ryanc.halo.utils.HaloUtils; import cc.ryanc.halo.utils.LocaleMessageUtil; import cc.ryanc.halo.utils.MarkdownUtils; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.servlet.ServletUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Optional; /** *
 *     后台页面管理控制器
 * 
* * @author : RYAN0UP * @date : 2017/12/10 */ @Slf4j @Controller @RequestMapping(value = "/admin/page") public class PageController { @Autowired LocaleMessageUtil localeMessageUtil; @Autowired private LinkService linkService; @Autowired private GalleryService galleryService; @Autowired private PostService postService; @Autowired private LogsService logsService; @Autowired private HttpServletRequest request; /** * 页面管理页面 * * @param model model * @return 模板路径admin/admin_page */ @GetMapping public String pages(Model model) { List posts = postService.findAllPosts(PostTypeEnum.POST_TYPE_PAGE.getDesc()); model.addAttribute("pages", posts); return "admin/admin_page"; } /** * 获取友情链接列表并渲染页面 * * @return 模板路径admin/admin_page_link */ @GetMapping(value = "/links") public String links() { return "admin/admin_page_link"; } /** * 跳转到修改页面 * * @param model model * @param linkId linkId 友情链接编号 * @return String 模板路径admin/admin_page_link */ @GetMapping(value = "/links/edit") public String toEditLink(Model model, @RequestParam("linkId") Long linkId) { Optional link = linkService.findByLinkId(linkId); model.addAttribute("updateLink", link.get()); return "admin/admin_page_link"; } /** * 处理添加/修改友链的请求并渲染页面 * * @param link Link实体 * @return 重定向到/admin/page/links */ @PostMapping(value = "/links/save") public String saveLink(@ModelAttribute Link link) { try { linkService.saveByLink(link); } catch (Exception e) { log.error("Save/modify friendship link failed: {}", e.getMessage()); } return "redirect:/admin/page/links"; } /** * 处理删除友情链接的请求并重定向 * * @param linkId 友情链接编号 * @return 重定向到/admin/page/links */ @GetMapping(value = "/links/remove") public String removeLink(@RequestParam("linkId") Long linkId) { try { linkService.removeByLinkId(linkId); } catch (Exception e) { log.error("Deleting a friendship link failed: {}", e.getMessage()); } return "redirect:/admin/page/links"; } /** * 图库管理 * * @param model model * @param page 当前页码 * @param size 每页显示的条数 * @return 模板路径admin/admin_page_gallery */ @GetMapping(value = "/galleries") public String gallery(Model model, @RequestParam(value = "page", defaultValue = "0") Integer page, @RequestParam(value = "size", defaultValue = "18") Integer size) { Sort sort = new Sort(Sort.Direction.DESC, "galleryId"); Pageable pageable = PageRequest.of(page, size, sort); Page galleries = galleryService.findAllGalleries(pageable); model.addAttribute("galleries", galleries); return "admin/admin_page_gallery"; } /** * 保存图片 * * @param gallery gallery * @return 重定向到/admin/page/gallery */ @PostMapping(value = "/gallery/save") public String saveGallery(@ModelAttribute Gallery gallery) { try { if (StrUtil.isEmpty(gallery.getGalleryThumbnailUrl())) { gallery.setGalleryThumbnailUrl(gallery.getGalleryUrl()); } galleryService.saveByGallery(gallery); } catch (Exception e) { e.printStackTrace(); } return "redirect:/admin/page/galleries"; } /** * 处理获取图片详情的请求 * * @param model model * @param galleryId 图片编号 * @return 模板路径admin/widget/_gallery-detail */ @GetMapping(value = "/gallery") public String gallery(Model model, @RequestParam("galleryId") Long galleryId) { Optional gallery = galleryService.findByGalleryId(galleryId); model.addAttribute("gallery", gallery.get()); return "admin/widget/_gallery-detail"; } /** * 删除图库中的图片 * * @param galleryId 图片编号 * @return JsonResult */ @GetMapping(value = "/gallery/remove") @ResponseBody public JsonResult removeGallery(@RequestParam("galleryId") Long galleryId) { try { galleryService.removeByGalleryId(galleryId); } catch (Exception e) { log.error("Failed to delete image: {}", e.getMessage()); return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-failed")); } return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.common.delete-success")); } /** * 跳转到新建页面 * * @param model model * @return 模板路径admin/admin_page_md_editor */ @GetMapping(value = "/new") public String newPage(Model model) { List customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp())); model.addAttribute("customTpls",customTpls); return "admin/admin_page_md_editor"; } /** * 发表页面 * * @param post post * @param session session */ @PostMapping(value = "/new/push") @ResponseBody public JsonResult pushPage(@ModelAttribute Post post, HttpSession session) { String msg = localeMessageUtil.getMessage("code.admin.common.save-success"); try { //发表用户 User user = (User) session.getAttribute(HaloConst.USER_SESSION_KEY); post.setUser(user); post.setPostType(PostTypeEnum.POST_TYPE_PAGE.getDesc()); if (null != post.getPostId()) { Post oldPost = postService.findByPostId(post.getPostId()).get(); if (null == post.getPostDate()) { post.setPostDate(DateUtil.date()); } post.setPostViews(oldPost.getPostViews()); msg = localeMessageUtil.getMessage("code.admin.common.update-success"); } else { post.setPostDate(DateUtil.date()); } post.setPostUpdate(DateUtil.date()); post.setPostContent(MarkdownUtils.renderMarkdown(post.getPostContentMd())); //当没有选择文章缩略图的时候,自动分配一张内置的缩略图 if (StrUtil.equals(post.getPostThumbnail(), BlogPropertiesEnum.DEFAULT_THUMBNAIL.getProp())) { post.setPostThumbnail("/static/images/thumbnail/thumbnail-" + RandomUtil.randomInt(1, 10) + ".jpg"); } postService.saveByPost(post); logsService.saveByLogs(new Logs(LogsRecord.PUSH_PAGE, post.getPostTitle(), ServletUtil.getClientIP(request), DateUtil.date())); return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), msg); } catch (Exception e) { log.error("Save page failed: {}", e.getMessage()); return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.save-failed")); } } /** * 跳转到修改页面 * * @param pageId 页面编号 * @param model model * @return admin/admin_page_md_editor */ @GetMapping(value = "/edit") public String editPage(@RequestParam("pageId") Long pageId, Model model) { Optional post = postService.findByPostId(pageId); List customTpls = HaloUtils.getCustomTpl(HaloConst.OPTIONS.get(BlogPropertiesEnum.THEME.getProp())); model.addAttribute("post", post.orElse(new Post())); model.addAttribute("customTpls",customTpls); return "admin/admin_page_md_editor"; } /** * 检查该路径是否已经存在 * * @param postUrl postUrl * @return JsonResult */ @GetMapping(value = "/checkUrl") @ResponseBody public JsonResult checkUrlExists(@RequestParam("postUrl") String postUrl) { Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_PAGE.getDesc()); if (null != post) { return new JsonResult(ResultCodeEnum.FAIL.getCode(), localeMessageUtil.getMessage("code.admin.common.url-is-exists")); } return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), ""); } @InitBinder public void initBinder(ServletRequestDataBinder binder) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true)); } } \ No newline at end of file diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java index 4a4aab80b..9eb1e8fba 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/PostController.java @@ -23,16 +23,20 @@ import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.http.HtmlUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import java.util.Optional; @@ -187,14 +191,15 @@ public class PostController extends BaseController { //添加文章时,添加文章时间和修改文章时间为当前时间,修改文章时,只更新修改文章时间 if (null != post.getPostId()) { Post oldPost = postService.findByPostId(post.getPostId()).get(); - post.setPostDate(oldPost.getPostDate()); - post.setPostUpdate(DateUtil.date()); + if (null == post.getPostDate()) { + post.setPostDate(DateUtil.date()); + } post.setPostViews(oldPost.getPostViews()); msg = localeMessageUtil.getMessage("code.admin.common.update-success"); } else { post.setPostDate(DateUtil.date()); - post.setPostUpdate(DateUtil.date()); } + post.setPostUpdate(DateUtil.date()); post.setUser(user); List categories = categoryService.strListToCateList(cateList); post.setCategories(categories); @@ -350,4 +355,10 @@ public class PostController extends BaseController { } return new JsonResult(ResultCodeEnum.SUCCESS.getCode(), localeMessageUtil.getMessage("code.admin.post.push-to-baidu-success")); } + + @InitBinder + public void initBinder(ServletRequestDataBinder binder) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true)); + } } diff --git a/src/main/resources/templates/admin/admin_page_md_editor.ftl b/src/main/resources/templates/admin/admin_page_md_editor.ftl index 9e3a75ff0..bf2393460 100755 --- a/src/main/resources/templates/admin/admin_page_md_editor.ftl +++ b/src/main/resources/templates/admin/admin_page_md_editor.ftl @@ -3,6 +3,7 @@ <@head>${options.blog_title!} | <@spring.message code='admin.pages.edit.title' />
+