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

电子政务应用

开发平台:

Java

  1. <%
  2. /**
  3.  * $RCSfile: viewMessage.jsp,v $
  4.  * $Revision: 1.4 $
  5.  * $Date: 2000/12/27 22:39:45 $
  6.  */
  7. %>
  8. <%@ page
  9. import="java.util.*,
  10.         java.text.*,
  11.         java.net.*,
  12. com.coolservlets.forum.*,
  13. com.coolservlets.forum.util.*"
  14. errorPage="/mainctrl/bbs/error"
  15. %>
  16. <%-- Global variables, methods --%>
  17. <%! final int DEFAULT_FORUM_ID = 1; // ServletForum.com Beta Forum ID
  18. final int IMG_WIDTH = 13;
  19. final int IMG_HEIGHT = 12;
  20. final SimpleDateFormat dateFormatter = new SimpleDateFormat( "yyyy.MM.dd" );
  21. final SimpleDateFormat timeFormatter = new SimpleDateFormat( "h:mm a" );
  22. final String TREE_ROOT =    "<img src='/skins/bay/images/t0.gif' align='top' width=8 height=20>";
  23. final String TREE_EMPTY =   "<img src='/skins/bay/images/t0.gif' align='top' width=20>";
  24. final String TREE_LINE =    "<img src='/skins/bay/images/t1.gif' align='top'>";
  25. final String TREE_CORNER =  "<img src='/skins/bay/images/t2.gif' align='top'>";
  26. final String TREE_FORK =    "<img src='/skins/bay/images/t3.gif' align='top'>";
  27. final String TREE_ARROW =   "<img src='/skins/bay/images/t_arrow.gif' align='top'>";
  28. final String TREE_NEW =    "<img src='/skins/bay/images/t_new.gif' align='top'>";
  29. // Recursive method to print all the children of a message.
  30. private void printChildren(TreeWalker walker, ForumMessage message, ForumThread thread, 
  31. int currentMessageID, int level, int childCount, 
  32. StringBuffer buf, int messageID, int forumID,
  33. int lineNr[], String tree, long lastVisited,
  34. String forumParams) 
  35. {
  36. java.util.Date date = message.getModifiedDate();
  37. long modifiedDate = date.getTime();
  38. String subj         = message.getSubject();
  39. String username  = "匿名者";
  40. if( !message.isAnonymous() ) {
  41. User user = message.getUser();
  42. username = user.getName();
  43. if (username == null)
  44.      username = user.getUsername();
  45. }
  46. int msgID           = message.getID();
  47. int thrID           = thread.getID();
  48. boolean onCurrent   = (message.getID() == messageID);
  49. boolean rootMsg     = (lineNr[0] == 0);
  50. String bgcolor      = "";
  51. if( subj == null || subj.equals("") ) {
  52. subj = "[无主题]";
  53. }
  54. if( (lineNr[0]++ & 1) != 0) {
  55. //bgcolor = " bgcolor='#dddddd'";
  56. bgcolor = " bgcolor='#eeeeee'";
  57. }
  58. else {
  59. bgcolor = " bgcolor='#ffffff'";
  60. }
  61. if( onCurrent ) {
  62. bgcolor = " bgcolor='#dddddd'";
  63. //bgcolor = " bgcolor='#ffffff'";
  64. }
  65. // print start of row, with appropriate background color
  66. buf.append("<tr valign=middle").append( bgcolor ).append(">n");
  67. // start of subject cell
  68. if( onCurrent ) {
  69. buf.append("<td width='98%'><font class=strong>");
  70. } else {
  71. buf.append("<td width='98%'><font class=px_12>");
  72. }
  73. // padding images
  74. if (rootMsg) {
  75.     if (!onCurrent)
  76.          buf.append(TREE_ROOT);
  77. } else {
  78.      buf.append(tree);
  79.      if (childCount > 0)
  80.          buf.append(TREE_FORK);
  81.      else
  82.          buf.append(TREE_CORNER);
  83. }
  84. if (onCurrent) {
  85. buf.append(TREE_ARROW);
  86. }
  87. // subject cell
  88. if (modifiedDate > lastVisited) {
  89. buf.append(TREE_NEW);
  90. }
  91. if (!onCurrent) {
  92. buf.append("<a href='/mainctrl/bbs/viewMessage?message=").append(msgID);
  93. buf.append("&thread=").append(thrID);
  94. buf.append("&parent=").append(currentMessageID);
  95. buf.append("&forum=").append(forumID);
  96. if (forumParams.length() > 0)
  97. buf.append(forumParams);
  98. buf.append("'>");
  99. else {
  100. buf.append("<a name='currentMsg'>");
  101. }
  102. buf.append(subj);
  103. buf.append("</a>");
  104. buf.append("</font></td>").append("n");
  105. // username cell
  106. if( onCurrent ) {
  107. buf.append("<td width='1%' nowrap align='center'><font  class=strong>&nbsp;");
  108. } else {
  109. buf.append("<td width='1%' nowrap align='center'><font class=px_12>&nbsp;");
  110. }
  111. buf.append(username);
  112. buf.append("&nbsp;</font></td>");
  113. // date cell
  114. if( onCurrent ) {
  115. buf.append("<td width='1%' nowrap ><font class=strong>");
  116. } else {
  117. buf.append("<td width='1%' nowrap ><font class=px_12>");
  118. }
  119. buf.append(dateFormatter.format(date)).append(" - ").append(timeFormatter.format(date));
  120. buf.append("</font></td>").append("n");
  121. // print end of row
  122. buf.append("</tr>n");
  123. // recursive call
  124. if (!rootMsg) {
  125.      if (childCount > 0)
  126.          tree += TREE_LINE;
  127.      else
  128.          tree += TREE_EMPTY;
  129. }
  130.         int numChildren = walker.getChildCount(message); // keep
  131.         if( numChildren > 0 ) {
  132.             for( int i=0; i<numChildren; i++ ) {
  133.                 ForumMessage child = walker.getChild(message, i);
  134.                 printChildren( walker, child, thread, message.getID(), ++level, numChildren - i -1, buf, messageID, forumID, lineNr, tree, lastVisited, forumParams);
  135. level--;
  136.             }
  137.         }
  138.     }
  139. %>
  140. <% ////////////////////////
  141. // Authorization check
  142. // check for the existence of an authorization token
  143. Authorization authToken = SkinUtils.getUserAuthorization(request,response);
  144. // if the token was null, they're not authorized. Since this skin will
  145. // allow guests to view forums, we'll set a "guest" authentication
  146. // token
  147. if( authToken == null ) {
  148. authToken = AuthorizationFactory.getAnonymousAuthorization();
  149. }
  150. %>
  151. <% // get parameter values
  152. int  parentID   = ParamUtils.getIntParameter(request, "parent", -1);
  153. int  threadID   = ParamUtils.getIntParameter(request, "thread", -1);
  154. int  messageID  = ParamUtils.getIntParameter(request, "message", -1);
  155. int  forumID    = ParamUtils.getIntParameter(request, "forum", -1);
  156. String  forumParams = ParamUtils.getParameter(request, "forumparams");
  157. String  forumParamsEncoded = (forumParams == null) ? "" : "&forumparams=" + URLEncoder.encode(forumParams);
  158. long lastVisited = SkinUtils.getLastVisited(request, response);
  159. int  nextID   = -1;
  160. int  previousID  = -1;
  161. %>
  162. <% // Get a ForumFactory object
  163. ForumFactory forumFactory = ForumFactory.getInstance(authToken);
  164. // Get a forum object, redirect on error:
  165. Forum forum = null;
  166. try {
  167. forum = forumFactory.getForum(forumID);
  168. }
  169. catch( UnauthorizedException ue ) {
  170. response.sendRedirect( "/mainctrl/bbs/error?message=" + URLEncoder.encode("您没有权限访问此论坛!") );
  171. return;
  172. }
  173. catch( ForumNotFoundException fnfe ) {
  174. response.sendRedirect( "/mainctrl/bbs/error?message=" + URLEncoder.encode("此论坛不存在!") );
  175. return;
  176. }
  177. %>
  178. <%
  179. // Get the thread, then message
  180. ForumThread thread = null;
  181. int threadChildCount = 0;
  182. try {
  183. thread = forum.getThread(threadID);
  184. threadChildCount = thread.getMessageCount()-1;
  185. }
  186. catch( ForumThreadNotFoundException tnfe ) {
  187. response.sendRedirect( "/mainctrl/bbs/error?message=" + URLEncoder.encode("此主题不存在!") );
  188. return;
  189. }
  190. ForumMessage message = null;
  191. try {
  192. if (messageID < 0) {
  193. message = thread.getRootMessage();
  194. }
  195. else {
  196. message = thread.getMessage(messageID);
  197. }
  198. }
  199. catch( ForumMessageNotFoundException mnfe ) {
  200. response.sendRedirect( "/mainctrl/bbs/error?message=" + URLEncoder.encode("此帖子不存在!") );
  201. return;
  202. }
  203. //Get the TreeWalker
  204. TreeWalker walker = thread.treeWalker();
  205. ForumMessage root = walker.getRoot();
  206. int numRecursiveChildren = walker.getRecursiveChildCount(message);
  207. ForumMessage parent = null;
  208. if (parentID != -1) {
  209. parent = thread.getMessage(parentID);
  210. int numParentsChildren = walker.getChildCount(parent);
  211. //Get the previous and next messages in the thread.
  212. int currentChildNum = walker.getIndexOfChild(parent,message);
  213. if (currentChildNum >= numParentsChildren-1) {
  214. nextID = -1;
  215. }
  216. else {
  217. nextID = walker.getChild(parent,currentChildNum + 1).getID();
  218. if (currentChildNum > 0) {
  219. previousID = walker.getChild(parent,currentChildNum - 1).getID();
  220. }
  221. }
  222. %>
  223. <% /////////////////
  224. // header include
  225. String title = (message == null) ? "帖子不存在" : message.getSubject();
  226. %>
  227. <%@ include file="/skins/bay/header.jsp" %>
  228. <%-- begin breadcrumbs --%>
  229. <table bgcolor="#666666" cellpadding=0 cellspacing=0 border=0 width="100%"> 
  230. <tr>
  231.     <td>
  232.         <font color="#FFFFFF" class="strongw"><a href="/mainctrl/home/index"><font color="#FFFFFF">首页</font></a>&gt;&gt;<a href="/mainctrl/communication/main"><font color="#FFFFFF">通信</font></a>&gt;&gt;<a href="/mainctrl/bbs/index" class="normal"><font color="#FFFFFF">论坛主页</font></a>
  233.         &gt;&gt;
  234.         <a href="/mainctrl/bbs/viewForum?forum=<%= forumID %><%= forumParams == null ? "" : forumParams %>" class="normal"><font color="#FFFFFF"><%= forum.getName() %></font></a>
  235.         &gt;&gt;
  236.         <%= thread == null ? "" : thread.getName() %>
  237.         </font>
  238.         <%-- end breadcrumbs --%>
  239.     </td>
  240. </tr>
  241. </table>
  242. <br>
  243. <%-- Message table --%>
  244. <table bgcolor="#666666" cellpadding=1 cellspacing=0 border=0 width="100%">
  245. <tr>
  246. <td>
  247. <table bgcolor="#dddddd" cellpadding=3 cellspacing=0 border=0 width="100%">
  248. <td bgcolor="#dddddd" width="99%">
  249. <%
  250. java.util.Date date = message.getModifiedDate(); 
  251. String subj         = message.getSubject();
  252. boolean canEdit     = false;
  253. boolean canReply    = message.hasPermission(ForumPermissions.CREATE_MESSAGE);
  254. if( subj == null || subj.equals("") ) {
  255. subj = "[无主题]";
  256. }
  257. %>
  258. <font face="Trebuchet MS">
  259. <font class="strong"><%= subj %></font>
  260. </font>
  261. <br>
  262. <font face="verdana" >
  263. <font class="strong">
  264. <%
  265. if( !message.isAnonymous() ) { 
  266. User user = message.getUser();
  267. String email = user.getEmail();
  268. String name = user.getName();
  269. if (name == null)
  270.     name = user.getUsername();
  271.              canEdit = canReply && (user.getID() == authToken.getUserID() &&
  272.                         System.currentTimeMillis() < date.getTime() + 2 * 3600 * 1000);
  273. if (email != null) {
  274. %>
  275. <a href="mailto:<%= email %>" class="normal"><%= name %></a>
  276. <% } else { %>
  277. <%= name %>
  278. <% }
  279. } else { %>
  280.  [匿名者]
  281. <% } %>
  282. </font>
  283. </font>
  284. </td>
  285. <td bgcolor="#dddddd" width="1%" nowrap>
  286. <font face="verdana" >
  287. <font class="strong">
  288. <%  java.util.Date d = message.getCreationDate(); %>
  289. <%= dateFormatter.format(d) %> - <%= timeFormatter.format(d) %>
  290. </font>
  291. </font>
  292. </td>
  293. </table>
  294. <table bgcolor="#666666" cellpadding=0 cellspacing=0 border=0 width="100%">
  295. <td><img src="/skins/bay/images/blank.gif" width=1 height=1 border=0></td>
  296. </table>
  297. <table bgcolor="#eeeeee" cellpadding=3 cellspacing=0 border=0 width="100%">
  298. <td align="center">
  299. <% if (canEdit) { %>
  300.      <a href="/mainctrl/bbs/post?message=<%= messageID %>&thread=<%= threadID %>&forum=<%= forumID %><%= forumParamsEncoded %>&postType=edit"><img src="/skins/bay/images/edit_button.gif" width=103 height=23 border="0"></a> &nbsp;
  301. <% } %>
  302. <% if (canReply) { %>
  303. <a href="/mainctrl/bbs/post?message=<%= messageID %>&thread=<%= threadID %>&forum=<%= forumID %><%= forumParamsEncoded %>&postType=reply"><img src="/skins/bay/images/reply_button.gif" width=103 height=23 border="0"></a><br>
  304. <% } else { %>
  305. &nbsp;
  306. <% } %>
  307. </td>
  308. </table>
  309. <table bgcolor="#666666" cellpadding=0 cellspacing=0 border=0 width="100%">
  310. <td><img src="/skins/bay/images/blank.gif" width=1 height=1 border=0></td>
  311. </table>
  312. <table bgcolor="#ffffff" cellpadding=5 cellspacing=0 border=0 width="100%">
  313. <td>
  314. <%= message.getBody() %>
  315. <% if( !message.isAnonymous() ) {
  316. User user = message.getUser();
  317. String sig = (String)user.getProperty("sig");
  318. %>
  319. <pre>
  320. <%= (sig!=null)?sig:"" %></pre>
  321. <% } %>
  322. </td>
  323. </table>
  324. </td>
  325. </tr>
  326. </table>
  327. <%-- Message table --%>
  328. <p>
  329. <font face="tahoma" ><font class="strong">
  330. <% if( numRecursiveChildren == 0 ) { %>
  331. 此帖没有回复。
  332. <%  } else { %>
  333. 此帖共有 <a href="#currentMsg"><%= numRecursiveChildren %> 
  334. </a> 个回复.
  335. <% } %>
  336. </font>
  337. <% if (canReply) { %>
  338. [<a href="/mainctrl/bbs/post?message=<%= messageID %>&thread=<%= threadID %>&forum=<%= forumID %><%= forumParamsEncoded %>&postType=reply" class="normal">增加帖子</a>]
  339. <% } %>
  340. </font>
  341. <p>
  342. <table bgcolor="#999999" cellpadding=0 cellspacing=0 border=0 width="100%">
  343. <td>
  344. <table bgcolor="#999999" cellpadding=0 cellspacing=1 border=0 width="100%">
  345. <% StringBuffer buf = new StringBuffer();
  346. int level = 0;
  347. int[] lineNr = { 0 };
  348. String tree = "";
  349. printChildren( walker, root, thread, -1, level, -1,  buf, messageID, forumID, lineNr, tree, lastVisited, forumParamsEncoded);  
  350. out.println( buf.toString() );
  351. %>
  352. </table>
  353. </td>
  354. </table>
  355. <br>
  356. <%@ include file="/skins/bay/footer.jsp" %>