package cn.jcenterhome.web.action.admin;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
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.web.action.BaseAction;
public class ProfilefieldAction extends BaseAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
if (!Common.checkPerm(request, response, "manageprofilefield")) {
return cpMessage(request, mapping, "cp_no_authority_management_operation");
}
Map<String, Object> thevalue = null;
List<Map<String, Object>> list = null;
String fieldidString = request.getParameter("fieldid");
int fieldid = Common.empty(fieldidString) ? 0 : Common.intval(fieldidString);
if (fieldid != 0) {
List<Map<String, Object>> tempML = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("profilefield") + " WHERE fieldid='" + fieldid + "'");
if (tempML.size() > 0) {
thevalue = tempML.get(0);
}
}
String op = request.getParameter("op");
if (!Common.empty(op) && !op.equals("add") && Common.empty(thevalue)) {
return cpMessage(request, mapping, "cp_there_is_no_designated_users_columns");
}
boolean isFieldSubmit = false;
boolean isOrderSubmit = false;
try {
isFieldSubmit = submitCheck(request, "fieldsubmit");
isOrderSubmit = submitCheck(request, "ordersubmit");
} catch (Exception e1) {
return showMessage(request, response, e1.getMessage());
}
if (isFieldSubmit) {
Map<String, Object> setarr = new HashMap<String, Object>();
String tempS = request.getParameter("title");
if(Common.empty(tempS)){
return cpMessage(request, mapping, "cp_profile_title_can_not_be_empty");
}
setarr.put("title", Common.sHtmlSpecialChars(tempS.trim()));
tempS = request.getParameter("note");
setarr.put("note", tempS == null ? "" : Common.sHtmlSpecialChars(tempS.trim()));
tempS = request.getParameter("formtype");
setarr.put("formtype", tempS == null ? "" : Common.sHtmlSpecialChars(tempS.trim()));
int maxsize = Common.intval(request.getParameter("maxsize"));
if (maxsize < 1 || maxsize > 255) {
maxsize = 50;
}
setarr.put("maxsize", maxsize);
setarr.put("required", Common.intval(request.getParameter("required")));
setarr.put("invisible", Common.intval(request.getParameter("invisible")));
setarr.put("allowsearch", Common.intval(request.getParameter("allowsearch")));
tempS = request.getParameter("choice");
setarr.put("choice", tempS == null ? "" : Common.sHtmlSpecialChars(tempS.trim()));
setarr.put("displayorder", Common.intval(request.getParameter("displayorder")));
if (thevalue == null || Common.empty(thevalue.get("fieldid"))) {
int fieldid_ = dataBaseService.insertTable("profilefield", setarr, true, false);
String sql = "ALTER TABLE " + JavaCenterHome.getTableName("spacefield") + " ADD `field_"
+ fieldid_ + "` varchar(" + maxsize + ") NOT NULL default ''";
Map<String, Object> tempM = dataBaseService.execute(sql);
Object success = tempM.get("sucess");
if (success == null && ((Integer) success) == 0) {
sql = "DELETE FROM " + JavaCenterHome.getTableName("profilefield") + " WHERE fieldid='"
+ fieldid_ + "'";
dataBaseService.execute(sql);
}
} else {
String sql = "ALTER TABLE " + JavaCenterHome.getTableName("spacefield") + " CHANGE `field_"
+ thevalue.get("fieldid") + "` `field_" + thevalue.get("fieldid") + "` varchar("
+ maxsize + ") NOT NULL default ''";
Map<String, Object> tempM = dataBaseService.execute(sql);
Object success = tempM.get("sucess");
if (success == null && ((Integer) success) == 0) {
return cpMessage(request, mapping, "cp_failed_to_change_the_length_of_columns",
"admincp.jsp?ac=profilefield", 1);
}
Map<String, Object> whereData = new HashMap<String, Object>();
whereData.put("fieldid", thevalue.get("fieldid"));
dataBaseService.updateTable("profilefield", setarr, whereData);
}
try {
cacheService.profilefield_cache();
} catch (IOException e) {
e.printStackTrace();
}
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=profilefield", 1);
} else if (isOrderSubmit) {
Map<String, String> displayorder = (Map<String, String>) getParameters(request, "displayorder");
if (displayorder != null) {
String key, value;
for (Entry<String, String> entry : displayorder.entrySet()) {
key = entry.getKey();
value = entry.getValue();
Map<String, Object> setData = new HashMap<String, Object>(1);
setData.put("displayorder", Common.intval(value));
Map<String, Object> whereData = new HashMap<String, Object>(1);
whereData.put("fieldid", Common.intval(key));
dataBaseService.updateTable("profilefield", setData, whereData);
}
try {
cacheService.profilefield_cache();
} catch (IOException e) {
e.printStackTrace();
}
}
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=profilefield", 1);
}
if (Common.empty(op)) {
list = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("profilefield") + " ORDER BY displayorder");
Map<String, String> actives = new HashMap<String, String>();
actives.put("view", " class=\"active\"");
request.setAttribute("actives", actives);
request.setAttribute("list", list);
} else if (op.equals("add")) {
thevalue = new HashMap<String, Object>();
thevalue.put("filedid", 0);
thevalue.put("formtype", "text");
thevalue.put("maxsize", 50);
request.setAttribute("thevalue", thevalue);
Map<String, String> formtypearr = new HashMap<String, String>();
request.setAttribute("formtypearr", formtypearr);
} else if (op.equals("edit")) {
Map<String, String> formtypearr = new HashMap<String, String>();
formtypearr.put(String.valueOf(thevalue.get("formtype")), " selected");
request.setAttribute("formtypearr", formtypearr);
request.setAttribute("thevalue", thevalue);
} else if (op.equals("delete")) {
if (fieldid != 0
&& adminDeleteService.deleteProfilefield(request, response, new String[] {String
.valueOf(fieldid)})) {
try {
cacheService.profilefield_cache();
} catch (IOException e) {
e.printStackTrace();
}
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=profilefield", 1);
} else {
return cpMessage(request, mapping, "cp_choose_to_delete_the_columns",
"admincp.jsp?ac=profilefield", 1);
}
}
Map<String, Map<String, String>> _TPL = new HashMap<String, Map<String, String>>();
Map<String, String> formtypes = new HashMap<String, String>();
_TPL.put("formtypes", formtypes);
formtypes.put("text", "�ı�����");
formtypes.put("select", "��ѡ�б�");
formtypes.put("multi", "��ѡ�б�");
request.setAttribute("_TPL", _TPL);
request.setAttribute("FORMHASH", formHash(request));
return mapping.findForward("profilefield");
}
private Object getParameters(HttpServletRequest request, String prefix) {
return getParameters(request, prefix, false);
}
private Object getParameters(HttpServletRequest request, String prefix, boolean isCheckBox) {
Map<String, String[]> primalParameters = request.getParameterMap();
if (primalParameters == null) {
return null;
}
Map<String, Object> result = new HashMap<String, Object>();
String key;
String[] value;
String prefix_ = null;
if (prefix != null) {
prefix_ = prefix + "[";
}
for (Entry<String, String[]> primalPE : primalParameters.entrySet()) {
key = primalPE.getKey();
if (prefix == null || key.startsWith(prefix_)) {
value = primalPE.getValue();
if (!getParametersSetResultMap(result, key, value, isCheckBox)) {
return null;
}
}
}
if (prefix != null) {
return result.get(prefix);
}
return result;
}
private String disposeParameter(String parameterName) {
if (parameterName.endsWith("[]")) {
return parameterName.substring(0, parameterName.length() - 2);
} else {
return parameterName;
}
}
private boolean getParametersSetResultMap(Map<String, Object> result, String key, String[] value,
boolean isCheckBox) {
key = disposeParameter(key);
return getParametersParseKey(new StringBuilder(key), result, value, isCheckBox);
}
private boolean getParametersParseKey(StringBuilder operatingKey, Map<String, Object> supMap,
String[] value, boolean isCheckBox) {
int tempI = operatingKey.indexOf("[");
int tempII = operatingKey.indexOf("]");
if (tempI < 0) {
putValue(supMap, operatingKey.toString(), value, isCheckBox);
return true;
} else if (tempII < tempI) {
return false;
}
String subKey = operatingKey.substring(0, tempI);
Map<String, Object> subMap = (Map<String, Object>) supMap.get(subKey);
if (subMap == null) {
subMap = new HashMap<String, Object>();
supMap.put(subKey, subMap);
}
operatingKey.deleteCharAt(tempII);
operatingKey.delete(0, tempI + 1);
return getParametersParseKey(operatingKey, subMap, value, isCheckBox);
}
private void putValue(Map<String, Object> targetMap, String key, String[] value, boolean isCheckBox) {
if (isCheckBox || value == null || value.length == 0) {
targetMap.put(key, value);
} else {
targetMap.put(key, value[0]);
}
}
}