package com.tale.controller.admin;
import com.blade.ioc.annotation.Inject;
import com.blade.jdbc.core.Take;
import com.blade.jdbc.model.Paginator;
import com.blade.kit.StringKit;
import com.blade.mvc.annotation.*;
import com.blade.mvc.http.HttpMethod;
import com.blade.mvc.http.Request;
import com.blade.mvc.view.RestResponse;
import com.tale.controller.BaseController;
import com.tale.dto.LogActions;
import com.tale.dto.Types;
import com.tale.exception.TipException;
import com.tale.ext.Commons;
import com.tale.model.Contents;
import com.tale.model.Metas;
import com.tale.model.Users;
import com.tale.service.ContentsService;
import com.tale.service.LogService;
import com.tale.service.MetasService;
import com.tale.service.SiteService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* 文章管理控制器
* Created by biezhi on 2017/2/21.
*/
@Controller("admin/article")
public class ArticleController extends BaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(ArticleController.class);
@Inject
private ContentsService contentsService;
@Inject
private MetasService metasService;
@Inject
private LogService logService;
@Inject
private SiteService siteService;
/**
* 文章管理首页
* @param page
* @param limit
* @param request
* @return
*/
@Route(value = "", method = HttpMethod.GET)
public String index(@QueryParam(value = "page", defaultValue = "1") int page,
@QueryParam(value = "limit", defaultValue = "15") int limit, Request request) {
Paginator<Contents> contentsPaginator = contentsService.getArticles(new Take(Contents.class).eq("type", Types.ARTICLE).page(page, limit, "created desc"));
request.attribute("articles", contentsPaginator);
return "admin/article_list";
}
/**
* 文章发布页面
* @param request
* @return
*/
@Route(value = "publish", method = HttpMethod.GET)
public String newArticle(Request request) {
List<Metas> categories = metasService.getMetas(Types.CATEGORY);
request.attribute("categories", categories);
request.attribute(Types.ATTACH_URL, Commons.site_option(Types.ATTACH_URL, Commons.site_url()));
return "admin/article_edit";
}
/**
* 文章编辑页面
* @param cid
* @param request
* @return
*/
@Route(value = "/:cid", method = HttpMethod.GET)
public String editArticle(@PathParam String cid, Request request) {
Contents contents = contentsService.getContents(cid);
request.attribute("contents", contents);
List<Metas> categories = metasService.getMetas(Types.CATEGORY);
request.attribute("categories", categories);
request.attribute("active", "article");
request.attribute(Types.ATTACH_URL, Commons.site_option(Types.ATTACH_URL, Commons.site_url()));
return "admin/article_edit";
}
/**
* 发布文章操作
*
* @param title
* @param content
* @param tags
* @param categories
* @param status
* @param slug
* @param allow_comment
* @param allow_ping
* @param allow_feed
* @return
*/
@Route(value = "publish", method = HttpMethod.POST)
@JSON
public RestResponse publishArticle(@QueryParam String title, @QueryParam String content,
@QueryParam String tags, @QueryParam String categories,
@QueryParam String status, @QueryParam String slug,
@QueryParam String fmt_type,@QueryParam String thumb_img,
@QueryParam Boolean allow_comment, @QueryParam Boolean allow_ping, @QueryParam Boolean allow_feed) {
Users users = this.user();
Contents contents = new Contents();
contents.setTitle(title);
contents.setContent(content);
contents.setStatus(status);
contents.setSlug(slug);
contents.setType(Types.ARTICLE);
contents.setThumb_img(thumb_img);
contents.setFmt_type(fmt_type);
if (null != allow_comment) {
contents.setAllow_comment(allow_comment);
}
if (null != allow_ping) {
contents.setAllow_ping(allow_ping);
}
if (null != allow_feed) {
contents.setAllow_feed(allow_feed);
}
contents.setAuthor_id(users.getUid());
contents.setTags(tags);
if (StringKit.isBlank(categories)) {
categories = "默认分类";
}
contents.setCategories(categories);
try {
Integer cid = contentsService.publish(contents);
siteService.cleanCache(Types.C_STATISTICS);
return RestResponse.ok(cid);
} catch (Exception e) {
String msg = "文章发布失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponse.fail(msg);
}
}
/**
* 修改文章操作
*
* @param cid
* @param title
* @param content
* @param tags
* @param categories
* @param status
* @param slug
* @param allow_comment
* @param allow_ping
* @param allow_feed
* @return
*/
@Route(value = "modify", method = HttpMethod.POST)
@JSON
public RestResponse modifyArticle(@QueryParam Integer cid, @QueryParam String title,
@QueryParam String content,@QueryParam String fmt_type,
@QueryParam String tags, @QueryParam String categories,
@QueryParam String status, @QueryParam String slug,
@QueryParam String thumb_img,
@QueryParam Boolean allow_comment, @QueryParam Boolean allow_ping, @QueryParam Boolean allow_feed) {
Users users = this.user();
Contents contents = new Contents();
contents.setCid(cid);
contents.setTitle(title);
contents.setContent(content);
contents.setStatus(status);
contents.setFmt_type(fmt_type);
contents.setSlug(slug);
contents.setThumb_img(thumb_img);
if (null != allow_comment) {
contents.setAllow_comment(allow_comment);
}
if (null != allow_ping) {
contents.setAllow_ping(allow_ping);
}
if (null != allow_feed) {
contents.setAllow_feed(allow_feed);
}
contents.setAuthor_id(users.getUid());
contents.setTags(tags);
contents.setCategories(categories);
try {
contentsService.updateArticle(contents);
return RestResponse.ok(cid);
} catch (Exception e) {
String msg = "文章编辑失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponse.fail(msg);
}
}
/**
* 删除文章操作
*
* @param cid
* @param request
* @return
*/
@Route(value = "delete")
@JSON
public RestResponse delete(@QueryParam int cid, Request request) {
try {
contentsService.delete(cid);
siteService.cleanCache(Types.C_STATISTICS);
logService.save(LogActions.DEL_ARTICLE, cid+"", request.address(), this.getUid());
} catch (Exception e) {
String msg = "文章删除失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponse.fail(msg);
}
return RestResponse.ok();
}
}