package com.jspxcms.ext.web.fore; import static com.jspxcms.ext.domain.SiteGuestbook.MODE_OFF; import static com.jspxcms.ext.domain.SiteGuestbook.MODE_USER; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.jspxcms.common.security.Captchas; import com.jspxcms.common.web.Servlets; import com.jspxcms.common.web.Validations; import com.jspxcms.core.domain.Site; import com.jspxcms.core.domain.User; import com.jspxcms.core.service.SensitiveWordService; import com.jspxcms.core.service.UserService; import com.jspxcms.core.support.Context; import com.jspxcms.core.support.ForeContext; import com.jspxcms.core.support.Response; import com.jspxcms.ext.domain.Guestbook; import com.jspxcms.ext.domain.SiteGuestbook; import com.jspxcms.ext.service.GuestbookService; import com.jspxcms.ext.service.GuestbookTypeService; import com.octo.captcha.service.CaptchaService; /** * GuestbookController * * @author yangxing * */ @Controller public class GuestbookController { public static final String TEMPLATE = "sys_guestbook.html"; @RequestMapping(value = "/guestbook.jspx") public String list(Integer page, HttpServletRequest request, HttpServletResponse response, org.springframework.ui.Model modelMap) { Response resp = new Response(request, response, modelMap); Site site = Context.getCurrentSite(request); SiteGuestbook sg = new SiteGuestbook(site.getCustoms()); // 未开启 if (sg.getMode() == MODE_OFF) { return resp.warning("guestbook.off"); } Map<String, Object> data = modelMap.asMap(); ForeContext.setData(data, request); ForeContext.setPage(data, page); return site.getTemplate(TEMPLATE); } @RequestMapping(value = "/guestbook.jspx", method = RequestMethod.POST) public String submit(Integer typeId, String text, String title, String username, Boolean gender, String phone, String mobile, String qq, String email, String captcha, HttpServletRequest request, HttpServletResponse response, org.springframework.ui.Model modelMap) { Response resp = new Response(request, response, modelMap); Site site = Context.getCurrentSite(request); SiteGuestbook sg = new SiteGuestbook(site.getCustoms()); String result = validateSubmit(request, resp, sg, captcha, typeId, title, text, username, gender, phone, mobile, qq, email); if (resp.hasErrors()) { return result; } title = sensitiveWordService.replace(title); text = sensitiveWordService.replace(text); User user = Context.getCurrentUser(request); Guestbook bean = new Guestbook(); if (sg.isAudit(user)) { bean.setStatus(Guestbook.AUDITED); resp.setStatus(0); } else { bean.setStatus(Guestbook.UNAUDIT); resp.setStatus(1); } if (user == null) { user = userService.getAnonymous(); } bean.setUsername(username); bean.setGender(gender); bean.setPhone(phone); bean.setMobile(mobile); bean.setQq(qq); bean.setEmail(email); bean.setTitle(title); bean.setText(text); String ip = Servlets.getRemoteAddr(request); service.save(bean, user.getId(), typeId, ip, site.getId()); return resp.post(); } private String validateSubmit(HttpServletRequest request, Response resp, SiteGuestbook sg, String captcha, Integer typeId, String title, String text, String username, Boolean gender, String phone, String mobile, String qq, String email) { List<String> messages = resp.getMessages(); if (!Validations.notEmpty(text, sg.getMaxLength(), messages, "text")) { resp.post(401); } if (typeId != null) { if (!Validations.exist(guestbookTypeService.get(typeId), messages, "GuestbookType", typeId)) { resp.post(451); } } User user = Context.getCurrentUser(request); if (sg.getMode() == MODE_OFF) { return resp.post(501, "guestbook.off"); } else if (sg.getMode() == MODE_USER && user == null) { return resp.post(502, "guestbook.needLogin"); } if (sg.isNeedCaptcha(user)) { if (!Captchas.isValid(captchaService, request, captcha)) { return resp.post(100, "error.captcha"); } } return null; } @Autowired private CaptchaService captchaService; @Autowired private SensitiveWordService sensitiveWordService; @Autowired private UserService userService; @Autowired private GuestbookTypeService guestbookTypeService; @Autowired private GuestbookService service; }