forumFilters.jsp
上传用户:guhaomin
上传日期:2007-06-10
资源大小:23203k
文件大小:14k
源码类别:

电子政务应用

开发平台:

Java

  1. <%
  2. /**
  3.  * $RCSfile: forumFilters.jsp,v $
  4.  * $Revision: 1.4.2.1 $
  5.  * $Date: 2001/05/10 02:06:19 $
  6.  */
  7. %>
  8. <%@ page import="java.util.*,
  9.                  com.coolservlets.forum.*,
  10.                  com.coolservlets.forum.util.*,
  11.  com.coolservlets.forum.util.admin.*"%>
  12. <jsp:useBean id="adminBean" scope="session"
  13.  class="com.coolservlets.forum.util.admin.AdminBean"/>
  14. <% ////////////////////////////////
  15. // Jive authorization check
  16. // check the bean for the existence of an authorization token.
  17. // Its existence proves the user is valid. If it's not found, redirect
  18. // to the login page
  19. Authorization authToken = adminBean.getAuthToken();
  20. if( authToken == null ) {
  21. response.sendRedirect( "/mainctrl/bbs/admin" );
  22. return;
  23. }
  24. ////////////////////
  25. // Security check
  26. // make sure the user is authorized to administer users:
  27. ForumFactory forumFactory = ForumFactory.getInstance(authToken);
  28. ForumPermissions permissions = forumFactory.getPermissions(authToken);
  29. boolean isSystemAdmin = permissions.get(ForumPermissions.SYSTEM_ADMIN);
  30. boolean isUserAdmin   = permissions.get(ForumPermissions.FORUM_ADMIN);
  31. // redirect to error page if we're not a forum admin or a system admin
  32. if( !isUserAdmin && !isSystemAdmin ) {
  33. request.setAttribute("message","您没有权限管理论坛!");
  34. response.sendRedirect("error.jsp");
  35. return;
  36. }
  37. %>
  38. <%! // Global variables/methods
  39. private final int ADD_FILTER = 1;
  40. private final int REMOVE_FILTER = 2;
  41. private final int EDIT_FILTER = 3;
  42. private final int SAVE_MODIFIED_FILTER = 4;
  43. private final int SAVE_PROPERTIES = 5;
  44. private final String[] classNames = { "com.coolservlets.forum.filter.FilterHtml",
  45. "com.coolservlets.forum.filter.FilterCodeHighlight",
  46. "com.coolservlets.forum.filter.FilterFontStyle",
  47. "com.coolservlets.forum.filter.FilterNewline",
  48. "com.coolservlets.forum.filter.FilterSmileyFace",
  49. "com.coolservlets.forum.filter.FilterURLConverter",
  50. "com.coolservlets.forum.filter.FilterProfanity",
  51. "com.coolservlets.forum.filter.FilterHackerSpeak"};
  52.     private boolean containsString( ForumMessageFilter[] installedFilters, String filterName ) {
  53. for( int i=0; i<installedFilters.length; i++ ) {
  54. if( installedFilters[i].getName().equals(filterName) ) {
  55. return true;
  56. }
  57. }
  58. return false;
  59. }
  60. private String escapeHTML( String line ) {
  61. StringBuffer buf = new StringBuffer();
  62. for( int i=0; i<line.length(); i++ ) {
  63. char ch = line.charAt(i);
  64. if( ch == '"' ) {
  65. buf.append( "&quot;" ); //"
  66. } else if( ch == '&' ) {
  67. buf.append( "&amp;" );
  68. } else {
  69. buf.append( ch );
  70. }
  71. }
  72. return buf.toString();
  73. }
  74. private String unescapeHTML( String line ) {
  75. //line = replace( line, "&gt;", ">" );
  76. //line = replace( line, "&lt;", "<" );
  77. line = replace( line, "&quot;", """ ); //"
  78. line = replace( line, "&amp;", "&" );
  79. return line;
  80. }
  81. private String replace( String line, String oldString, String newString ) {
  82. int i=0;
  83. if ( ( i=line.indexOf( oldString, i ) ) >= 0 ) {
  84. int oLength = oldString.length();
  85. int nLength = newString.length();
  86. StringBuffer buf = new StringBuffer();
  87. buf.append(line.substring(0,i)).append(newString);
  88. i += oLength;
  89. int j = i;
  90. while( ( i=line.indexOf( oldString, i ) ) > 0 ) {
  91. buf.append(line.substring(j,i)).append(newString);
  92. i += oLength;
  93. j = i;
  94. }
  95. buf.append(line.substring(j));
  96. return buf.toString();
  97. }
  98. return line;
  99. }
  100. %>
  101.  
  102. <% ////////////////////
  103. // get parameters
  104. int forumID   = ParamUtils.getIntParameter(request,"forum",-1);
  105. int mode      = ParamUtils.getIntParameter(request,"mode",-1);
  106. int filterID  = ParamUtils.getIntParameter(request,"filter",-1);
  107. //////////////////////////////////
  108. // global error variables
  109. String errorMessage = "";
  110. boolean noForumSpecified = (forumID < 0);
  111. boolean filterIDOK = (filterID != -1 );
  112. boolean doMode = (mode != -1);
  113.     ////////////////////
  114. // make a profile manager
  115. ProfileManager manager = forumFactory.getProfileManager();
  116.     // Create the factory and forum objects
  117. Forum forum = null;
  118. if (!noForumSpecified)
  119. {
  120.     try {
  121.     forum = forumFactory.getForum(forumID);
  122.     }
  123.     catch( UnauthorizedException ue ) { System.err.println( "... in admin/admin-filter.jsp: " + ue ); }
  124.     catch( ForumNotFoundException fnfe ) { System.err.println( "... in admin/admin-filter.jsp: " + fnfe ); }
  125.     catch( Exception e ) {
  126.     System.err.println( "... in admin/admin-filter.jsp: " + e );
  127.     e.printStackTrace( System.err );
  128.     }
  129. }
  130. boolean forumOK = (forum != null);
  131. // Get an array of all filters in the system
  132. ForumMessageFilter[] allFilters = null;
  133. if (!noForumSpecified)
  134. {
  135.     try {
  136.     allFilters = new ForumMessageFilter[classNames.length];
  137.     for( int i=0; i<classNames.length; i++ ) {
  138.     Class c = Class.forName(classNames[i]); // load the name of the filter
  139.     allFilters[i] = (ForumMessageFilter)(c.newInstance());
  140.     }
  141.     }
  142.     catch( ClassNotFoundException cnfe ) { System.err.println( "... in admin/admin-filter.jsp: " + cnfe ); }
  143.     catch( IllegalAccessException iae ) { System.err.println( "... in admin/admin-filter.jsp: " + iae ); }
  144.     catch( InstantiationException ie ) { System.err.println( "... in admin/admin-filter.jsp: " + ie ); }
  145. }
  146.     // Get an array of installed filters
  147.     ForumMessageFilter[] installedFilters = null;
  148.     String[] installedFilterNames = null;
  149.     if( forumOK ) {
  150.     try {
  151.     installedFilters = forum.getForumMessageFilters();
  152.     }
  153.     catch( UnauthorizedException ue ) { 
  154.     System.err.println( "... in admin/admin-filter.jsp: " + ue );
  155.     }
  156.     if( installedFilters != null ) {
  157.     // build up list of class names of the forums (so we can not display the ones that are
  158.     // installed in the "add new webfilter box"
  159.     installedFilterNames = new String[installedFilters.length];
  160.     for( int i=0; i<installedFilterNames.length; i++ ) {
  161.     installedFilterNames[i] = installedFilters[i].getClass().getName();
  162.     }
  163.     }
  164.     }
  165.     // Based on the mode, do an action:
  166.     if( doMode ) {
  167.     // Add a filter
  168.     if( mode == ADD_FILTER ) {
  169.     if( filterIDOK ) {
  170.             try {
  171.                 Class c = Class.forName(classNames[filterID]); // load the name of the filter
  172.     ForumMessageFilter newFilter = (ForumMessageFilter)(c.newInstance());
  173.     forum.addForumMessageFilter( newFilter );
  174.             }
  175.             catch( ClassNotFoundException cnfe ) { System.err.println( "... in admin/admin-filter.jsp: " + cnfe ); }
  176.     catch( IllegalAccessException iae ) { System.err.println( "... in admin/admin-filter.jsp: " + iae ); }
  177.     catch( InstantiationException ie ) { System.err.println( "... in admin/admin-filter.jsp: " + ie ); }
  178.     catch( UnauthorizedException ue ) { System.err.println( "... in admin/admin-filter.jsp: " + ue ); }
  179.     }
  180.     // redirect to same page 
  181.     response.sendRedirect( "forumFilters.jsp?forum=" + forumID );
  182. return;
  183.     }
  184.     else if( mode == REMOVE_FILTER ) {
  185.     if( filterIDOK ) {
  186.     try {
  187.     forum.removeForumMessageFilter(filterID);
  188.     } catch( UnauthorizedException ue ) { System.err.println( "... in admin/admin-filter.jsp: " + ue ); }
  189.     }
  190.     // redirect to same page
  191.     response.sendRedirect( "forumFilters.jsp?forum=" + forumID );
  192. return;
  193.     }
  194.     else if( mode == SAVE_PROPERTIES ) {
  195.     if( filterIDOK ) {
  196.     Enumeration props = installedFilters[filterID].filterPropertyNames();
  197.     while( props.hasMoreElements() ) {
  198.     String propName = (String)props.nextElement();
  199.     String propValue = request.getParameter(propName);
  200.     if( propValue != null ) {
  201.     try {
  202.     installedFilters[filterID].setFilterProperty(propName,propValue);
  203.     } catch( IllegalArgumentException iae ) { System.err.println( "... in admin/admin-filter.jsp: " + iae ); }
  204.     }
  205.     }
  206.     }
  207.     }
  208.     else {
  209.     // do nothing
  210.     }
  211.     }
  212. %>
  213. <html>
  214. <head>
  215. <title></title>
  216. <%
  217.     if (!noForumSpecified)
  218.     {
  219. %>
  220. <script language="JavaScript" type="text/javascript">
  221. <%-- JavaScript array of filter descriptions --%>
  222. var descriptions = new Array(
  223. <% for( int i=0; i<allFilters.length; i++ ) { %>
  224. "<%= unescapeHTML(allFilters[i].getDescription()) %>"
  225. <% if( (allFilters.length-i) > 1 ) { %>
  226. ,
  227. <% } %>
  228. <% } %> );
  229. function doDesc( theForm ) {
  230. var selected = theForm.filter.options[theForm.filter.selectedIndex].value;
  231. theForm.filterDesc.value = descriptions[selected];
  232. }
  233. </script>
  234. <%
  235.     }
  236. %>
  237. <link rel="stylesheet" href="style/global.css">
  238. </head>
  239. <body background="images/shadowBack.gif" bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#ff0000">
  240. <% ///////////////////////
  241. // pageTitleInfo variable (used by include/pageTitle.jsp)
  242. String[] pageTitleInfo = { "论坛 : 论坛过滤器" };
  243. %>
  244. <% ///////////////////
  245. // pageTitle include
  246. %><%@ include file="include/pageTitle.jsp" %>
  247. <p>
  248. <% ////////////////////
  249. // display a list of groups to edit if no group was specified:
  250. if( noForumSpecified ) {
  251. String formAction = "filters";
  252. %>
  253. <%@ include file="forumChooser.jsp"%>
  254. <% out.flush();
  255. return;
  256. }
  257. %>
  258. <% /////////////////////
  259. // at this point, we know there is a group to work with:
  260. //Forum forum                  = forumFactory.getForum(forumID);
  261. String forumName             = forum.getName();
  262. %>
  263. 配置 <b><%= forumName %></b> 的过滤器。
  264. <p>
  265. <%-- table of Name/Version/Description/Edit/Remove --%>
  266. <table cellpadding=5 cellspacing=0 border=1 width="100%">
  267. <tr bgcolor="#eeeeee">
  268. <td align="center">当前 <b><%= forum.getName() %></b> 安装的过滤器</td>
  269. </tr>
  270. <tr>
  271. <td>
  272. <% if( installedFilters==null || installedFilters.length == 0 ) { %>
  273. <i>没有安装任何过滤器。(你可以从下面的选择安装)</i>
  274. <% } else { %>
  275. <table cellpadding=3 cellspacing=0 border=1 width="100%">
  276. <tr bgcolor="#eeeeee">
  277. <td width="1%" nowrap>名称</td>
  278. <td width="1%" nowrap>版本</td>
  279. <td width="97%">描述</td>
  280. <td width="1%" nowrap align="center">属性</td>
  281. <td width="1%" nowrap align="center">删除</td>
  282. </tr>
  283. <% for( int i=0; i<installedFilters.length; i++ ) { %>
  284. <tr>
  285. <td><%= installedFilters[i].getName() %></td>
  286. <td align="center"><%= installedFilters[i].getMajorVersion() %>.<%= installedFilters[i].getMinorVersion() %></td>
  287. <td><%= installedFilters[i].getDescription() %></td>
  288. <form name="editFilterForum">
  289. <input type="hidden" name="forum" value="<%= forumID %>">
  290. <input type="hidden" name="filter" value="<%= i %>">
  291. <input type="hidden" name="mode" value="<%= EDIT_FILTER %>">
  292. <td align="center"><input type="submit" value="编辑"></td>
  293. </form>
  294. <form name="removeFilterForm">
  295. <input type="hidden" name="forum" value="<%= forumID %>">
  296. <input type="hidden" name="filter" value="<%= i %>">
  297. <input type="hidden" name="mode" value="<%= REMOVE_FILTER %>">
  298. <td align="center"><input type="radio" value="" name="remove<%= i %>" onclick="if(confirm('你确定要删除此论坛吗?')){this.form.submit();}"></td>
  299. </form>
  300. </tr>
  301. <% if( mode==EDIT_FILTER && filterID==i ) { %>
  302. <tr>
  303. <!-- <td><br></td> -->
  304. <td colspan=5>
  305. <%-- begin of props table --%>
  306. <table cellpadding=2 cellspacing=0 border=1 width="100%">
  307. <form action="forumFilters.jsp">
  308. <input type="hidden" name="forum" value="<%= forumID %>">
  309. <input type="hidden" name="mode" value="<%= SAVE_PROPERTIES %>">
  310. <input type="hidden" name="filter" value="<%= i %>">
  311. <% Enumeration props = installedFilters[i].filterPropertyNames();
  312. if( props == null ) {
  313. %>
  314. <tr>
  315. <td colspan=4><i>No properties to set</i></td>
  316. </tr>
  317. <% } else { %>
  318. <tr>
  319. <td width="1%" nowrap>名称</td>
  320. <td width="1%" nowrap>值</td>
  321. <td width="97%">描述</td>
  322. <td width="1%" rowspan=99 align="center"><input type="submit" value="保存"></td>
  323. </tr>
  324. <% while( props.hasMoreElements() ) {
  325. String propName = (String)props.nextElement();
  326. %>
  327. <tr>
  328. <td><%= propName %></td>
  329. <td><input type="text" name="<%= propName %>" size="25" value="<%= escapeHTML(installedFilters[i].getFilterProperty(propName)) %>"></td>
  330. <td><%= installedFilters[i].getFilterPropertyDescription(propName) %></td>
  331. </tr>
  332. <% } %>
  333. <% } %>
  334. </form>
  335. </table>
  336. <%-- end of props table --%>
  337. </td>
  338. </tr>
  339. <%-- end edit filter --%>
  340. <% } %>
  341. <% } %>
  342. <% } %>
  343. </table>
  344. </td>
  345. </tr>
  346. </table>
  347. <%-- end table of Name/Version/Description/Edit/Remove --%>
  348. <br>
  349. <%-- table of Install New WebFilter --%>
  350. <table cellpadding=5 cellspacing=0 border=1 width="50%">
  351. <tr bgcolor="#eeeeee">
  352. <td align="center">安装新的过滤器</td>
  353. </tr>
  354. <tr>
  355. <td>
  356. <table cellpadding=3 cellspacing=0 border=1 width="100%">
  357. <form action="forumFilters.jsp">
  358. <input type="hidden" name="forum" value="<%=forumID%>">
  359. <input type="hidden" name="mode" value="<%=ADD_FILTER%>">
  360. <tr>
  361. <td width="1%" nowrap align="center" valign="top">
  362. 过滤器:<br>
  363. <select name="filter" size="7" onchange="doDesc(this.form);">
  364. <% for( int i=0; i<allFilters.length; i++ ) {
  365. // if the filter is not currently installed, show it as 
  366. // being available for install.
  367. if( !containsString( installedFilters, allFilters[i].getName() ) ) {
  368. %>
  369. <option value="<%= i %>"><%= allFilters[i].getName() %>
  370. <% } %>
  371. <% } %>
  372. </select>
  373. </td>
  374. <td width="98%"><br></td>
  375. <td width="1%" nowrap align="center" valign="top">
  376. 描述:<br>
  377. <textarea rows="6" cols="20" name="filterDesc" wrap="virtual"></textarea>
  378. </td>
  379. </tr>
  380. <tr>
  381. <td colspan="3" align="center"><input type="submit" value="安装..."></td>
  382. </tr>
  383. </form>
  384. </table>
  385. </td>
  386. </tr>
  387. </table>
  388. <%-- end table of Install New WebFilter --%>
  389. </body>
  390. </html>