📄 archiver.java
字号:
package cn.jsprun.struts.foreg.actions;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import cn.jsprun.foreg.vo.archiver.Foot_inc;
import cn.jsprun.foreg.vo.archiver.Forum;
import cn.jsprun.foreg.vo.archiver.Forum_inc;
import cn.jsprun.foreg.vo.archiver.Header_inc;
import cn.jsprun.foreg.vo.archiver.Index_inc;
import cn.jsprun.foreg.vo.archiver.Multi_inc;
import cn.jsprun.foreg.vo.archiver.Thread_inc;
import cn.jsprun.foreg.vo.archiver.Forum_inc.Thread;
import cn.jsprun.foreg.vo.archiver.WithHeaderAndFoot;
import cn.jsprun.foreg.vo.archiver.Index_inc.Forums;
import cn.jsprun.foreg.vo.archiver.Thread_inc.Posts;
import cn.jsprun.service.system.DataBaseService;
import cn.jsprun.utils.BeanFactory;
import cn.jsprun.utils.Common;
import cn.jsprun.utils.DataParse;
public class Archiver extends Action {
private final String tablepre = "jrun_";
private DataBaseService dataBaseService = (DataBaseService)BeanFactory.getBean("dataBaseService");
private DataParse dataParse = (DataParse)BeanFactory.getBean("dataParse");
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
String kw_spiders = "^.*Bot.*|.*Crawl.*|.*Spider.*$";
String kw_browsers = "^.*MSIE.*|.*Netscape.*|.*Opera.*|.*Konqueror.*|.*Mozilla.*$";
String kw_searchengines = "^.*google.*|.*yahoo.*|.*msn.*|.*baidu.*|.*yisou.*|.*sogou.*|.*iask.*|.*zhongsou.*|.*sohu.*|.*sina.*|.*163.*$";
Map<String,String> settingMap = (Map<String,String>)request.getAttribute("settings");
Map<String,String> _DCACHE_advsMap = (Map<String,String>)request.getAttribute("advs");
Map<String,String> forumsMap = (Map<String,String>)request.getAttribute("forums");
Map<String,Map<String,String>> forumsMap_catch = dataParse.characterParse(forumsMap.get("forums"), false);
String archiverstatus = settingMap.get("archiverstatus");
if(archiverstatus==null||archiverstatus.equals("")||archiverstatus.equals("0")){
request.setAttribute("resultInfo", "Sorry, JspRun! Archiver is not available.");
return mapping.findForward("showMessage");
}else if(settingMap.get("bbclosed").equals("1")){
request.setAttribute("resultInfo", "Sorry, the bulletin board has been closed temporarily.");
return mapping.findForward("showMessage");
}
String path = request.getContextPath();
String boardurl = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String navtitle = "";
String meta_contentadd = "";
int fid = 0;
int page = 0;
int tid = 0;
String rewritestatus = settingMap.get("rewritestatus");
String qm = (Integer.parseInt(rewritestatus) & 16) !=0 ?"":"?";
Map<String,String> fullversion = new HashMap<String, String>();
fullversion.put("title", settingMap.get("bbname"));
fullversion.put("link", settingMap.get("indexname"));
String fidString = request.getParameter("fid");
if(fidString!=null){
fid = Integer.parseInt(fidString);
}
String pageStrign = request.getParameter("page");
if(pageStrign!=null){
page = Integer.parseInt(pageStrign);
}
String tidString = request.getParameter("tid");
if(tidString!=null){
tid = Integer.parseInt(tidString);
}
String forward = null;
if(tid!=0){
forward = "viewthread.jsp?tid="+tid;
}else if(fid!=0){
forward = "forumdisplay.jsp?fid="+fid;
}else {
forward = "index.jsp";
}
int archiverstatus_int = Integer.parseInt(archiverstatus);
String user_agent = request.getHeader("user-agent");
String referer = request.getHeader("referer");
if(archiverstatus_int!=1
&& !user_agent.matches(kw_spiders)
&&(
(archiverstatus_int == 2 && referer!=null &&referer.matches(kw_searchengines))
||
(archiverstatus_int == 3 && user_agent.matches(kw_browsers))
)
){
response.sendRedirect(boardurl+forward);
return null;
}
String globaladvs = settingMap.get("globaladvs");
Map<String,Map<String,String>> advList = null;
Map<String,String> advitems = null;
if(globaladvs!=null&&!globaladvs.equals("")&&!globaladvs.equals("0")||_DCACHE_advsMap!=null&&_DCACHE_advsMap.size()>0){
Map<String,Map> advMap = showAdvertisements(_DCACHE_advsMap, settingMap);
advList = advMap.get("advlist");
advitems = advMap.get("advitems");
}
if(tid!=0){
Map<String,String> style_catch = (Map<String,String>)request.getAttribute("styles");
Thread_inc thread_inc = executeThread_inc(tid, page, qm, navtitle, meta_contentadd, boardurl, forumsMap_catch, style_catch, fullversion, settingMap, advList, advitems,(Float)request.getSession().getAttribute("timeoffset"));
request.setAttribute("valueObject", thread_inc);
return mapping.findForward("thread_inc");
}else if(fid!=0){
Forum_inc forum_inc = executeForum_inc(fid, page, navtitle, qm, boardurl, meta_contentadd, settingMap, advList,advitems,forumsMap_catch, fullversion);
String redirect = forum_inc.getRedirect();
if(redirect!=null){
response.sendRedirect(redirect);
return null;
}
request.setAttribute("valueObject", forum_inc);
return mapping.findForward("forum_inc");
}else {
Index_inc index_inc = executeIndex_inc(settingMap, advList, advitems, fullversion, boardurl, meta_contentadd, navtitle,qm);
request.setAttribute("valueObject", index_inc);
return mapping.findForward("index_inc");
}
}
private Index_inc executeIndex_inc(Map<String,String> settingMap,Map<String,Map<String,String>> advList,Map<String,String> advitems,Map<String,String> fullversion,String boardurl,String meta_contentadd,String navtitle,String qm){
Index_inc index_inc = new Index_inc();
index_inc.setQm(qm);
index_inc.setFullversion(fullversion);
index_inc.setSettingMap(settingMap);
List<Forums> groupList = index_inc.getGroupList();
String table = "forums f";
String cols = "f.fid, f.type, f.name, f.fup, f.simple, ff.viewperm, ff.formulaperm, a.uid";
String conditions = "LEFT JOIN "+tablepre+"forumfields ff ON ff.fid=f.fid LEFT JOIN "+tablepre+"access a ON a.fid=f.fid AND a.allowview='1' WHERE f.status>0 ORDER BY f.type, f.displayorder";
String sql = "SELECT "+cols+" FROM "+tablepre+table+" "+conditions;
List<Map<String,String>> forumsList = dataBaseService.executeQuery(sql);
Map<String,List<Map<String,String>>> forums = new HashMap<String, List<Map<String,String>>>();
Map<String,List<Map<String,String>>> subforums = new HashMap<String, List<Map<String,String>>>();
List<Map<String,String>> categories = new ArrayList<Map<String,String>>();
Map<String,String> tempMap = new HashMap<String, String>();
tempMap.put("fid", "0");
tempMap.put("name", settingMap.get("bbname"));
categories.add(tempMap);
for(Map<String,String> forum : forumsList){
if(forumperm(forum.get("viewperm"))){
String type = forum.get("type");
if(type.equals("group")){
tempMap = new HashMap<String, String>();
tempMap.put("fid", forum.get("fid"));
tempMap.put("name", Common.strip_tags(forum.get("name")));
categories.add(tempMap);
}else if(type.equals("sub") ){
String upForum_fid = forum.get("fup");
List<Map<String,String>> tempList_sbuForum = subforums.get(upForum_fid);
if(tempList_sbuForum==null){
tempList_sbuForum = new ArrayList<Map<String,String>>();
subforums.put(upForum_fid, tempList_sbuForum);
}
tempList_sbuForum.add(forum);
}else{
String group_fid = forum.get("fup");
List<Map<String,String>> tempList_forum = forums.get(group_fid);
if(tempList_forum==null){
tempList_forum = new ArrayList<Map<String,String>>();
forums.put(group_fid, tempList_forum);
}
tempList_forum.add(forum);
}
}
}
for(Map<String,String> category : categories){
String group_fid = category.get("fid");
List<Map<String,String>> tempList_forums = forums.get(group_fid);
if(tempList_forums!=null){
Forums forums_group = index_inc.getForums();
forums_group.setName(category.get("name"));
groupList.add(forums_group);
List<Forums> forumsList_inGroup = forums_group.getForumList();
for(Map<String,String> tempMap_forums : tempList_forums){
String forum_fid = tempMap_forums.get("fid");
Forums forums_forums = index_inc.getForums();
forums_forums.setFid(forum_fid);
forums_forums.setName(Common.strip_tags(tempMap_forums.get("name")));
forumsList_inGroup.add(forums_forums);
List<Map<String,String>> tempList_subFroums = subforums.get(forum_fid);
if(tempList_subFroums!=null){
List<Forums> subForumsList_inForum = forums_forums.getForumList();
for(Map<String,String> tempMap_subForum : tempList_subFroums){
Forums forums_subForums = index_inc.getForums();
forums_subForums.setFid(tempMap_subForum.get("fid"));
forums_subForums.setName(Common.strip_tags(tempMap_subForum.get("name")));
subForumsList_inForum.add(forums_subForums);
}
}
}
}
}
setHeaderAndFooter(index_inc, advList, advitems, settingMap, fullversion, boardurl, meta_contentadd, navtitle);
return index_inc;
}
private Forum_inc executeForum_inc(int fid,int page,String navtitle,String qm,String boardurl,String meta_contentadd,Map<String,String> settingMap ,Map<String,Map<String,String>> advList,Map<String,String> advitems,Map<String,Map<String,String>> forumsMap_catch,Map<String,String> fullversion){
Forum_inc forum_inc = new Forum_inc();
forum_inc.setBbname(settingMap.get("bbname"));
setHeaderAndFooter(forum_inc, advList, advitems, settingMap, fullversion, boardurl, meta_contentadd, navtitle);
List<Thread> threadList = forum_inc.getThreadList();
String sql = "SELECT * FROM "+tablepre+"forums f " +
"LEFT JOIN "+tablepre+"forumfields ff USING (fid) " +
"WHERE f.fid='"+fid+"' AND f.status>0 AND f.type<>'group' AND ff.password=''";
List<Map<String,String>> forumMapList = dataBaseService.executeQuery(sql);
if(forumMapList!=null&&forumMapList.size()!=0){
Map<String,String> forumMap = forumMapList.get(0);
String redirect = forumMap.get("redirect");
if(redirect!=null&&!"".equals(redirect)){
forum_inc.setRedirect(redirect);
return forum_inc;
}
if(forumperm(forumMap.get("viewperm"))&&forumformulaperm(forumMap.get("formulaperm"))){
Forum currentForum = new Forum();
currentForum.setFid(fid+"");
currentForum.setName(forumMap.get("name"));
forum_inc.setCurrentForum(currentForum);
boolean navsub = forumMap.get("type").equals("sub");
if(navsub){
String superFid = forumMap.get("fup");
String superForumName = Common.strip_tags(forumsMap_catch.get(superFid).get("name"));
navtitle = " - "+superForumName;
Forum superForum = new Forum();
superForum.setFid(superFid);
superForum.setName(superForumName);
forum_inc.setSuperForum(superForum);
}
page = Math.max(1, page);
navtitle += Common.strip_tags(forumMap.get("name"))+"(页"+" "+page+") - ";
fullversion.put("title", forumMap.get("name"));
fullversion.put("link", "forumdisplay.jsp?fid="+fid);
int tpp = Integer.parseInt(settingMap.get("topicperpage")) *2;
int start = (page - 1) * tpp;
sql = "SELECT * FROM "+tablepre+"threads WHERE fid='"+fid+"' AND displayorder>='0' ORDER BY displayorder DESC, lastpost DESC LIMIT "+start+", "+tpp;
List<Map<String,String>> threadMapList = dataBaseService.executeQuery(sql);
if(threadMapList!=null){
for(Map<String,String> threadMap : threadMapList){
Thread thread = forum_inc.getThread();
thread.setReplies(threadMap.get("replies"));
thread.setSubject(threadMap.get("subject"));
thread.setTid(threadMap.get("tid"));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -