home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 April / PCWorld_2005-04_cd.bin / akce / web / phpbb2plus / phpBB2_plus_1.52.exe / phpBB2 / printview.php < prev    next >
PHP Script  |  2004-07-18  |  8KB  |  296 lines

  1. <?php
  2. /***************************************************************************
  3.  *                               printview.php
  4.  *                            -------------------
  5.  *  MOD add-on page. Contains GPL code copyright of phpBB group.
  6.  *  Author: Adam Ismay
  7.  *  Version: 1.1 - 20th March 2002 - RC4 fix
  8.  *  Version: 1.0 - 3rd March 2002
  9.  *
  10.  ***************************************************************************/
  11.  
  12. /***************************************************************************
  13.  *
  14.  *   This program is free software; you can redistribute it and/or modify
  15.  *   it under the terms of the GNU General Public License as published by
  16.  *   the Free Software Foundation; either version 2 of the License, or
  17.  *   (at your option) any later version.
  18.  *
  19.  ***************************************************************************/
  20.  
  21. define('IN_PHPBB', true);
  22. $phpbb_root_path = "./";
  23. include($phpbb_root_path . 'extension.inc');
  24. include($phpbb_root_path . 'common.'.$phpEx);
  25. include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
  26.  
  27. //
  28. // gzip_compression
  29. //
  30. $do_gzip_compress = FALSE;
  31. if($board_config['gzip_compress'])
  32. {
  33.     $phpver = phpversion();
  34.  
  35.     if($phpver >= "4.0.4pl1")
  36.     {
  37.         if(extension_loaded("zlib"))
  38.         {
  39.             ob_start("ob_gzhandler");
  40.         }
  41.     }
  42.     else if($phpver > "4.0")
  43.     {
  44.         if(strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip'))
  45.         {
  46.             if(extension_loaded("zlib"))
  47.             {
  48.                 $do_gzip_compress = TRUE;
  49.                 ob_start();
  50.                 ob_implicit_flush(0);
  51.  
  52.                 header("Content-Encoding: gzip");
  53.             }
  54.         }
  55.     }
  56. }
  57.  
  58. header ("Cache-Control: no-store, no-cache, must-revalidate");
  59. header ("Cache-Control: pre-check=0, post-check=0, max-age=0", false);
  60. header ("Pragma: no-cache");
  61. header ("Expires: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
  62. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  63.  
  64. //
  65. // Start session management
  66. //
  67. $userdata = session_pagestart($user_ip, 0);
  68. init_userprefs($userdata);
  69. //
  70. // End session management
  71. //
  72.  
  73. // Make sure a topic id was passed
  74. if(isset($HTTP_GET_VARS[POST_TOPIC_URL]))
  75. {
  76.     $topic_id = intval($HTTP_GET_VARS[POST_TOPIC_URL]);
  77. }
  78. else if(isset($HTTP_GET_VARS['topic']))
  79. {
  80.     $topic_id = intval($HTTP_GET_VARS['topic']);
  81. }
  82.  
  83. if( !isset($topic_id) )
  84. {
  85.     message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
  86. }
  87.  
  88. $template->set_filenames(array(
  89.                                    "body" => "viewtopic_print.tpl")
  90.                                    );
  91.                                    
  92. $sql = "SELECT t.topic_id, t.topic_title, t.topic_status, t.topic_replies, t.topic_time, t.topic_type, t.topic_vote, f.forum_name, f.forum_status, f.forum_id, f.auth_view, f.auth_read
  93.     FROM " . TOPICS_TABLE . " t, " . FORUMS_TABLE . " f
  94.     WHERE t.topic_id = " . $topic_id . "
  95.         AND f.forum_id = t.forum_id
  96.         $order_sql";
  97. if( !($result = $db->sql_query($sql)) )
  98. {
  99.     message_die(GENERAL_ERROR, "Couldn't obtain topic information", "", __LINE__, __FILE__, $sql);
  100. }
  101.  
  102. if( !($forum_row = $db->sql_fetchrow($result)) )
  103. {
  104.     message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
  105. }
  106. $forum_id = $forum_row['forum_id'];
  107. $forum_name = $forum_row['forum_name'];
  108. $topic_title = $forum_row['topic_title'];
  109. $topic_time = $forum_row['topic_time'];
  110.  
  111.  
  112. //
  113. // Start auth check
  114. //
  115. $is_auth = array();
  116. $is_auth = auth(AUTH_READ, $forum_id, $userdata, $forum_row);
  117.  
  118. if( !$is_auth['auth_read'] )
  119. {
  120.     if ( !$userdata['session_logged_in'] )
  121.     {
  122.         $redirect = "t=" . $topic_id;
  123.         header("Location: " . append_sid("login.$phpEx?redirect=printview.$phpEx&$redirect", true));
  124.     }
  125.  
  126.     $message = sprintf($lang['Sorry_auth_read'], $is_auth['auth_read_type']);
  127.  
  128.     message_die(GENERAL_MESSAGE, $message);
  129. }
  130. //
  131. // End auth check
  132. //
  133.  
  134. //
  135. // Right we have auth checked and a topic id so we can fetch the topic data.
  136. //
  137.  
  138. //
  139. // Decide how to order the post display
  140. //
  141. if(!empty($HTTP_POST_VARS['postorder']) || !empty($HTTP_GET_VARS['postorder']))
  142. {
  143.     $post_order = (!empty($HTTP_POST_VARS['postorder'])) ? $HTTP_POST_VARS['postorder'] : $HTTP_GET_VARS['postorder'];
  144.     $post_time_order = ($post_order == "asc") ? "ASC" : "DESC";
  145. }
  146. else
  147. {
  148.     $post_order = "asc";
  149.     $post_time_order = "ASC";
  150. }
  151.  
  152. $sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, p.*,  pt.post_text, pt.post_subject, pt.bbcode_uid
  153.     FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt
  154.     WHERE p.topic_id = $topic_id
  155.         AND pt.post_id = p.post_id
  156.         AND u.user_id = p.poster_id
  157.     ORDER BY p.post_time $post_time_order";
  158. if(!$result = $db->sql_query($sql))
  159. {
  160.     message_die(GENERAL_ERROR, "Couldn't obtain post/user information.", "", __LINE__, __FILE__, $sql);
  161. }
  162.  
  163. if(!$total_posts = $db->sql_numrows($result))
  164. {
  165.     message_die(GENERAL_MESSAGE, $lang['No_posts_topic']);
  166. }
  167. $postrow = $db->sql_fetchrowset($result);
  168. $db->sql_freeresult($result);
  169.  
  170. //
  171. // Define censored word matches
  172. //
  173. $orig_word = array();
  174. $replacement_word = array();
  175. obtain_word_list($orig_word, $replacement_word);
  176.  
  177. //
  178. // Censor topic title
  179. //
  180. if( count($orig_word) )
  181. {
  182.     $topic_title = preg_replace($orig_word, $replacement_word, $topic_title);
  183. }
  184.  
  185.  
  186. //
  187. // Loop through the posts
  188. //
  189. for($i = 0; $i < $total_posts; $i++)
  190. {
  191.     $poster_id = $postrow[$i]['user_id'];
  192.     $poster = $postrow[$i]['username'];
  193.  
  194.     $post_date = create_date($board_config['default_dateformat'], $postrow[$i]['post_time'], $board_config['board_timezone']);
  195.     $post_subject = ( $postrow[$i]['post_subject'] != "" ) ? $postrow[$i]['post_subject'] : "";
  196.  
  197.     $message = $postrow[$i]['post_text'];
  198.     $bbcode_uid = $postrow[$i]['bbcode_uid'];
  199.  
  200.     // Dont want any HTML on printview
  201.     if( $postrow[$i]['enable_html'] )
  202.     {
  203.         $message = preg_replace("#(<)([\/]?.*?)(>)#is", "<\\2>", $message);
  204.     }
  205.     // But BBcode, links and smilies are OK, possible revision in future version?
  206.     if( $bbcode_uid != "" )
  207.     {
  208.         $message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace("/\:[0-9a-z\:]+\]/si", "]", $message);
  209.     }
  210.     $message = make_clickable($message);
  211.      //
  212.     // Replace naughty words
  213.     //
  214.     if( count($orig_word) )
  215.     {
  216.         $post_subject = preg_replace($orig_word, $replacement_word, $post_subject);
  217.         $message = preg_replace($orig_word, $replacement_word, $message);
  218.     }
  219.     if( $board_config['allow_smilies'] )
  220.     {
  221.         if( $postrow[$i]['enable_smilies'] )
  222.         {
  223.             $message = smilies_pass($message);
  224.         }
  225.     }
  226.     $message = str_replace("\n", "\n<br />\n", $message);
  227.  
  228.      $template->assign_block_vars("postrow", array(
  229.           "POSTER_NAME" => $poster,
  230.           "POST_DATE" => $post_date,
  231.         "POST_SUBJECT" => $post_subject,
  232.         "MESSAGE" => $message)
  233.     );
  234. }
  235.  
  236.  
  237. //
  238. // Set up all the other template variables
  239. //
  240. $page_title = $lang['View_topic'] ." - $topic_title";
  241. $template->assign_vars(array(
  242.     "FORUM_ID" => $forum_id,
  243.     "FORUM_NAME" => $forum_name,
  244.     "TOPIC_ID" => $topic_id,
  245.     "TOPIC_TITLE" => $topic_title,
  246.     "SITENAME" => $board_config['sitename'],
  247.     "SITE_DESCRIPTION" => $board_config['site_desc'],
  248.     "PAGE_TITLE" => $page_title,
  249.     "L_POSTED" => $lang['Posted'],
  250.     "L_POST_SUBJECT" => $lang['Post_subject'],
  251.     "L_POSTED" => $lang['Posted'],
  252.     "L_AUTHOR" => $lang['Author'],
  253.     "L_SUBJECT" => $lang['Subject'],
  254.     "L_MESSAGE" => $lang['Message'],
  255.     "L_FORUM" => $lang['Forum'],
  256.     "PHPBB_VERSION" => "2" . $board_config['version'],
  257.     "T_FONTFACE1" => $theme['fontface1'],
  258.     "T_FONTSIZE2" => $theme['fontsize2'],
  259.     "S_CONTENT_DIRECTION" => $lang['DIRECTION'],
  260.     "S_CONTENT_ENCODING" => $lang['ENCODING'],
  261.     "S_TIMEZONE" => sprintf($lang['All_times'], $lang[number_format($board_config['board_timezone'])]),
  262.     "L_TOPICS" => $lang['Topics'])
  263. );
  264. //
  265. // Right, thats got it all, send out to template.
  266. //
  267. $template->pparse("body");
  268. $db->sql_close();
  269. //
  270. // Compress buffered output if required
  271. // and send to browser
  272. //
  273. if($do_gzip_compress)
  274. {
  275.     //
  276.     // Borrowed from php.net!
  277.     //
  278.     $gzip_contents = ob_get_contents();
  279.     ob_end_clean();
  280.  
  281.     $gzip_size = strlen($gzip_contents);
  282.     $gzip_crc = crc32($gzip_contents);
  283.  
  284.     $gzip_contents = gzcompress($gzip_contents, 9);
  285.     $gzip_contents = substr($gzip_contents, 0, strlen($gzip_contents) - 4);
  286.  
  287.     echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
  288.     echo $gzip_contents;
  289.     echo pack("V", $gzip_crc);
  290.     echo pack("V", $gzip_size);
  291. }
  292.  
  293. exit;
  294. ?>
  295.  
  296.