package com.jspxcms.core.web.fore;
import java.util.Date;
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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.jspxcms.common.security.CredentialsDigest;
import com.jspxcms.common.web.Validations;
import com.jspxcms.core.domain.Site;
import com.jspxcms.core.domain.User;
import com.jspxcms.core.domain.UserDetail;
import com.jspxcms.core.service.UserService;
import com.jspxcms.core.support.Context;
import com.jspxcms.core.support.ForeContext;
import com.jspxcms.core.support.Response;
/**
* MemberController
*
* @author liufang
*
*/
@Controller
public class MemberController {
public static final String SPACE_TEMPLATE = "sys_member_space.html";
public static final String MY_TEMPLATE = "sys_member_my.html";
public static final String PROFILE_TEMPLATE = "sys_member_profile.html";
public static final String PASSWORD_TEMPLATE = "sys_member_password.html";
public static final String EMAIL_TEMPLATE = "sys_member_email.html";
/**
* 会员首页
*
* @param request
* @param response
* @param modelMap
* @return
*/
@RequestMapping(value = "/space/{id}.jspx")
public String space(@PathVariable Integer id, HttpServletRequest request,
HttpServletResponse response, org.springframework.ui.Model modelMap) {
Response resp = new Response(request, response, modelMap);
List<String> messages = resp.getMessages();
User targetUser = userService.get(id);
if (!Validations.exist(targetUser, messages, "User", id)) {
return resp.notFound();
}
Site site = Context.getCurrentSite(request);
modelMap.addAttribute("targetUser", targetUser);
Map<String, Object> data = modelMap.asMap();
ForeContext.setData(data, request);
return site.getTemplate(SPACE_TEMPLATE);
}
@RequestMapping(value = "/my.jspx")
public String my(HttpServletRequest request, HttpServletResponse response,
org.springframework.ui.Model modelMap) {
Site site = Context.getCurrentSite(request);
Map<String, Object> data = modelMap.asMap();
ForeContext.setData(data, request);
return site.getTemplate(MY_TEMPLATE);
}
@RequestMapping(value = "/my/profile.jspx")
public String profileForm(HttpServletRequest request,
HttpServletResponse response, org.springframework.ui.Model modelMap) {
Site site = Context.getCurrentSite(request);
Map<String, Object> data = modelMap.asMap();
ForeContext.setData(data, request);
return site.getTemplate(PROFILE_TEMPLATE);
}
@RequestMapping(value = "/my/profile.jspx", method = RequestMethod.POST)
public String profileSubmit(String gender, Date birthDate, String bio,
String comeFrom, String qq, String msn, String weixin,
HttpServletRequest request, HttpServletResponse response,
org.springframework.ui.Model modelMap) {
Response resp = new Response(request, response, modelMap);
User user = Context.getCurrentUser(request);
user.setGender(gender);
user.setBirthDate(birthDate);
UserDetail detail = user.getDetail();
detail.setBio(bio);
detail.setComeFrom(comeFrom);
detail.setQq(qq);
detail.setMsn(msn);
detail.setQq(qq);
userService.update(user, detail);
return resp.post();
}
@RequestMapping(value = "/my/password.jspx")
public String passwordForm(HttpServletRequest request,
HttpServletResponse response, org.springframework.ui.Model modelMap) {
Site site = Context.getCurrentSite(request);
Map<String, Object> data = modelMap.asMap();
ForeContext.setData(data, request);
return site.getTemplate(PASSWORD_TEMPLATE);
}
@RequestMapping(value = "/my/password.jspx", method = RequestMethod.POST)
public String passwordSubmit(String password, String rawPassword,
HttpServletRequest request, HttpServletResponse response,
org.springframework.ui.Model modelMap) {
Response resp = new Response(request, response, modelMap);
User user = Context.getCurrentUser(request);
if (!credentialsDigest.matches(user.getPassword(), password,
user.getSaltBytes())) {
return resp.post(501, "member.passwordError");
}
userService.updatePassword(user.getId(), rawPassword);
return resp.post();
}
@RequestMapping(value = "/my/email.jspx")
public String emailForm(HttpServletRequest request,
HttpServletResponse response, org.springframework.ui.Model modelMap) {
Site site = Context.getCurrentSite(request);
Map<String, Object> data = modelMap.asMap();
ForeContext.setData(data, request);
return site.getTemplate(EMAIL_TEMPLATE);
}
/**
* 修改邮箱
*
* @param request
* @param response
* @param modelMap
* @return
*/
@RequestMapping(value = "/my/email.jspx", method = RequestMethod.POST)
public String emailSubmit(String password, String email,
HttpServletRequest request, HttpServletResponse response,
org.springframework.ui.Model modelMap) {
// TODO 修改邮箱后需重新激活才能生效
Response resp = new Response(request, response, modelMap);
List<String> messages = resp.getMessages();
if (!Validations.notEmpty(email, messages, "email")) {
return resp.post(401);
}
if (!Validations.email(email, messages, "email")) {
return resp.post(402);
}
User user = Context.getCurrentUser(request);
if (!credentialsDigest.matches(user.getPassword(), password,
user.getSaltBytes())) {
return resp.post(501, "member.passwordError");
}
userService.updateEmail(user.getId(), email);
return resp.post();
}
@Autowired
private CredentialsDigest credentialsDigest;
@Autowired
private UserService userService;
}