package cn.jcenterhome.web.action.admin;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
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.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 EventAction extends BaseAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
boolean allowmanage = Common.checkPerm(request, response, "manageevent");
if (!allowmanage) {
return cpMessage(request, mapping, "cp_no_authority_management_operation");
}
Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal");
Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig");
int supe_uid = (Integer) sGlobal.get("supe_uid");
try {
if (submitCheck(request, "opsubmit")) {
String[] ids = request.getParameterValues("ids");
String opType = request.getParameter("optype");
if ("delete".equals(opType)) {
if (ids != null && adminDeleteService.deleteEvents(request, response, sGlobal, ids)) {
return cpMessage(request, mapping, "do_success", request.getParameter("mpurl"));
} else {
return cpMessage(request, mapping, "cp_choose_to_delete_the_columns_event");
}
}
Map<String, Integer> grademap = new HashMap<String, Integer>();
grademap.put("verify", 1);
grademap.put("delayverify", -1);
grademap.put("close", -2);
grademap.put("open", 1);
grademap.put("recommend", 2);
grademap.put("unrecommend", 1);
if (grademap.containsKey(opType)) {
int grade = grademap.get(opType);
if (ids != null && verifyEvents(request, response, sGlobal, grade, ids)) {
return cpMessage(request, mapping, "do_success", request.getParameter("mpurl"));
} else {
return cpMessage(request, mapping, "cp_choose_to_grade_the_columns_event");
}
} else {
return cpMessage(request, mapping, "cp_choice_batch_action");
}
}
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
if (Common.empty(request.getParameter("op"))) {
Common.getCacheDate(request, response, "/data/cache/cache_eventclass.jsp", "globalEventClass");
StringBuffer mpurl = new StringBuffer("admincp.jsp?ac=event");
String timeoffset = Common.getTimeOffset(sGlobal, sConfig);
Map<String, String[]> paramMap = request.getParameterMap();
String[] intkeys = new String[] { "eventid", "uid", "public", "grade", "classid" };
String[] strkeys = new String[] { "province", "city" };
List<String[]> randkeys = new ArrayList<String[]>();
randkeys.add(new String[] { "intval", "hot" });
String[] likekeys = new String[] { "title" };
Map<String, String> wheres = getWheres(intkeys, strkeys, randkeys, likekeys, "", paramMap,
timeoffset);
StringBuffer tempSQL = new StringBuffer();
String starttime = request.getParameter("starttime");
if (!Common.empty(starttime)) {
tempSQL.append(" AND starttime >= "
+ Common.strToTime(starttime, timeoffset, "yyyy-MM-dd HH:mm"));
mpurl.append("&starttime=" + starttime);
}
String endtime = request.getParameter("endtime");
if (!Common.empty(endtime)) {
tempSQL.append(" AND starttime <= "
+ Common.strToTime(endtime, timeoffset, "yyyy-MM-dd HH:mm"));
mpurl.append("&endtime=" + endtime);
}
String over = request.getParameter("over");
if ("1".equals(over)) {
tempSQL.append(" AND endtime < " + sGlobal.get("timestamp"));
mpurl.append("&over=1");
} else if ("0".equals(over)) {
tempSQL.append(" AND endtime >= " + sGlobal.get("timestamp"));
mpurl.append("&over=0");
}
String whereSQL = wheres.get("sql");
if (whereSQL != null) {
whereSQL += tempSQL;
} else if (tempSQL.length() > 0) {
whereSQL = tempSQL.substring(5);
} else {
whereSQL = "1";
}
mpurl.append(wheres.get("url"));
request.setAttribute("active_" + request.getParameter("grade"), " class='active'");
String activeGrade = request.getParameter("grade");
int grade = Common.intval(activeGrade);
if (activeGrade != null && grade == 0) {
activeGrade = "grade0";
} else if (grade == -1) {
activeGrade = "grade_1";
} else if (grade == 1) {
activeGrade = "grade1";
} else if (grade == -2) {
activeGrade = "grade_2";
} else if (grade == 2) {
activeGrade = "grade2";
} else {
activeGrade = "all";
}
request.setAttribute("active_" + activeGrade, " class=\"active\"");
Map<String, String> orders = getOrders(
new String[] { "dateline", "starttime", "membernum", "hot" }, "eventid", null, paramMap);
String ordersql = orders.get("sql");
mpurl.append(orders.get("url"));
request.setAttribute("orderby_" + request.getParameter("orderby"), " selected");
request.setAttribute("ordersc_" + request.getParameter("ordersc"), " selected");
int perpage = Common.intval(request.getParameter("perpage"));
if (!Common.in_array(new Integer[] { 20, 50, 100, 1000 }, perpage)) {
perpage = 20;
}
mpurl.append("&perpage=" + perpage);
request.setAttribute("perpage_" + perpage, " selected");
int page = Math.max(Common.intval(request.getParameter("page")), 1);
int start = (page - 1) * perpage;
int maxPage = (Integer) sConfig.get("maxpage");
String result = Common.ckStart(start, perpage, maxPage);
if (result != null) {
return showMessage(request, response, result);
}
boolean managebatch = Common.checkPerm(request, response, "managebatch");
boolean allowbatch = true;
int count = dataBaseService.findRows("SELECT COUNT(*) FROM "
+ JavaCenterHome.getTableName("event") + " WHERE " + whereSQL);
if (count > 0) {
List<Map<String, Object>> list = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("event") + " WHERE " + whereSQL + " " + ordersql
+ " LIMIT " + start + "," + perpage);
SimpleDateFormat eventSDF = Common.getSimpleDateFormat("MM-dd", timeoffset);
for (Map<String, Object> value : list) {
if (!managebatch && (Integer) value.get("uid") != supe_uid) {
allowbatch = false;
}
value.put("starttime", Common.gmdate(eventSDF, (Integer) value.get("starttime")));
value.put("endtime", Common.gmdate(eventSDF, (Integer) value.get("endtime")));
}
request.setAttribute("multi", Common.multi(request, count, perpage, page, maxPage, mpurl
.toString(), null, null));
request.setAttribute("list", list);
if(list.size()%perpage==1){
mpurl.append("&page="+(page-1));
}else{
mpurl.append("&page="+page);
}
}
request.setAttribute("FORMHASH", formHash(request));
request.setAttribute("count", count);
request.setAttribute("mpurl", mpurl);
request.setAttribute("allowbatch", allowbatch);
request.setAttribute("perpage", perpage);
}
return mapping.findForward("event");
}
private boolean verifyEvents(HttpServletRequest request, HttpServletResponse response,
Map<String, Object> sGlobal, int grade, String[] eventIds) throws Exception {
boolean allowmanage = Common.checkPerm(request, response, "manageevent");
boolean managebatch = Common.checkPerm(request, response, "managebatch");
int opnum = 0;
List<Map<String, Object>> eventList = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("event") + " WHERE eventid IN (" + Common.sImplode(eventIds)
+ ")");
for (int i = 0; i < eventList.size(); i++) {
if (allowmanage && !managebatch) {
opnum++;
}
}
if (!allowmanage || (!managebatch && opnum > 1)) {
return false;
}
if (!Common.in_array(new Integer[] { -2, -1, 1, 2 }, grade)) {
throw new Exception("bad_event_grade");
}
List<Integer> newIds = new ArrayList<Integer>();
Map<Integer, Map<String, Object>> events = new HashMap<Integer, Map<String, Object>>();
Map<Integer, String> actions = new HashMap<Integer, String>();
for (Map<String, Object> event : eventList) {
int eventGrade = (Integer) event.get("grade");
if (grade == eventGrade) {
continue;
}
int eventId = (Integer) event.get("eventid");
newIds.add(eventId);
events.put(eventId, event);
switch (grade) {
case -2:
actions.put(eventId, "close");
break;
case -1:
actions.put(eventId, "unverify");
break;
case 1:
if (eventGrade == -2) {
actions.put(eventId, "open");
} else if (eventGrade < 1) {
actions.put(eventId, "verify");
} else if (eventGrade == 2) {
actions.put(eventId, "unrecommend");
}
break;
case 2:
actions.put(eventId, "recommend");
break;
}
}
if (newIds.isEmpty()) {
return false;
}
Map<Integer, Map<String, Object>> globalEventClass = Common.getCacheDate(request, response,
"/data/cache/cache_eventclass.jsp", "globalEventClass");
List<Integer> noteids = new ArrayList<Integer>();
List<String> note_inserts = new ArrayList<String>();
List<String> feed_inserts = new ArrayList<String>();
Map<String, String> jchConfig = JavaCenterHome.jchConfig;
int supe_uid = (Integer) sGlobal.get("supe_uid");
int timestamp = (Integer) sGlobal.get("timestamp");
Map<String, Object> sConfig = (Map<String, Object>) request.getAttribute("sConfig");
for (Integer id : newIds) {
Map<String, Object> event = events.get(id);
int eventId = (Integer) event.get("eventid");
int uid = (Integer) event.get("uid");
int eventGrade = (Integer) event.get("grade");
String title = (String) event.get("title");
if (grade >= 1 && eventGrade < 1 && eventGrade >= -1) {
String poster = null;
if (Common.empty(event.get("poster"))) {
poster = (String) (globalEventClass.get(event.get("classid"))).get("poster");
} else {
poster = Common.pic_get(sConfig, (String) event.get("poster"), (Integer) event
.get("thumb"), (Integer) event.get("remote"), true);
}
Map<String, Object> title_data = new HashMap<String, Object>();
title_data.put("eventid", id);
title_data.put("title", title);
Map<String, Object> body_data = new HashMap<String, Object>();
body_data.put("eventid", id);
body_data.put("title", event.get("title"));
body_data.put("username", event.get("username"));
body_data.put("starttime", Common.sgmdate(request, "MM-dd HH:mm", (Integer) event
.get("starttime")));
body_data.put("endtime", Common.sgmdate(request, "MM-dd HH:mm", (Integer) event
.get("endtime")));
body_data.put("province", event.get("province"));
body_data.put("city", event.get("city"));
body_data.put("location", event.get("location"));
Map<String, Object> feedarr = new HashMap<String, Object>();
feedarr.put("appid", Common.intval(jchConfig.get("JC_APPID")));
feedarr.put("icon", "event");
feedarr.put("username", event.get("username"));
feedarr.put("title_template", Common.getMessage(request, "cp_event_add"));
feedarr.put("title_data", title_data);
feedarr.put("body_template", Common.getMessage(request, "cp_event_feed_info"));
feedarr.put("body_data", body_data);
feedarr.put("image_1", poster);
feedarr = (Map<String, Object>) Common.sStripSlashes(feedarr);
feedarr.put("title_data", Serializer.serialize(Common
.sStripSlashes(feedarr.get("title_data"))));
feedarr
.put("body_data", Serializer
.serialize(Common.sStripSlashes(feedarr.get("body_data"))));
feedarr.put("hash_template", Common.md5(feedarr.get("title_template") + "\t"
+ feedarr.get("body_template")));
feedarr.put("hash_data", Common.md5(feedarr.get("title_template") + "\t"
+ feedarr.get("title_data") + "\t" + feedarr.get("body_template") + "\t"
+ feedarr.get("body_data")));
feedarr = (Map<String, Object>) Common.sAddSlashes(feedarr);
feed_inserts.add("('" + feedarr.get("appid") + "', 'event', " + uid + ", '"
+ feedarr.get("username") + "', " + timestamp + ", 0, '"
+ feedarr.get("hash_template") + "', '" + feedarr.get("hash_data") + "', '"
+ feedarr.get("title_template") + "', '" + feedarr.get("title_data") + "', '"
+ feedarr.get("body_template") + "', '" + feedarr.get("body_data") + "', '', '"
+ feedarr.get("image_1") + "', 'space.jsp?do=event&id=" + id
+ "', '', '', '', '', '', '', '', " + id + ", 'eventid')");
}
if (uid != supe_uid) {
noteids.add(uid);
String note_msg = Common.getMessage(request, "cp_event_set_" + actions.get(id),
"space.jsp?do=event&id=" + eventId, title);
note_inserts.add("('" + event.get("uid") + "', 'system', '1', '0', '', '"
+ Common.addSlashes(note_msg) + "', '" + timestamp + "')");
}
}
String idStr = Common.sImplode(newIds);
if (grade == 2) {
dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("event") + " SET grade="
+ grade + ", recommendtime=" + timestamp + " WHERE eventid IN (" + idStr + ")");
} else {
dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("event") + " SET grade="
+ grade + " WHERE eventid IN (" + idStr + ")");
}
if (note_inserts.size() > 0) {
dataBaseService.executeUpdate("INSERT INTO " + JavaCenterHome.getTableName("notification")
+ " (uid, type, new, authorid, author,note, dateline) VALUES "
+ Common.implode(note_inserts, ","));
dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("space")
+ " SET notenum=notenum+1 WHERE uid IN (" + Common.sImplode(noteids) + ")");
}
if (feed_inserts.size() > 0) {
String sql = "INSERT INTO "
+ JavaCenterHome.getTableName("feed")
+ " (appid ,icon ,uid ,username ,dateline ,friend ,hash_template ,hash_data ,title_template ,title_data ,body_template ,body_data ,body_general ,image_1 ,image_1_link ,image_2 ,image_2_link ,image_3 ,image_3_link ,image_4 ,image_4_link ,target_ids ,id ,idtype) VALUES "
+ Common.implode(feed_inserts, ",");
dataBaseService.executeUpdate(sql);
}
return true;
}
}