package cn.jcenterhome.web.action.admin;
import java.text.SimpleDateFormat;
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 ReportAction extends BaseAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
boolean allowmanage = Common.checkPerm(request, response, "managereport");
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");
try {
if (submitCheck(request, "listsubmit")) {
String[] ids = request.getParameterValues("ids");
if (ids != null) {
int optype = Common.intval(request.getParameter("optype"));
if (optype == 1) {
dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("report")
+ " SET num=0 WHERE rid IN (" + Common.sImplode(ids) + ")");
} else {
if (optype == 3) {
deleteInfo(request, response, sGlobal, ids);
}
dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("report")
+ " WHERE rid IN (" + Common.sImplode(ids) + ")");
}
return cpMessage(request, mapping, "do_success", request.getParameter("mpurl"));
} else {
return cpMessage(request, mapping, "choosing_to_operate_the_report");
}
}
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
String op = request.getParameter("op");
if (op != null) {
int rid = Common.intval(request.getParameter("rid"));
if (rid == 0) {
return cpMessage(request, mapping, "cp_the_right_to_report_the_specified_id",
"admincp.jsp?ac=report");
}
if ("delete".equals(op)) {
if ("delinfo".equals(request.getParameter("subop"))) {
try {
deleteInfo(request, response, sGlobal, rid);
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
}
dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("report")
+ " WHERE rid=" + rid);
} else if ("ignore".equals(op)) {
dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("report")
+ " SET num=0 WHERE rid=" + rid);
}
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=report");
}
String status = request.getParameter("status");
Map<String, String[]> paramMap = request.getParameterMap();
String[] intKeys = null;
if (status == null || "".equals(status) || Common.intval(status) == 1) {
paramMap.put("num1", new String[] { "1" });
paramMap.put("status", new String[] { "1" });
} else if (Common.intval(status) == 0) {
paramMap.put("num", new String[] { "0" });
paramMap.put("num1", new String[] { "0" });
intKeys = new String[] { "num" };
}
StringBuffer mpurl = new StringBuffer("admincp.jsp?ac=report");
String[] strkeys = new String[] { "idtype" };
List<String[]> randkeys = new ArrayList<String[]>();
randkeys.add(new String[] { "intval", "num" });
Map<String, String> wheres = getWheres(intKeys, strkeys, randkeys, null, "", paramMap, null);
String whereSQL = wheres.get("sql") == null ? "1" : wheres.get("sql");
mpurl.append(wheres.get("url"));
request.setAttribute("active_" + request.getParameter("status"), " class='active'");
Map<String, String> orders = getOrders(new String[] { "dateline", "num" }, "new,num", 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");
request.setAttribute("scstr", "asc".equals(request.getParameter("ordersc")) ? "desc" : "asc");
int perpage = Common.intval(request.getParameter("perpage"));
if (!Common.in_array(new Integer[] { 20, 50, 100, 1000 }, perpage)) {
perpage = 20;
}
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);
}
int count = 1;
String selectsql = null;
if (perpage > 100) {
selectsql = "rid";
} else {
count = dataBaseService.findRows("SELECT COUNT(*) FROM " + JavaCenterHome.getTableName("report")
+ " WHERE " + whereSQL);
selectsql = "*";
}
mpurl.append("&perpage=" + perpage);
request.setAttribute("perpage_" + perpage, " selected");
if (count > 0) {
List<Map<String, Object>> reportList = dataBaseService.executeQuery("SELECT " + selectsql
+ " FROM " + JavaCenterHome.getTableName("report") + " WHERE " + whereSQL + " "
+ ordersql + " LIMIT " + start + "," + perpage);
request.setAttribute("multi", Common.multi(request, count, perpage, page, maxPage, mpurl
.toString(), null, null));
if (perpage > 100) {
count = reportList.size();
request.setAttribute("list", reportList);
} else {
String timeoffset = Common.getTimeOffset(sGlobal, sConfig);
SimpleDateFormat reportSDF = Common.getSimpleDateFormat("yyyy-MM-dd", timeoffset);
List<Integer> readIds = new ArrayList<Integer>();
Map<String, Integer> emptyIds = new HashMap<String, Integer>();
Map<String, List<Integer>> ids = new LinkedHashMap<String, List<Integer>>();
Map<String, Map<Integer, Map<String, Object>>> list = new LinkedHashMap<String, Map<Integer, Map<String, Object>>>();
for (Map<String, Object> report : reportList) {
int rid = (Integer) report.get("rid");
int id = (Integer) report.get("id");
String idType = (String) report.get("idtype");
String infoId = idType + id;
report.put("dateline", Common.gmdate(reportSDF, (Integer) report.get("dateline")));
report.put("user", Serializer.unserialize((String) report.get("uids"), false));
report.put("infoId", infoId);
emptyIds.put(infoId, rid);
if ((Integer) report.get("new") > 0) {
readIds.add(rid);
}
List<Integer> temp = ids.get(idType);
if (temp == null) {
temp = new ArrayList<Integer>();
ids.put(idType, temp);
}
temp.add(id);
Map<Integer, Map<String, Object>> blogs = list.get(idType);
if (blogs == null) {
blogs = new LinkedHashMap<Integer, Map<String, Object>>();
list.put(idType, blogs);
}
blogs.put(id, report);
}
if (readIds.size() > 0) {
dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("report")
+ " SET new=0 WHERE rid IN(" + Common.implode(readIds, ",") + ")");
}
List<Map<String, Object>> temps;
Set<String> idTypes = ids.keySet();
for (String idType : idTypes) {
String newIds = Common.sImplode(ids.get(idType));
if ("blogid".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("blog") + " WHERE blogid IN (" + newIds + ")");
for (Map<String, Object> blog : temps) {
int blogId = (Integer) blog.get("blogid");
list.get(idType).get(blogId).put("info", blog);
emptyIds.remove(idType + blogId);
}
} else if ("picid".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("pic") + " WHERE picid IN (" + newIds + ")");
for (Map<String, Object> pic : temps) {
int picId = (Integer) pic.get("picid");
pic.put("pic", Common.pic_get(sConfig, (String) pic.get("filepath"),
(Integer) pic.get("thumb"), (Integer) pic.get("remote"), true));
list.get(idType).get(picId).put("info", pic);
emptyIds.remove(idType + picId);
}
} else if ("albumid".equals(idType)) {
temps = dataBaseService
.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("album")
+ " WHERE albumid IN (" + newIds + ")");
for (Map<String, Object> album : temps) {
int albumId = (Integer) album.get("albumid");
album.put("pic", Common.pic_cover_get(sConfig, (String) album.get("pic"),
(Integer) album.get("picflag")));
list.get(idType).get(albumId).put("info", album);
emptyIds.remove(idType + albumId);
}
} else if ("tid".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("thread") + " WHERE tid IN (" + newIds + ")");
for (Map<String, Object> thread : temps) {
int tid = (Integer) thread.get("tid");
list.get(idType).get(tid).put("info", thread);
emptyIds.remove(idType + tid);
}
} else if ("tagid".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("mtag") + " WHERE tagid IN (" + newIds + ")");
for (Map<String, Object> mtag : temps) {
int tagId = (Integer) mtag.get("tagid");
list.get(idType).get(tagId).put("info", mtag);
emptyIds.remove(idType + tagId);
}
} else if ("sid".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("share") + " WHERE sid IN (" + newIds + ")");
SimpleDateFormat shareSDF = Common
.getSimpleDateFormat("yyyy-MM-dd HH:mm", timeoffset);
for (Map<String, Object> share : temps) {
Common.mkShare(share);
int sid = (Integer) share.get("sid");
share.put("dateline", Common.gmdate(shareSDF, (Integer) share.get("dateline")));
list.get(idType).get(sid).put("info", share);
emptyIds.remove(idType + sid);
}
} else if ("uid".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("space") + " WHERE uid IN (" + newIds + ")");
for (Map<String, Object> space : temps) {
int uid = (Integer) space.get("uid");
space.put("avatar", Common.avatar(uid, "middle", false, sGlobal, sConfig));
list.get(idType).get(uid).put("info", space);
emptyIds.remove(idType + uid);
}
} else if ("eventid".equals(idType)) {
temps = dataBaseService
.executeQuery("SELECT * FROM " + JavaCenterHome.getTableName("event")
+ " WHERE eventid IN (" + newIds + ")");
for (Map<String, Object> event : temps) {
int eventId = (Integer) event.get("eventid");
list.get(idType).get(eventId).put("info", event);
emptyIds.remove(idType + eventId);
}
} else if ("pid".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("poll") + " WHERE pid IN (" + newIds + ")");
for (Map<String, Object> poll : temps) {
int pid = (Integer) poll.get("pid");
list.get(idType).get(pid).put("info", poll);
emptyIds.remove(idType + pid);
}
} else if ("comment".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("comment") + " WHERE cid IN (" + newIds + ")");
try {
for (Map<String, Object> comment : temps) {
int id = (Integer) comment.get("id");
int cid = (Integer) comment.get("cid");
StringBuffer url = new StringBuffer();
url.append("space.jsp?uid=" + comment.get("uid") + "&do=");
String commentIdType = (String) comment.get("idtype");
if ("uid".equals(commentIdType)) {
url.append("wall&view=me&cid=" + cid);
} else if ("picid".equals(commentIdType)) {
url.append("album&picid=" + id + "&cid=" + cid);
} else if ("blogid".equals(commentIdType)) {
url.append("blog&id=" + id + "&cid=" + cid);
} else if ("sid".equals(commentIdType)) {
url.append("share&id=" + id + "&cid=" + cid);
} else if ("pid".equals(commentIdType)) {
url.append("poll&pid=" + id + "&cid=" + cid);
} else if ("eventid".equals(commentIdType)) {
url.append("event&id=" + id + "&cid=" + cid);
}
comment.put("url", url.toString());
comment.put("message", Common.getStr((String) comment.get("message"), 150,
true, true, false, 0, -1, request, response));
list.get(idType).get(cid).put("info", comment);
emptyIds.remove("comment" + cid);
}
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
} else if ("post".equals(idType)) {
temps = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("post") + " WHERE pid IN (" + newIds + ")");
try {
for (Map<String, Object> post : temps) {
int pid = (Integer) post.get("pid");
post.put("message", Common.getStr((String) post.get("message"), 150, false,
false, false, 0, 0, request, response));
list.get(idType).get(pid).put("info", post);
emptyIds.remove(idType + pid);
}
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
}
}
if (emptyIds.size() > 0) {
dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("report")
+ " WHERE rid IN (" + Common.sImplode(emptyIds) + ")");
}
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("allowmanage", allowmanage);
request.setAttribute("perpage", perpage);
Map<String, String> idTypes = new LinkedHashMap<String, String>();
idTypes.put("picid", "ͼƬ");
idTypes.put("albumid", "���");
idTypes.put("blogid", "��־");
idTypes.put("tagid", "Ⱥ��");
idTypes.put("tid", "����");
idTypes.put("uid", "�ռ�");
idTypes.put("sid", "����");
idTypes.put("pid", "ͶƱ");
idTypes.put("eventid", "�");
idTypes.put("comment", "����");
idTypes.put("post", "����ظ�");
request.setAttribute("idTypes", idTypes);
return mapping.findForward("report");
}
private void deleteInfo(HttpServletRequest request, HttpServletResponse response,
Map<String, Object> sGlobal, Object ids) throws Exception {
int supe_uid = (Integer) sGlobal.get("supe_uid");
List<Map<String, Object>> reportList = dataBaseService.executeQuery("SELECT id, idtype, uids FROM "
+ JavaCenterHome.getTableName("report") + " WHERE rid IN (" + Common.sImplode(ids) + ")");
TreeMap<Integer, String> users = null;
List<Integer> reportUser = new ArrayList<Integer>();
Map<String, List<Integer>> delType = new HashMap<String, List<Integer>>();
for (Map<String, Object> report : reportList) {
users = (TreeMap<Integer, String>) Serializer.unserialize((String) report.get("uids"), true);
reportUser.add(users.firstKey());
String idType = (String) report.get("idtype");
List<Integer> reportIds = delType.get(idType);
if (reportIds == null) {
reportIds = new ArrayList<Integer>();
delType.put(idType, reportIds);
}
reportIds.add((Integer) report.get("id"));
}
Map<String, Object> member = (Map<String, Object>) sGlobal.get("member");
int gid = Common.getGroupid(request, response, (Integer) member.get("experience"), (Integer) member
.get("groupid"));
Map<String, Object> usergroup = (Map<String, Object>) request.getAttribute("usergroup" + gid);
usergroup.put("managebatch", 1);
int i = 0;
Set<String> idTypes = delType.keySet();
for (String idType : idTypes) {
List<Integer> reportIds = delType.get(idType);
if ("blogid".equals(idType)) {
usergroup.put("manageblog", 1);
adminDeleteService.deleteBlogs(request, response, supe_uid, reportIds);
} else if ("picid".equals(idType)) {
usergroup.put("managealbum", 1);
adminDeleteService.deletePics(request, response, supe_uid, reportIds);
} else if ("albumid".equals(idType)) {
usergroup.put("managealbum", 1);
adminDeleteService.deleteAlbums(request, response, supe_uid, reportIds);
} else if ("tid".equals(idType)) {
usergroup.put("managethread", 1);
adminDeleteService.deleteThreads(request, response, supe_uid, 0, reportIds);
} else if ("tagid".equals(idType)) {
usergroup.put("managemtag", 1);
adminDeleteService.deleteMtag(request, response, reportIds);
} else if ("sid".equals(idType)) {
usergroup.put("manageshare", 1);
adminDeleteService.deleteShares(request, response, supe_uid, reportIds);
} else if ("uid".equals(idType)) {
usergroup.put("managedelspace", 1);
for (Integer uid : reportIds) {
adminDeleteService.deleteSpace(request, response, uid, false);
}
} else if ("eventid".equals(idType)) {
usergroup.put("manageevent", 1);
adminDeleteService.deleteEvents(request, response, sGlobal, reportIds);
} else if ("pid".equals(idType)) {
usergroup.put("managepoll", 1);
adminDeleteService.deletePolls(request, response, supe_uid, reportIds);
} else if ("comment".equals(idType)) {
usergroup.put("managecomment", 1);
adminDeleteService.deleteComments(request, response, supe_uid, reportIds);
} else if ("post".equals(idType)) {
usergroup.put("managethread", 1);
adminDeleteService.deletePosts(request, response, supe_uid, 0, reportIds);
}
Common.getReward("report", true, reportUser.get(i), "", false, request, response);
i++;
}
}
}