📄 javascriptaction.java
字号:
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 + -