package cn.jcenterhome.web.action;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import cn.jcenterhome.service.AdminDeleteService;
import cn.jcenterhome.service.BlogService;
import cn.jcenterhome.service.CacheService;
import cn.jcenterhome.service.CpService;
import cn.jcenterhome.service.CronService;
import cn.jcenterhome.service.DataBaseService;
import cn.jcenterhome.service.FeedService;
import cn.jcenterhome.service.MagicService;
import cn.jcenterhome.service.OpService;
import cn.jcenterhome.service.PmService;
import cn.jcenterhome.service.SpaceService;
import cn.jcenterhome.util.BeanFactory;
import cn.jcenterhome.util.Common;
import cn.jcenterhome.vo.MessageVO;
public class BaseAction extends DispatchAction {
protected DataBaseService dataBaseService = (DataBaseService) BeanFactory.getBean("dataBaseService");
protected CacheService cacheService = (CacheService) BeanFactory.getBean("cacheService");
protected AdminDeleteService adminDeleteService = (AdminDeleteService) BeanFactory
.getBean("adminDeleteService");
protected OpService opService = (OpService) BeanFactory.getBean("opService");
protected CpService cpService = (CpService) BeanFactory.getBean("cpService");
protected CronService cronService = (CronService) BeanFactory.getBean("cronService");
protected SpaceService spaceService = (SpaceService) BeanFactory.getBean("spaceService");
protected MagicService magicService = (MagicService) BeanFactory.getBean("magicService");
protected BlogService blogService = (BlogService) BeanFactory.getBean("blogService");
protected FeedService feedService = (FeedService) BeanFactory.getBean("feedService");
protected PmService pmService = (PmService) BeanFactory.getBean("pmService");
protected ActionForward cpMessage(HttpServletRequest request, ActionMapping mapping, MessageVO msgVO) {
return cpMessage(request, mapping, msgVO.getMsgKey(), msgVO.getForwardURL(), msgVO.getSecond(), msgVO
.getArgs());
}
protected ActionForward cpMessage(HttpServletRequest request, ActionMapping mapping, String msgKey) {
return cpMessage(request, mapping, msgKey, null);
}
protected ActionForward cpMessage(HttpServletRequest request, ActionMapping mapping, String msgKey,
String forwardURL) {
return cpMessage(request, mapping, msgKey, forwardURL, 1);
}
protected ActionForward cpMessage(HttpServletRequest request, ActionMapping mapping, String msgKey,
String forwardURL, int second, Object... args) {
request.removeAttribute("globalAd");
request.setAttribute("message", Common.getMessage(request, msgKey, args));
request.setAttribute("url_forward", forwardURL);
request.setAttribute("second", second);
return mapping.findForward("cpmessage");
}
@SuppressWarnings("unchecked")
protected ActionForward showMessage(HttpServletRequest request, HttpServletResponse response,
MessageVO msgVO) {
return showMessage(request, response, msgVO.getMsgKey(), msgVO.getForwardURL(), msgVO.getSecond(),
msgVO.getArgs());
}
protected ActionForward showMessage(HttpServletRequest request, HttpServletResponse response,
String msgkey) {
return showMessage(request, response, msgkey, null);
}
protected ActionForward showMessage(HttpServletRequest request, HttpServletResponse response,
String msgkey, String url_forward) {
return showMessage(request, response, msgkey, url_forward, 1);
}
protected ActionForward showMessage(HttpServletRequest request, HttpServletResponse response,
String msgKey, String forwardURL, int second, Object... args) {
if ("".equals(forwardURL)) {
forwardURL = null;
}
request.removeAttribute("globalAd");
request.removeAttribute("sCookie");
Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal");
Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig");
String mobile = (String) sGlobal.get("mobile");
String message = Common.getMessage(request, msgKey, args);
if (Common.empty(mobile)) {
int inajax = (Integer) sGlobal.get("inajax");
if (inajax == 0 && forwardURL != null && second == 0) {
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", forwardURL);
} else {
if (inajax > 0) {
if (forwardURL != null) {
message = "<a href=\"" + forwardURL + "\">" + message + "</a><ajaxok>";
}
try {
PrintWriter out=response.getWriter();
out.write(message);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
} else {
if (forwardURL != null) {
message = "<a href=\"" + forwardURL + "\">" + message
+ "</a><script>setTimeout(\"window.location.href ='" + forwardURL + "';\", "
+ (second * 1000) + ");</script>";
}
request.setAttribute("url_forward", forwardURL);
request.setAttribute("message", message);
include(request, response, sConfig, sGlobal, "showmessage.jsp");
}
}
} else {
request.setAttribute("url_forward", forwardURL);
request.setAttribute("message", message);
include(request, response, sConfig, sGlobal, "showmessage.jsp");
}
return null;
}
protected Map<String, String> getWheres(String[] intKeys, String[] strKeys, List<String[]> randKeys,
String[] likeKeys, String pre, Map<String, String[]> paramMap, String timeoffset) {
String prefix = " AND ";
if (pre != null) {
prefix += pre;
}
StringBuffer sql = new StringBuffer();
StringBuffer url = new StringBuffer();
if (intKeys != null) {
for (String var : intKeys) {
String[] values = paramMap.get(var);
String value = values != null ? values[0] : null;
if (Common.strlen(value) > 0) {
sql.append(prefix + var + "='" + Common.intval(value) + "'");
url.append("&" + var + "=" + value);
}
}
}
if (strKeys != null) {
for (String var : strKeys) {
String[] values = paramMap.get(var);
String value = values != null ? values[0].trim() : null;
if (Common.strlen(value) > 0) {
sql.append(prefix + var + "='" + value + "'");
url.append("&" + var + "=" + Common.urlEncode(value));
}
}
}
if (randKeys != null) {
String method = null;
String var = null;
for (String[] vars : randKeys) {
method = vars[0];
var = vars[1];
String[] values1 = paramMap.get(var + 1);
String[] values2 = paramMap.get(var + 2);
String temp1 = values1 != null ? values1[0].trim() : null;
String temp2 = values2 != null ? values2[0].trim() : null;
int value1 = 0;
int value2 = 0;
if ("sstrtotime".equals(method)) {
value1 = Common.strToTime(temp1, timeoffset);
value2 = Common.strToTime(temp2, timeoffset);
} else if ("intval".equals(method)) {
value1 = Common.intval(temp1);
value2 = Common.intval(temp2);
}
if (value1 > 0) {
sql.append(prefix + var + ">='" + value1 + "'");
url.append("&" + var + "1=" + Common.urlEncode(temp1));
}
if (value2 > 0) {
sql.append(prefix + var + "<='" + value2 + "'");
url.append("&" + var + "2=" + Common.urlEncode(temp2));
}
}
}
if (likeKeys != null) {
for (String var : likeKeys) {
String[] values = paramMap.get(var);
String value = values != null ? values[0].trim() : null;
if (Common.strlen(value) > 0) {
sql.append(prefix + var + " LIKE BINARY '%" + value + "%'");
url.append("&" + var + "=" + Common.urlEncode(value));
}
}
}
Map<String, String> map = new HashMap<String, String>();
map.put("sql", sql.length() > 0 ? sql.substring(5) : null);
map.put("url", url.toString());
return map;
}
protected Map<String, String> getOrders(String[] allowOrders, String defaultStr, String pre,
Map<String, String[]> paramMap) {
String[] orderbys = paramMap.get("orderby");
String[] orderscs = paramMap.get("ordersc");
if (Common.empty(orderbys) || !Common.in_array(allowOrders, orderbys[0])) {
orderbys = new String[] {defaultStr};
paramMap.put("orderby", orderbys);
if (Common.empty(orderscs)) {
orderscs = new String[] {"desc"};
paramMap.put("ordersc", orderscs);
}
}
StringBuffer sql = new StringBuffer();
StringBuffer url = new StringBuffer();
if (pre == null) {
sql.append(" ORDER BY " + orderbys[0] + " ");
} else {
sql.append(" ORDER BY " + pre + orderbys[0] + " ");
}
url.append("&orderby=" + orderbys[0]);
if (!Common.empty(orderscs) && "desc".equals(orderscs[0])) {
url.append("&ordersc=desc");
sql.append(" DESC ");
} else {
url.append("&ordersc=asc");
}
Map<String, String> orders = new HashMap<String, String>();
orders.put("sql", sql.toString());
orders.put("url", url.toString());
return orders;
}
protected boolean submitCheck(HttpServletRequest request, String var) throws Exception {
if ("POST".equals(request.getMethod()) && !Common.empty(request.getParameter(var))) {
String referer = request.getHeader("Referer");
if (Common.empty(referer)
|| referer.replaceAll("https?://([^:/]+).*", "$1").equals(
request.getHeader("Host").replaceAll("([^:]+).*", "$1"))
&& formHash(request).equals(request.getParameter("formhash"))) {
return true;
} else {
throw new Exception("submit_invalid");
}
}
return false;
}
protected boolean submitCheck(HttpServletRequest request, String submitModule, String formhash)
throws Exception {
if ("POST".equals(request.getMethod()) && !Common.empty(submitModule)) {
String referer = request.getHeader("Referer");
if (Common.empty(referer)
|| referer.replaceAll("https?://([^:/]+).*", "$1").equals(
request.getHeader("Host").replaceAll("([^:]+).*", "$1"))
&& formHash(request).equals(formhash)) {
return true;
} else {
throw new Exception("submit_invalid");
}
}
return false;
}
@SuppressWarnings("unchecked")
protected String formHash(HttpServletRequest request) {
Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal");
Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig");
String formhash = (String) sGlobal.get("formhash");
if (Common.empty(formhash)) {
String timestamp = sGlobal.get("timestamp").toString();
char split = '|';
StringBuffer temp = new StringBuffer();
temp.append(timestamp.substring(0, timestamp.length() - 7));
temp.append(split);
temp.append(sGlobal.get("supe_uid"));
temp.append(split);
temp.append(Common.md5((String) sConfig.get("sitekey")));
temp.append(split);
if (request.getAttribute("in_admincp") != null) {
temp.append("Only For JavaCenter Home AdminCP");
}
formhash = Common.md5(temp.toString()).substring(8, 16);
sGlobal.put("formhash", formhash);
}
return formhash;
}
@SuppressWarnings("unchecked")
protected ActionForward include(HttpServletRequest request, HttpServletResponse response,
Map<String, Object> sConfig, Map<String, Object> sGlobal, String pageName) {
String tpl = null;
try {
tpl = Common.template(sConfig, sGlobal, pageName);
request.getRequestDispatcher(tpl).include(request, response);
} catch (Exception e) {
try {
response.getWriter().write("Template file : " + tpl + " Not found or have no access!<br>");
response.getWriter().write("Message : " + e.getMessage());
} catch (IOException e1) {
e1.printStackTrace();
}
}
return null;
}
protected ActionForward invokeMethod(Object obj, String methodName, HttpServletRequest request,
HttpServletResponse response) throws Exception {
return (ActionForward) obj.getClass().getMethod(methodName, HttpServletRequest.class,
HttpServletResponse.class).invoke(obj, request, response);
}
}