package com.my.blog.website.controller.admin;
import com.github.pagehelper.PageInfo;
import com.my.blog.website.exception.TipException;
import com.my.blog.website.modal.Bo.RestResponseBo;
import com.my.blog.website.modal.Vo.UserVo;
import com.my.blog.website.service.ILogService;
import com.my.blog.website.constant.WebConst;
import com.my.blog.website.controller.BaseController;
import com.my.blog.website.dto.LogActions;
import com.my.blog.website.dto.Types;
import com.my.blog.website.modal.Vo.ContentVo;
import com.my.blog.website.modal.Vo.ContentVoExample;
import com.my.blog.website.service.IContentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* Created by 13 on 2017/2/21.
*/
@Controller()
@RequestMapping("admin/page")
public class PageController extends BaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(PageController.class);
@Resource
private IContentService contentsService;
@Resource
private ILogService logService;
@GetMapping(value = "")
public String index(HttpServletRequest request) {
ContentVoExample contentVoExample = new ContentVoExample();
contentVoExample.setOrderByClause("created desc");
contentVoExample.createCriteria().andTypeEqualTo(Types.PAGE.getType());
PageInfo<ContentVo> contentsPaginator = contentsService.getArticlesWithpage(contentVoExample, 1, WebConst.MAX_POSTS);
request.setAttribute("articles", contentsPaginator);
return "admin/page_list";
}
@GetMapping(value = "new")
public String newPage(HttpServletRequest request) {
return "admin/page_edit";
}
@GetMapping(value = "/{cid}")
public String editPage(@PathVariable String cid, HttpServletRequest request) {
ContentVo contents = contentsService.getContents(cid);
request.setAttribute("contents", contents);
return "admin/page_edit";
}
@PostMapping(value = "publish")
@ResponseBody
@Transactional(rollbackFor = TipException.class)
public RestResponseBo publishPage(@RequestParam String title, @RequestParam String content,
@RequestParam String status, @RequestParam String slug,
@RequestParam(required = false) Integer allowComment, @RequestParam(required = false) Integer allowPing, HttpServletRequest request) {
UserVo users = this.user(request);
ContentVo contents = new ContentVo();
contents.setTitle(title);
contents.setContent(content);
contents.setStatus(status);
contents.setSlug(slug);
contents.setType(Types.PAGE.getType());
if (null != allowComment) {
contents.setAllowComment(allowComment == 1);
}
if (null != allowPing) {
contents.setAllowPing(allowPing == 1);
}
contents.setAuthorId(users.getUid());
try {
contentsService.publish(contents);
} catch (Exception e) {
String msg = "页面发布失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponseBo.fail(msg);
}
return RestResponseBo.ok();
}
@PostMapping(value = "modify")
@ResponseBody
@Transactional(rollbackFor = TipException.class)
public RestResponseBo modifyArticle(@RequestParam Integer cid, @RequestParam String title,
@RequestParam String content,
@RequestParam String status, @RequestParam String slug,
@RequestParam(required = false) Integer allowComment, @RequestParam(required = false) Integer allowPing, HttpServletRequest request) {
UserVo users = this.user(request);
ContentVo contents = new ContentVo();
contents.setCid(cid);
contents.setTitle(title);
contents.setContent(content);
contents.setStatus(status);
contents.setSlug(slug);
contents.setType(Types.PAGE.getType());
if (null != allowComment) {
contents.setAllowComment(allowComment == 1);
}
if (null != allowPing) {
contents.setAllowPing(allowPing == 1);
}
contents.setAuthorId(users.getUid());
try {
contentsService.updateArticle(contents);
} catch (Exception e) {
String msg = "页面编辑失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponseBo.fail(msg);
}
return RestResponseBo.ok();
}
@RequestMapping(value = "delete")
@ResponseBody
@Transactional(rollbackFor = TipException.class)
public RestResponseBo delete(@RequestParam int cid, HttpServletRequest request) {
try {
contentsService.deleteByCid(cid);
logService.insertLog(LogActions.DEL_PAGE.getAction(), cid + "", request.getRemoteAddr(), this.getUid(request));
} catch (Exception e) {
String msg = "页面删除失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponseBo.fail(msg);
}
return RestResponseBo.ok();
}
}