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 / fetchposts.php < prev    next >
PHP Script  |  2004-07-18  |  9KB  |  299 lines

  1. <?php
  2. /***************************************************************************
  3.  *                            fetchposts.php
  4.  *                           -------------------
  5.  *   begin              : Tuesday, August 13, 2002
  6.  *   copyright          : (C) 2002 Smartor
  7.  *   email              : smartor_xp@hotmail.com
  8.  *   original work      : Volker Rattel <ca5ey@clanunity.net>
  9.  *
  10.  *   $Id: fetchposts.php,v 2.1.7 2003/01/30, 16:45:24 Smartor Exp $
  11.  *
  12.  ***************************************************************************/
  13.  
  14. /***************************************************************************
  15.  *
  16.  *   This program is free software; you can redistribute it and/or modify
  17.  *   it under the terms of the GNU General Public License as published by
  18.  *   the Free Software Foundation; either version 2 of the License, or
  19.  *   (at your option) any later version.
  20.  *
  21.  ***************************************************************************/
  22.  
  23. /***************************************************************************
  24.  *
  25.  *   Some code in this file I borrowed from the phpBB Fetch Posts MOD by Ca5ey
  26.  *   and Mouse Hover Topic Preview MOD by Shannado
  27.  *
  28.  ***************************************************************************/
  29.  
  30. if ( !defined('IN_PHPBB') )
  31. {
  32.     die("Hacking attempt");
  33. }
  34.  
  35. error_reporting(E_ERROR | E_WARNING | E_PARSE);
  36. set_magic_quotes_runtime(0);
  37.  
  38. include_once($phpbb_root_path . 'includes/bbcode.'.$phpEx);
  39.  
  40.  
  41. function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length)
  42. {
  43.     global $db, $board_config;
  44.  
  45.     $sql = 'SELECT
  46.               t.topic_id,
  47.               t.topic_time,
  48.               t.topic_title,
  49.               pt.post_text,
  50.               u.username,
  51.               u.user_id,
  52.               t.topic_replies,
  53.               pt.bbcode_uid,
  54.               t.forum_id,
  55.               t.topic_poster,
  56.               t.topic_first_post_id,
  57.               t.topic_status,
  58.               pt.post_id,
  59.               p.post_id,
  60.               p.enable_smilies
  61.             FROM
  62.               ' . TOPICS_TABLE . ' AS t,
  63.               ' . USERS_TABLE . ' AS u,
  64.               ' . POSTS_TEXT_TABLE . ' AS pt,
  65.               ' . POSTS_TABLE . ' AS p
  66.             WHERE
  67.               t.forum_id IN (' . $forum_sql . ') AND
  68.               t.topic_time <= ' . time() . ' AND
  69.               t.topic_poster = u.user_id AND
  70.               t.topic_first_post_id = pt.post_id AND
  71.               t.topic_first_post_id = p.post_id AND
  72.               t.topic_status <> 2
  73.             ORDER BY
  74.               t.topic_time DESC';
  75.     if ($number_of_posts != 0)
  76.     {
  77.         $sql .= '
  78.             LIMIT
  79.               0,' . $number_of_posts;
  80.     }
  81.     //
  82.     // query the database
  83.     //
  84.     if(!($result = $db->sql_query($sql)))
  85.     {
  86.         message_die(GENERAL_ERROR, 'Could not query announcements information', '', __LINE__, __FILE__, $sql);
  87.     }
  88.     //
  89.     // fetch all postings
  90.     //
  91.     $posts = array();
  92.     if ($row = $db->sql_fetchrow($result))
  93.     {
  94.         $i = 0;
  95.         do
  96.         {
  97.             $posts[$i]['bbcode_uid'] = $row['bbcode_uid'];
  98.             $posts[$i]['enable_smilies'] = $row['enable_smilies'];
  99.             $posts[$i]['post_text'] = $row['post_text'];
  100.             $posts[$i]['topic_id'] = $row['topic_id'];
  101.             $posts[$i]['topic_replies'] = $row['topic_replies'];
  102.             $posts[$i]['topic_time'] = create_date($board_config['default_dateformat'], $row['topic_time'], $board_config['board_timezone']);
  103.             $posts[$i]['topic_title'] = $row['topic_title'];
  104.             $posts[$i]['user_id'] = $row['user_id'];
  105.             $posts[$i]['username'] = $row['username'];
  106.  
  107.             //
  108.             // do a little magic
  109.             // note: part of this comes from mds' news script and some additional magics from Smartor
  110.             //
  111.             stripslashes($posts[$i]['post_text']);
  112.             if (($text_length == 0) or (strlen($posts[$i]['post_text']) <= $text_length))
  113.             {                
  114.                 $posts[$i]['post_text'] = bbencode_second_pass($posts[$i]['post_text'], $posts[$i]['bbcode_uid']);
  115.                 $posts[$i]['striped'] = 0;
  116.             }
  117.             else // strip text for news
  118.             {
  119.                 $posts[$i]['post_text'] = bbencode_strip($posts[$i]['post_text'], $posts[$i]['bbcode_uid']);
  120.                 $posts[$i]['post_text'] = substr($posts[$i]['post_text'], 0, $text_length) . '...';
  121.                 $posts[$i]['striped'] = 1;
  122.             }
  123.             //
  124.             // Smilies
  125.             //
  126.             if ($posts[$i]['enable_smilies'] == 1)
  127.             {
  128.                 $posts[$i]['post_text'] = smilies_pass($posts[$i]['post_text']);
  129.             }
  130.             $posts[$i]['post_text'] = make_clickable($posts[$i]['post_text']);
  131.             //
  132.             // define censored word matches
  133.             //
  134.             $orig_word = array();
  135.             $replacement_word = array();
  136.             obtain_word_list($orig_word, $replacement_word);
  137.             //
  138.             // censor text and title
  139.             //
  140.             if (count($orig_word))
  141.             {
  142.                 $posts[$i]['topic_title'] = preg_replace($orig_word, $replacement_word, $posts[$i]['topic_title']);
  143.                 $posts[$i]['post_text'] = preg_replace($orig_word, $replacement_word,     $posts[$i]['post_text']);
  144.             }
  145.             $posts[$i]['post_text'] = nl2br($posts[$i]['post_text']);
  146.             $i++;
  147.         }
  148.         while ($row = $db->sql_fetchrow($result));
  149.     }
  150.     //
  151.     // return the result
  152.     //
  153.     return $posts;
  154. } // phpbb_fetch_posts
  155.  
  156. function phpbb_fetch_poll($forum_sql)
  157. {
  158.     global $db;
  159.  
  160.     $sql = 'SELECT
  161.               t.*,
  162.               vd.*
  163.             FROM
  164.               ' . TOPICS_TABLE     . ' AS t,
  165.               ' . VOTE_DESC_TABLE  . ' AS vd
  166.             WHERE
  167.               t.forum_id IN (' . $forum_sql . ') AND
  168.               t.topic_status <> 1 AND
  169.               t.topic_status <> 2 AND
  170.               t.topic_vote = 1 AND
  171.               t.topic_id = vd.topic_id
  172.             ORDER BY
  173.               t.topic_time DESC
  174.             LIMIT
  175.               0,1';
  176.  
  177.     if (!$query = $db->sql_query($sql))
  178.     {
  179.         message_die(GENERAL_ERROR, 'Could not query poll information', '', __LINE__, __FILE__, $sql);
  180.     }
  181.  
  182.     $result = $db->sql_fetchrow($query);
  183.  
  184.     if ($result)
  185.     {
  186.         $sql = 'SELECT
  187.                   *
  188.                 FROM
  189.                   ' . VOTE_RESULTS_TABLE . '
  190.                 WHERE
  191.                   vote_id = ' . $result['vote_id'] . '
  192.                 ORDER BY
  193.                   vote_option_id';
  194.  
  195.         if (!$query = $db->sql_query($sql))
  196.         {
  197.             message_die(GENERAL_ERROR, 'Could not query vote result information', '', __LINE__, __FILE__, $sql);
  198.         }
  199.  
  200.         while ($row = $db->sql_fetchrow($query))
  201.         {
  202.             $result['options'][] = $row;
  203.         }        
  204.     }
  205.  
  206.     return $result;
  207. } // end func phpbb_fetch_poll
  208.  
  209. //
  210. // Function strip all BBcodes (borrowed from Mouse Hover Topic Preview MOD)
  211. //
  212. function bbencode_strip($text, $uid)
  213. {
  214.     // pad it with a space so we can distinguish between FALSE and matching the 1st char (index 0).
  215.     // This is important; bbencode_quote(), bbencode_list(), and bbencode_code() all depend on it.
  216.     $text = " " . $text;
  217.  
  218.     // First: If there isn't a "[" and a "]" in the message, don't bother.
  219.     if (! (strpos($text, "[") && strpos($text, "]")) )
  220.     {
  221.         // Remove padding, return.
  222.         $text = substr($text, 1);
  223.         return $text;
  224.     }
  225.  
  226.     // [CODE] and [ /CODE ] for posting code (HTML, PHP, C etc etc) in your posts.
  227.     $text = str_replace("[code:1:$uid]","", $text);
  228.     $text = str_replace("[/code:1:$uid]", "", $text);
  229.     $text = str_replace("[code:$uid]", "", $text);
  230.     $text = str_replace("[/code:$uid]", "", $text);
  231.  
  232.     // [QUOTE] and [/QUOTE] for posting replies with quote, or just for quoting stuff.
  233.     $text = str_replace("[quote:1:$uid]","", $text);
  234.     $text = str_replace("[/quote:1:$uid]", "", $text);
  235.     $text = str_replace("[quote:$uid]", "", $text);
  236.     $text = str_replace("[/quote:$uid]", "", $text);
  237.     // New one liner to deal with opening quotes with usernames...
  238.     // replaces the two line version that I had here before..
  239.     $text = preg_replace("/\[quote:$uid=(?:\"?([^\"]*)\"?)\]/si", "", $text);
  240.     $text = preg_replace("/\[quote:1:$uid=(?:\"?([^\"]*)\"?)\]/si", "", $text);
  241.     
  242.     // [list] and [list=x] for (un)ordered lists.
  243.     // unordered lists
  244.     $text = str_replace("[list:$uid]", "", $text);
  245.     // li tags
  246.     $text = str_replace("[*:$uid]", "", $text);
  247.     // ending tags
  248.     $text = str_replace("[/list:u:$uid]", "", $text);
  249.     $text = str_replace("[/list:o:$uid]", "", $text);
  250.     // Ordered lists
  251.     $text = preg_replace("/\[list=([a1]):$uid\]/si", "", $text);
  252.  
  253.     // colours
  254.     $text = preg_replace("/\[color=(\#[0-9A-F]{6}|[a-z]+):$uid\]/si", "", $text);
  255.     $text = str_replace("[/color:$uid]", "", $text);
  256.  
  257.     // url #2
  258.     $text = str_replace("[url]","", $text);
  259.     $text = str_replace("[/url]", "", $text);
  260.  
  261.     // url /\[url=([a-z0-9\-\.,\?!%\*_\/:;~\\&$@\/=\+]+)\](.*?)\[/url\]/si
  262.     $text = preg_replace("/\[url=([a-z0-9\-\.,\?!%\*_\/:;~\\&$@\/=\+]+)\]/si", "", $text);
  263.     $text = str_replace("[/url:$uid]", "", $text);
  264.  
  265.     // img
  266.     $text = str_replace("[img:$uid]","", $text);
  267.     $text = str_replace("[/img:$uid]", "", $text);
  268.  
  269.     // email
  270.     $text = str_replace("[email:$uid]","", $text);
  271.     $text = str_replace("[/email:$uid]", "", $text);
  272.  
  273.     // size
  274.     $text = preg_replace("/\[size=([\-\+]?[1-2]?[0-9]):$uid\]/si", "", $text);
  275.     $text = str_replace("[/size:$uid]", "", $text);
  276.     
  277.     // align
  278.     $text = preg_replace("/\[align=(left|right|center|justify):$uid\]/si", "", $text);
  279.     $text = str_replace("[/align:$uid]", "", $text);
  280.  
  281.     // [b] and [/b] for bolding text.
  282.     $text = str_replace("[b:$uid]","", $text);
  283.     $text = str_replace("[/b:$uid]", "", $text);
  284.  
  285.     // [u] and [/u] for underlining text.
  286.     $text = str_replace("[u:$uid]", "", $text);
  287.     $text = str_replace("[/u:$uid]", "", $text);
  288.  
  289.     // [i] and [/i] for italicizing text.
  290.     $text = str_replace("[i:$uid]", "", $text);
  291.     $text = str_replace("[/i:$uid]", "", $text);
  292.        
  293.     // Remove our padding from the string..
  294.     $text = substr($text, 1);
  295.  
  296.     return $text;
  297. }
  298.  
  299. ?>