package cn.jcenterhome.web.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import cn.jcenterhome.util.Common;
import cn.jcenterhome.util.CookieHelper;
import cn.jcenterhome.util.FileHelper;
import cn.jcenterhome.util.JavaCenterHome;
import cn.jcenterhome.util.Serializer;
import cn.jcenterhome.vo.MessageVO;
public class AdmincpAction extends BaseAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute("in_admincp", true);
request.setAttribute("menuNames", getMenuNames());
Map<String, String> sCookie = (Map<String, String>) request.getAttribute("sCookie");
String collapse = sCookie.get("collapse");
if (!Common.empty(collapse)) {
String[] collapses = collapse.split("_");
for (String val : collapses) {
if (val.length() > 0) {
request.setAttribute("menu_style_" + val, " style=\"display: none\"");
request.setAttribute("menu_img_" + val, "image/plus.gif");
}
}
}
Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal");
Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig");
String ac = request.getParameter("ac");
int supe_uid = (Integer) sGlobal.get("supe_uid");
String message = Common.checkClose(request, response, supe_uid);
if (message != null) {
return showMessage(request, response, message);
}
if (supe_uid == 0) {
String refer = "GET".equals(request.getMethod()) ? (String) request.getAttribute("requestURI")
: "admincp.jsp?ac=" + ac;
CookieHelper.setCookie(request, response, "_refer", Common.urlEncode(refer));
return showMessage(request, response, "to_login", "do.jsp?ac=" + sConfig.get("login_action"));
}
Map<String, Object> space = Common.getSpace(request, sGlobal, sConfig, supe_uid);
if (Common.empty(space)) {
return showMessage(request, response, "space_does_not_exist");
}
request.setAttribute("space", space);
if (Common.checkPerm(request, response, "banvisit")) {
MessageVO msgVO = Common.ckSpaceLog(request);
if (msgVO != null) {
return showMessage(request, response, msgVO);
} else {
return showMessage(request, response, "you_do_not_have_permission_to_visit");
}
}
boolean isFounder = Common.ckFounder(supe_uid);
List<String[]> acs = new ArrayList<String[]>();
acs.add(new String[] {"index", "config", "privacy", "ip", "spam", "hotuser", "defaultuser",
"usergroup", "credit", "magic", "magiclog", "profield", "ad"});
acs.add(new String[] {"tag", "mtag", "event", "report", "space"});
StringBuffer acs2 = new StringBuffer(
"cache,network,profilefield,eventclass,gift,click,task,censor,stat,block,cron,log");
if (isFounder) {
Map<String, String> jchConfig = JavaCenterHome.jchConfig;
if (Common.intval(jchConfig.get("allowedittpl")) > 0) {
acs2.append(",template");
}
acs2.append(",backup");
}
acs.add(acs2.toString().split(","));
acs.add(new String[] {"feed", "blog", "album", "pic", "comment", "thread", "post", "doing", "share",
"poll"});
request.setAttribute("acs", acs);
if (Common.empty(ac) || !Common.in_array(acs.get(0), ac) && !Common.in_array(acs.get(1), ac)
&& !Common.in_array(acs.get(2), ac) && !Common.in_array(acs.get(3), ac)) {
ac = "index";
}
request.setAttribute("ac", ac);
String refer = (String) sGlobal.get("refer");
if (!refer.matches(".*admincp\\.jsp.*")) {
sGlobal.put("refer", "admincp.jsp?ac=" + ac);
}
Map<String, Map<String, Integer>> menus = new TreeMap<String, Map<String, Integer>>();
menus.put("menu0", new HashMap<String, Integer>());
menus.put("menu1", new HashMap<String, Integer>());
menus.put("menu2", new HashMap<String, Integer>());
boolean needLogin = false;
int groupid = (Integer) ((Map<String, Object>) sGlobal.get("member")).get("groupid");
Map<String, Object> usergroup = Common.getCacheDate(request, response, "/data/cache/usergroup_"
+ groupid + ".jsp", "usergroup" + groupid);
usergroup.put("manageuserapp", usergroup.get("manageapp"));
for (int i = 0; i < 3; i++) {
for (String value : acs.get(i)) {
if (isFounder || (Integer) usergroup.get("manageconfig") > 0
|| !Common.empty(usergroup.get("manage" + value))) {
needLogin = true;
Map<String, Integer> menu = menus.get("menu" + i);
menu.put(value, 1);
usergroup.put("manage" + value, 1);
}
}
}
if (isFounder || (Integer) usergroup.get("managename") > 0
|| (Integer) usergroup.get("managespacegroup") > 0
|| (Integer) usergroup.get("managespaceinfo") > 0
|| (Integer) usergroup.get("managespacecredit") > 0
|| (Integer) usergroup.get("managespacenote") > 0
|| (Integer) usergroup.get("managedelspace") > 0) {
needLogin = true;
Map<String, Integer> menu = menus.get("menu1");
menu.put("space", 1);
}
request.setAttribute("menus", menus);
int timestamp = (Integer) sGlobal.get("timestamp");
int cpAccess = 0;
if (needLogin) {
String tableName = JavaCenterHome.getTableName("adminsession");
List<String> sessions = dataBaseService.executeQuery("SELECT errorcount FROM " + tableName
+ " WHERE uid=" + supe_uid + " AND dateline+1800>=" + timestamp, 1);
if (sessions.size() > 0) {
int errorCount = Integer.valueOf(sessions.get(0));
if (errorCount == -1) {
dataBaseService.executeUpdate("UPDATE " + tableName + " SET dateline=" + timestamp
+ " WHERE uid=" + supe_uid);
cpAccess = 2;
} else if (errorCount <= 3) {
cpAccess = 1;
}
} else {
dataBaseService.executeUpdate("DELETE FROM " + tableName + " WHERE uid=" + supe_uid
+ " OR dateline+1800<" + timestamp);
dataBaseService.executeUpdate("INSERT INTO " + tableName
+ " (uid, ip, dateline, errorcount) VALUES ('" + supe_uid + "', '"
+ Common.getOnlineIP(request) + "', '" + timestamp + "', '0')");
cpAccess = 1;
}
} else {
cpAccess = 2;
}
switch (cpAccess) {
case 1:
try {
if (submitCheck(request, "loginsubmit")) {
String tableName = JavaCenterHome.getTableName("adminsession");
List<Map<String, Object>> members = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("member") + " WHERE username = '"
+ sGlobal.get("supe_username") + "'");
if (members.isEmpty()) {
return showMessage(request, response, "login_failure_please_re_login",
"do.jsp?ac=" + sConfig.get("login_action"));
}
Map<String, Object> member = members.get(0);
String password = Common.trim(request.getParameter("password"));
password = Common.md5(Common.md5(password) + member.get("salt"));
if (!password.equals(member.get("password"))) {
dataBaseService.executeUpdate("UPDATE " + tableName
+ " SET errorcount=errorcount+1 WHERE uid=" + supe_uid);
return cpMessage(request, mapping, "cp_enter_the_password_is_incorrect",
"admincp.jsp");
} else {
dataBaseService.executeUpdate("UPDATE " + tableName
+ " SET errorcount=-1 WHERE uid=" + supe_uid);
refer = sCookie.get("_refer");
refer = Common.empty(refer) ? (String) sGlobal.get("refer") : Common
.urlDecode(refer);
if (Common.empty(refer) || Common.matches(refer, "(?i)(login)")) {
refer = "admincp.jsp";
}
CookieHelper.removeCookie(request, response, "_refer");
return showMessage(request, response, "login_success", refer, 0);
}
} else {
refer = "GET".equals(request.getMethod()) ? (String) request
.getAttribute("requestURI") : "admincp.jsp?ac=" + ac;
CookieHelper.setCookie(request, response, "_refer", Common.urlEncode(refer));
request.setAttribute("active_advance", " class=\"active\"");
return include(request, response, sConfig, sGlobal, "cp_advance.jsp");
}
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
case 2:
break;
default:
return cpMessage(request, mapping, "cp_excessive_number_of_attempts_to_sign");
}
if (needLogin) {
admincpLog(request);
}
String acfile = null;
if (ac.equals("defaultuser")) {
acfile = "hotuser";
} else {
acfile = ac;
}
sGlobal.put("maxpage", 0);
request.removeAttribute("globalAd");
try {
request.getRequestDispatcher("/admin/" + acfile + ".do").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@SuppressWarnings("unchecked")
private void admincpLog(HttpServletRequest request) {
StringBuffer logContent = new StringBuffer();
Map<String, String[]> datas = request.getParameterMap();
if (datas.size() > 0) {
logContent.append(request.getMethod());
logContent.append('{');
Set<String> keys = datas.keySet();
for (String key : keys) {
String[] values = datas.get(key);
int length = values.length;
if (length > 1) {
Map temp = new TreeMap();
for (int i = 0; i < length; i++) {
temp.put(i, values[i]);
}
logContent.append(key.replace("[]", "") + "=" + Serializer.serialize(temp) + ";");
} else {
logContent.append(key + "=" + values[0] + ";");
}
}
logContent.append('}');
}
FileHelper.writeLog(request, "admincp", logContent.toString());
}
private Map<String, String> getMenuNames() {
Map<String, String> menuNames = new HashMap<String, String>();
menuNames.put("index", "������ҳ");
menuNames.put("config", "վ������");
menuNames.put("privacy", "��˽����");
menuNames.put("usergroup", "�û���");
menuNames.put("credit", "���ֹ���");
menuNames.put("profilefield", "�û���Ŀ");
menuNames.put("profield", "Ⱥ����Ŀ");
menuNames.put("eventclass", "�����");
menuNames.put("gift", "��������");
menuNames.put("magic", "��������");
menuNames.put("task", "�����");
menuNames.put("spam", "����ˮ����");
menuNames.put("censor", "��������");
menuNames.put("ad", "�������");
menuNames.put("network", "��㿴��");
menuNames.put("cache", "�������");
menuNames.put("log", "ϵͳlog��¼");
menuNames.put("space", "�û�����");
menuNames.put("feed", "��̬(feed)");
menuNames.put("share", "����");
menuNames.put("blog", "��־");
menuNames.put("album", "���");
menuNames.put("pic", "ͼƬ");
menuNames.put("comment", "����/����");
menuNames.put("thread", "����");
menuNames.put("post", "����");
menuNames.put("doing", "��¼");
menuNames.put("tag", "��ǩ");
menuNames.put("mtag", "Ⱥ��");
menuNames.put("poll", "ͶƱ");
menuNames.put("event", "�");
menuNames.put("magiclog", "����¼");
menuNames.put("report", "�ٱ�");
menuNames.put("block", "���ݵ���");
menuNames.put("template", "ģ��༭");
menuNames.put("backup", "���ݱ���");
menuNames.put("stat", "ͳ�Ƹ���");
menuNames.put("cron", "ϵͳ�ƻ�����");
menuNames.put("click", "��̬����");
menuNames.put("ip", "����IP����");
menuNames.put("hotuser", "�Ƽ���Ա����");
menuNames.put("defaultuser", "Ĭ�Ϻ�������");
return menuNames;
}
}