⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 archiver.java

📁 论坛软件系统亦称电子公告板(BBS)系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
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 + -