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.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.init.TaleConst;
import com.tale.model.Contents;
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;
/**
* Created by biezhi on 2017/2/21.
*/
@Controller("admin/page")
public class PageController extends BaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(PageController.class);
@Inject
private ContentsService contentsService;
@Inject
private MetasService metasService;
@Inject
private LogService logService;
@Inject
private SiteService siteService;
@Route(value = "", method = HttpMethod.GET)
public String index(Request request) {
Paginator<Contents> contentsPaginator = contentsService.getArticles(new Take(Contents.class).eq("type", Types.PAGE).page(1, TaleConst.MAX_POSTS, "created desc"));
request.attribute("articles", contentsPaginator);
return "admin/page_list";
}
@Route(value = "new", method = HttpMethod.GET)
public String newPage(Request request) {
request.attribute(Types.ATTACH_URL, Commons.site_option(Types.ATTACH_URL, Commons.site_url()));
return "admin/page_edit";
}
@Route(value = "/:cid", method = HttpMethod.GET)
public String editPage(@PathParam String cid, Request request) {
Contents contents = contentsService.getContents(cid);
request.attribute("contents", contents);
request.attribute(Types.ATTACH_URL, Commons.site_option(Types.ATTACH_URL, Commons.site_url()));
return "admin/page_edit";
}
@Route(value = "publish", method = HttpMethod.POST)
@JSON
public RestResponse publishPage(@QueryParam String title, @QueryParam String content,
@QueryParam String status, @QueryParam String slug,
@QueryParam String fmt_type,
@QueryParam Boolean allow_comment) {
Users users = this.user();
Contents contents = new Contents();
contents.setTitle(title);
contents.setContent(content);
contents.setStatus(status);
contents.setSlug(slug);
contents.setFmt_type(fmt_type);
contents.setType(Types.PAGE);
contents.setAllow_comment(allow_comment);
contents.setAllow_ping(true);
contents.setAuthor_id(users.getUid());
try {
contentsService.publish(contents);
siteService.cleanCache(Types.C_STATISTICS);
} catch (Exception e) {
String msg = "页面发布失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponse.fail(msg);
}
return RestResponse.ok();
}
@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 status, @QueryParam String slug,
@QueryParam Boolean allow_comment) {
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.setType(Types.PAGE);
contents.setAllow_comment(allow_comment);
contents.setAllow_ping(true);
contents.setAuthor_id(users.getUid());
try {
contentsService.updateArticle(contents);
} catch (Exception e) {
String msg = "页面编辑失败";
if (e instanceof TipException) {
msg = e.getMessage();
} else {
LOGGER.error(msg, e);
}
return RestResponse.fail(msg);
}
return RestResponse.ok();
}
@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_PAGE, 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();
}
}