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

📄 javascriptaction.java

📁 论坛软件系统亦称电子公告板(BBS)系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package cn.jsprun.struts.foreg.actions;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import cn.jsprun.service.system.DataBaseService;
import cn.jsprun.service.system.SystemToolService;
import cn.jsprun.utils.BeanFactory;
import cn.jsprun.utils.Common;
import cn.jsprun.utils.DataParse;
import cn.jsprun.utils.JspRunConfig;
import cn.jsprun.utils.Md5Token;

public class JavaScriptAction extends DispatchAction {
	private DataBaseService dataBaseService = (DataBaseService) BeanFactory.getBean("dataBaseService");
	private DataParse dataParse = (DataParse) BeanFactory.getBean("dataParse");
	private SystemToolService systemToolServer = (SystemToolService) BeanFactory.getBean("systemToolServer");
	@SuppressWarnings("unused")
	private int convertInt(String s) {
		int count = 0;
		try {
			count = Integer.valueOf(s);
		} catch (Exception e) {
		}
		return count;
	}

	@SuppressWarnings("unchecked")
	public ActionForward jspreview(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		Map<String,String> settings = (Map<String,String>)request.getAttribute("settings");
		String jsstatus = settings.get("jsstatus");
		if(jsstatus==null||jsstatus.equals("0")){
			writeMessage(response,"document.write(\"<font color=red>The webmaster did not enable this feature.</font>\");");
			return null;
		}
		String jsrefdomains = settings.get("jsrefdomains");
		String httprefere = request.getHeader("Referer");
		if(jsrefdomains!=null&&!jsrefdomains.equals("")&&(httprefere==null||!in_array(request.getRemoteHost(),jsrefdomains,"\r\n"))){
			writeMessage(response,"document.write(\"<font color=red>Referer restriction is taking effect.</font>\");");
			return null;
		}
		String key = request.getParameter("key");
		if(Common.isEmpty(key)){
			writeMessage(response,"document.write(\"<font color=red>Authentication failed.</font>\");");
			return null;
		}
		String value = settings.get("jswizard_"+key);
		if(value==null){
			if(key.indexOf("_preview")!=-1){
				settings = (Map<String,String>)request.getSession().getServletContext().getAttribute("fsmap");
				value = settings.get("jswizard_"+key);
			}
			if(value==null){
				writeMessage(response,"document.write(\"<font color=red>Authentication failed.</font>\");");
				return null;
			}
		}
		String cachefiles = servlet.getServletContext().getRealPath("/")+"./forumdata/cache/javascript_"+key+".jsp";
		File file = new File(cachefiles);
		if(file.exists()){
			try {
				request.getRequestDispatcher("forumdata/cache/javascript_"+key+".jsp").include(request, response);
			} catch (ServletException e) {
			} catch (IOException e) {
			}
		}
		int timestamp = (Integer)(request.getAttribute("timestamp"));
		Map<String,String> cachelife = (Map<String,String>)request.getAttribute("js_"+key);
		int expiration = cachelife==null?0:convertInt(cachelife.get("expiration"));
		String datalist = cachelife==null?"":cachelife.get("datalist");
		if(cachelife==null || expiration<timestamp){
			Map valuemap = dataParse.characterParse(value, false);
			String boardurl = (String)request.getSession().getAttribute("boardurl");
			String function = valuemap.get("url")!=null?valuemap.get("url").toString():"";
			Map paramMap = (Map) valuemap.get("parameter");
			if(!function.startsWith("function=custom")){
				int jscachelife = paramMap.get("cachelife")!=null&&!paramMap.get("cachelife").equals("")?convertInt(paramMap.get("cachelife").toString()):convertInt(settings.get("jscachelife"));
				datalist = jsmodule(function,paramMap,settings,boardurl);
				if(datalist==null){
					writeMessage(response,"document.write(\"<font color=red>Undefined action.</font>\");");
					return null;
				}
				Map<String,String> datamap = new HashMap<String,String>();
				int expistring= timestamp+jscachelife;
				datamap.put("expiration", expistring+"");
				datalist = "document.write(\""+datalist+"\");";
				datamap.put("datalist", datalist);
				String date = arrayeval("js_"+key,datamap);
				updateCache(cachefiles,date,response);
			}else{
				int jscachelife = paramMap.get("cachelife")!=null&&!paramMap.get("cachelife").equals("")?convertInt(paramMap.get("cachelife").toString()):convertInt(settings.get("jscachelife"));
				String jstemplate = (String) paramMap.get("jstemplate");
				Set<String> keyset = new HashSet<String>();
				if(Common.matches(jstemplate, "\\[module\\](.+?)\\[/module\\]")){
					int count = 0;
					while(Common.matches(jstemplate, "\\[module\\](.+?)\\[/module\\]")&&count<5){
						String modulekey = jstemplate.replaceFirst("\\[module\\](.+?)\\[/module\\]", "$1");
						keyset.add(modulekey);
						count++;
					}
				}
				for(String keys:keyset){
					String values = settings.get("jswizard_"+keys);
					if(!Common.isEmpty(values)){
						Map keymap = dataParse.characterParse(values, false);
						String keyfunction = keymap.get("url")!=null?keymap.get("url").toString():"";
						Map keyparamMap = (Map) keymap.get("parameter");
						String datas = jsmodule(keyfunction,keyparamMap,settings,boardurl);
						if(datas==null){
							writeMessage(response,"document.write(\"<font color=red>Undefined action.</font>\");");
							return null;
						}
						String find = "[module]"+keys+"[/module]";
						jstemplate = StringUtils.replace(jstemplate, find, datas);
					}
				}
				if(key.indexOf("_preview")==-1){
					Map<String,String> datamap = new HashMap<String,String>();
					int expistring= timestamp+jscachelife;
					datamap.put("expiration", expistring+"");
					datalist = "document.write(\""+jstemplate+"\");";
					datamap.put("datalist", datalist);
					String date = arrayeval("js_"+key,datamap);
					updateCache(cachefiles,date,response);
				}else{
					datalist = "document.write(\""+jstemplate+"\");";
				}
			}
		}
		writeMessage(response,datalist);
		return null;
	}
	private boolean in_array(String host,String domain,String prex){
		String [] domains = domain.split(prex);
		if(domains!=null){
			for(String s:domains){
				if(s.indexOf(host)!=-1){
					return true;
				}
			}
		}else{
			return true;
		}
		return false;
	}
	private void writeMessage(HttpServletResponse response,String message){
		try {
			response.getWriter().write(message);
		} catch (IOException e) {
		}
	}
	private void updateCache(String cachefile,String date,HttpServletResponse response){
		File file = new File(cachefile);
		if(file.exists()){
			file.delete();
		}
		try {
			FileOutputStream fos=new FileOutputStream(cachefile,true);
			OutputStreamWriter os=new OutputStreamWriter(fos,JspRunConfig.charset);
			BufferedWriter bw = new BufferedWriter(os);
			bw.write("<%--\n");
			bw.write("JspRun! cache file, DO NOT modify me!\n");
			bw.write("Created: " + new Date().toGMTString() + "\n");
			bw.write("Identify: "+ Md5Token.getInstance().getLongToken(cachefile) + "\n");
			bw.write("--%>\n");
			bw.write("<%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\""+JspRunConfig.charset+"\"%>\n");
			bw.write(date);
			bw.flush();
			os.flush();
			fos.flush();
			bw.close();
			os.close();
			fos.close();
			bw=null;
		} catch (IOException e) {
			writeMessage(response,"document.write(\"Unable to write to cache file!<br />Please chmod ./forumdata/cache to 777 and try again.\");");
		}
	}
	private String arrayeval(String cachename, Map<String, String> map) {
		StringBuffer mapName = new StringBuffer("_DCACHE_");
		mapName.append(cachename);
		StringBuffer curdata = new StringBuffer();
		curdata.append("<%\n");
		curdata.append("Map<String,String> " + mapName+ "= new HashMap<String,String>();\n");
		if (map != null) {
			Set<String> keys = map.keySet();
			for (String key : keys) {
				String value = map.get(key);
				if(value!=null)
				{
					value = value.replace("\"", "\\\"");
					value = value.replaceAll("\r\n", "\\\\n");
				}
				curdata.append(mapName + ".put(\"" + key + "\",\"" + value+ "\");\n");
			}
		}
		curdata.append("request.setAttribute(\"" + cachename + "\"," + mapName+ ");\n");
		curdata.append("%>\n");
		return curdata.toString();
	}
	@SuppressWarnings("unchecked")
	private String jsmodule(String function,Map paramMap,Map<String,String>settings,String boardurl){
		String datalist = "";
		String dateformat = !Common.isEmpty(settings.get("jsdateformat"))?settings.get("jsdateformat") : settings.get("dateformat");
		String timeformat =	settings.get("timeformat").equals("1") ? "hh:mm a" : "HH:mm";
		float timeoffset = Float.valueOf(settings.get("timeoffset"))*3600;
		int jscharset  = paramMap.get("jscharset")!=null?convertInt(paramMap.get("jscharset").toString()):0;
		String jstemplate = (String) paramMap.get("jstemplate");
		String jstemplatebody = "";
		if(jstemplate.matches(".*\\[node\\].*\\[/node\\].*")){
			jstemplatebody = jstemplate;
			jstemplate = jstemplate.replaceAll(".*\\[node\\](.+?)\\[/node\\].*", "$1");
		}
		if(function.startsWith("function=threads")){
			String tids = (String) paramMap.get("tids");
			String keyword = (String) paramMap.get("keyword");
			String blog = (String) paramMap.get("blog");
			String orderby = (String) paramMap.get("orderby");
			String startrow = (String) paramMap.get("startrow");
			String items = (String) paramMap.get("items");
			String maxlength = (String) paramMap.get("maxlength");
			String highlight = (String) paramMap.get("highlight");
			String picpre = (String) paramMap.get("picpre");
			Map threads_forumsMap = (Map) paramMap.get("threads_forums");
			String threadtype = (String) paramMap.get("threadtype");
			String rewardstatus = (String)paramMap.get("rewardstatus");
			List<String> threads_forums = null;
			if (threads_forumsMap != null) {
				threads_forums = new ArrayList<String>();
				Iterator it = threads_forumsMap.keySet().iterator();
				while (it.hasNext()) {
					threads_forums.add(threads_forumsMap.get(it.next()).toString());
				}
			}
			Map typeidsMap = (Map) paramMap.get("typeids");
			List<String> typeids = null;
			if (typeidsMap != null) {
				typeids = new ArrayList<String>();
				Iterator it = typeidsMap.keySet().iterator();
				while (it.hasNext()) {
					typeids.add(typeidsMap.get(it.next()).toString());
				}
			}
			Map specialMap = (Map) paramMap.get("special");
			List<String> special = null;
			if (specialMap != null) {
				special = new ArrayList<String>();
				Iterator it = specialMap.keySet().iterator();
				while (it.hasNext()) {
					special.add(it.next().toString());
				}
			}
			Map digestMap = (Map) paramMap.get("digest");
			List<String> digest = null;
			if (digestMap != null) {
				digest = new ArrayList<String>();
				Iterator it = digestMap.keySet().iterator();
				while (it.hasNext()) {
					digest.add(it.next().toString());
				}
			}
			Map stickMap = (Map) paramMap.get("stick");
			List<String> stick = null;
			if (stickMap != null) {
				stick = new ArrayList<String>();
				Iterator it = stickMap.keySet().iterator();
				while (it.hasNext()) {
					stick.add(it.next().toString());
				}
			}
			StringBuffer sql = new StringBuffer("select t.tid,t.fid,t.subject,t.highlight,t.views,t.replies,t.lastpost,t.lastposter,t.dateline,t.author,t.authorid,p.message,f.name,d.name as typename from jrun_threads as t left join jrun_posts as p on t.tid=p.tid left join jrun_forums as f on t.fid=f.fid left join jrun_threadtags as h on t.tid=h.tid left join jrun_threadtypes as d on t.typeid=d.typeid where p.first=1 ");
			String and = " and ";
			if (threads_forums != null && !threads_forums.get(0).equals("")&& !threads_forums.get(0).equals("all")) {
				sql.append(and);
				String fids = "";
				for (String fid : threads_forums) {
					fids += fid + ",";
				}
				fids = fids.substring(0, fids.length() - 1);
				sql.append(" t.fid in (" + fids + ") ");
			}
			if (tids != null && !tids.equals("")) {
				sql.append(and);
				sql.append(" t.tid in (" + tids + ") ");
			}
			if (keyword != null && !keyword.equals("")) {
				sql.append(and);
				String keys = "";
				keys = keyword.replace("*", "%");
				sql.append(" t.subject like '" + keys + "' ");
			}
			if (typeids != null && !typeids.get(0).equals("all")) {
				sql.append(and);
				String typeidss = "";
				for (String typeid : typeids) {
					typeidss += typeid + ",";
				}
				typeidss = typeidss.substring(0, typeidss.length() - 1);
				sql.append(" t.typeid in (" + typeidss + ") ");
			}
			if (blog != null && !blog.equals("")) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -