package cn.jcenterhome.web.action.admin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
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.JavaCenterHome;
import cn.jcenterhome.util.Serializer;
import cn.jcenterhome.web.action.BaseAction;
public class UserGroupAction extends BaseAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
if (!Common.checkPerm(request, response, "manageusergroup")) {
return cpMessage(request, mapping, "cp_no_authority_management_operation");
}
Map<String, Object> theValue = null;
int gid = Common.intval(request.getParameter("gid"));
if (gid > 0) {
String sql = "SELECT * FROM " + JavaCenterHome.getTableName("usergroup") + " WHERE gid=" + gid;
List<Map<String, Object>> values = dataBaseService.executeQuery(sql);
if (values.isEmpty()) {
return cpMessage(request, mapping, "cp_user_group_does_not_exist");
}
theValue = values.get(0);
theValue.put("magicaward", Serializer.unserialize((String) theValue.get("magicaward"), false));
} else {
theValue = new HashMap<String, Object>();
}
try {
if (submitCheck(request, "thevaluesubmit")) {
String groupTitle = (String) Common.sHtmlSpecialChars(request.getParameter("set[grouptitle]")
.trim());
if (Common.empty(groupTitle)) {
return cpMessage(request, mapping, "cp_user_group_were_not_empty");
}
Map<String, Object> setArr = new HashMap<String, Object>();
setArr.put("grouptitle", Common.cutstr(groupTitle, 20, ""));
Integer system = (Integer) theValue.get("system");
if (system == null) {
system = Common.intval(request.getParameter("set[system]"));
}
setArr.put("system", system);
if (system == 0) {
int explower = Common.intval(request.getParameter("set[explower]"));
if (explower > 999999999 || explower < -999999999) {
return cpMessage(request, mapping, "cp_integral_limit_error");
}
String sql = "SELECT gid FROM " + JavaCenterHome.getTableName("usergroup")
+ " WHERE explower = " + explower + " AND system = 0";
List<String> lowGidList = dataBaseService.executeQuery(sql, 1);
if (!lowGidList.isEmpty()) {
int lowGid = Common.intval(lowGidList.get(0));
if (lowGid != gid) {
return cpMessage(request, mapping,
"cp_integral_limit_duplication_with_other_user_group");
}
}
setArr.put("explower", explower);
}
Map<String, Object> magicAwards = new HashMap<String, Object>();
String[] magicValues = request.getParameterValues("magicaward[]");
if (magicValues != null) {
Map<String, Object> tmp = null;
String magic[] = null;
int magicNum = 0;
for (String value : magicValues) {
tmp = new HashMap<String, Object>();
magic = value.split(",");
if ((magicNum = Common.intval(magic[1])) > 0) {
tmp.put("mid", magic[0]);
tmp.put("num", magicNum);
magicAwards.put(magic[0], tmp);
}
}
}
setArr.put("magicaward", Serializer.serialize(magicAwards));
String[] ignoreNames = {"set[gid]", "set[grouptitle]", "set[system]", "set[explower]"};
Map<String, String[]> elements = request.getParameterMap();
Set<String> elementNames = elements.keySet();
String key = null;
String value = null;
for (String elementName : elementNames) {
if (!elementName.startsWith("set[") || Common.in_array(ignoreNames, elementName)) {
continue;
}
key = elementName.replaceAll("(set\\[)|(\\])", "");
value = elements.get(elementName)[0].trim();
if (!value.equals(theValue.get(key))) {
if ("maxfriendnum".equals(key) || "postinterval".equals(key)
|| "searchinterval".equals(key) || "domainlength".equals(key)) {
setArr.put(key, Common.range(value, 65535, 0));
} else if ("maxattachsize".equals(key)) {
setArr.put(key, Common.range(value, 2147483647, 0));
} else if ("color".equals(key)) {
setArr.put(key, value.matches("^#?\\w{0,10}") ? value : "");
} else if ("icon".equals(key)) {
setArr.put(key, Common.cutstr((String) Common.sHtmlSpecialChars(value), 100, ""));
} else {
setArr.put(key, value);
}
}
}
if (Common.empty(theValue.get("gid"))) {
Object[] keys = setArr.keySet().toArray();
Object[] values = setArr.values().toArray();
String sql = "INSERT INTO " + JavaCenterHome.getTableName("usergroup") + " ("
+ Common.implode(keys, ",") + ") VALUES ('" + Common.implode(values, "','")
+ "')";
dataBaseService.insert(sql);
} else {
Object[] keys = setArr.keySet().toArray();
Object[] values = setArr.values().toArray();
StringBuffer setSql = new StringBuffer();
String comma = "";
for (int i = 0; i < keys.length; i++) {
setSql.append(comma + keys[i] + "='" + values[i] + "'");
comma = ",";
}
String sql = "UPDATE " + JavaCenterHome.getTableName("usergroup") + " SET " + setSql
+ " WHERE gid='" + theValue.get("gid") + "'";
dataBaseService.executeUpdate(sql);
}
updateGroupExplower();
cacheService.usergroup_cache();
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=usergroup");
} else if (submitCheck(request, "updatesubmit")) {
String[] gids = request.getParameterValues("gid[]");
if (gids != null) {
Map<Integer, Integer> explowers = new TreeMap<Integer, Integer>();
for (String id : gids) {
int explower = Common.intval(request.getParameter("explower_" + id));
if (explower > 999999999 || explower < -999999999) {
return cpMessage(request, mapping, "cp_integral_limit_error");
} else if (explowers.containsValue(explower)) {
return cpMessage(request, mapping,
"cp_integral_limit_duplication_with_other_user_group");
}
explowers.put(Common.intval(id), explower);
}
String sql = "SELECT gid,explower FROM " + JavaCenterHome.getTableName("usergroup")
+ " WHERE system = 0";
List<Map<String, Object>> values = dataBaseService.executeQuery(sql);
for (Map<String, Object> value : values) {
int id = (Integer) value.get("gid");
if (value.get("explower").equals(explowers.get(id))) {
explowers.remove(id);
}
}
if (!explowers.isEmpty()) {
Set<Integer> ids = explowers.keySet();
for (Integer id : ids) {
sql = "UPDATE " + JavaCenterHome.getTableName("usergroup") + " SET explower='"
+ explowers.get(id) + "' WHERE gid=" + id;
dataBaseService.executeUpdate(sql);
}
cacheService.usergroup_cache();
}
}
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=usergroup");
} else if (submitCheck(request, "copysubmit")) {
theValue.remove("grouptitle");
theValue.remove("gid");
theValue.remove("explower");
theValue.put("magicaward", Serializer.serialize(theValue.get("magicaward")));
Map<String, Object> copyValue = (Map) Common.sAddSlashes(theValue);
String[] aimGroups = request.getParameterValues("aimgroup");
if (aimGroups != null) {
for (int i = 0; i < aimGroups.length; i++) {
Set<String> keys = copyValue.keySet();
StringBuffer sql = new StringBuffer();
sql.append("UPDATE " + JavaCenterHome.getTableName("usergroup") + " SET ");
String comma = "";
for (String key : keys) {
sql.append(comma + key + "='" + copyValue.get(key) + "'");
comma = ",";
}
sql.append(" WHERE gid = " + aimGroups[i]);
dataBaseService.executeUpdate(sql.toString());
}
cacheService.usergroup_cache();
}
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=usergroup");
}
} catch (Exception e1) {
return showMessage(request, response, e1.getMessage());
}
String op = request.getParameter("op");
if (Common.empty(op)) {
String sql = "SELECT * FROM " + JavaCenterHome.getTableName("usergroup") + " ORDER BY explower";
List<Map<String, Object>> values = dataBaseService.executeQuery(sql);
Map<String, List<Object>> list = new HashMap<String, List<Object>>();
String system = null;
List<Object> temp = null;
for (Map<String, Object> value : values) {
value.put("color", Common.getColor(value));
value.put("icon", Common.getIcon(value));
system = String.valueOf(value.get("system"));
temp = list.get(system);
if (temp == null) {
temp = new ArrayList<Object>();
list.put(system, temp);
}
temp.add(value);
}
request.setAttribute("actives_view", " class='active'");
request.setAttribute("list", list);
} else if ("copy".equals(op)) {
String sql = "SELECT gid, grouptitle FROM " + JavaCenterHome.getTableName("usergroup")
+ " WHERE gid <> " + theValue.get("gid") + " AND system = " + theValue.get("system")
+ " ORDER BY explower";
List<Map<String, Object>> userGroups = dataBaseService.executeQuery(sql);
request.setAttribute("userGroups", userGroups);
} else if ("delete".equals(op) && !theValue.isEmpty()) {
int system = (Integer) theValue.get("system");
if (system == 0) {
dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("usergroup")
+ " WHERE gid = " + gid);
updateGroupExplower();
} else if (system == 1) {
dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("usergroup")
+ " WHERE gid = " + gid);
} else {
return cpMessage(request, mapping, "cp_system_user_group_could_not_be_deleted");
}
String sql = "UPDATE " + JavaCenterHome.getTableName("space")
+ " SET groupid = 0 WHERE groupid = " + gid;
dataBaseService.executeUpdate(sql);
try {
cacheService.usergroup_cache();
} catch (IOException e) {
e.printStackTrace();
}
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=usergroup");
} else {
if ("add".equals(op)) {
theValue = new HashMap<String, Object>();
theValue.put("gid", 0);
theValue.put("explower", 0);
theValue.put("maxattachsize", 10);
theValue.put("maxfriendnum", 50);
theValue.put("postinterval", 60);
theValue.put("searchinterval", 60);
theValue.put("domainlength", 0);
}
Common.getCacheDate(request, response, "/data/cache/cache_magic.jsp", "globalMagic");
request.setAttribute("discount", getDiscount());
}
request.setAttribute("thevalue", theValue);
return mapping.findForward("usergroup");
}
private Map<Integer, String> getDiscount() {
Map<Integer, String> discount = new LinkedHashMap<Integer, String>();
discount.put(0, "������");
discount.put(1, "1��");
discount.put(2, "2��");
discount.put(3, "3��");
discount.put(4, "4��");
discount.put(5, "5��");
discount.put(6, "6��");
discount.put(7, "7��");
discount.put(8, "8��");
discount.put(9, "9��");
discount.put(-1, "���");
return discount;
}
private void updateGroupExplower() {
String sql = "SELECT gid FROM " + JavaCenterHome.getTableName("usergroup")
+ " WHERE system = 0 ORDER BY explower LIMIT 1";
List<String> gids = dataBaseService.executeQuery(sql, 1);
if (!gids.isEmpty()) {
sql = "UPDATE " + JavaCenterHome.getTableName("usergroup")
+ " SET explower = -999999999 WHERE gid = " + gids.get(0);
dataBaseService.executeUpdate(sql);
}
}
}