home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April (DVD) / PCWorld_2008-04_DVD.iso / temadvd / phpbb / phpBB-2.0.22.exe / phpBB2 / modcp.php < prev    next >
Encoding:
PHP Script  |  2006-12-19  |  38.1 KB  |  1,256 lines

  1. <?php
  2. /***************************************************************************
  3.  *                                 modcp.php
  4.  *                            -------------------
  5.  *   begin                : July 4, 2001
  6.  *   copyright            : (C) 2001 The phpBB Group
  7.  *   email                : support@phpbb.com
  8.  *
  9.  *   $Id: modcp.php,v 1.71.2.29 2006/12/16 13:11:24 acydburn Exp $
  10.  *
  11.  ***************************************************************************/
  12.  
  13. /***************************************************************************
  14.  *
  15.  *   This program is free software; you can redistribute it and/or modify
  16.  *   it under the terms of the GNU General Public License as published by
  17.  *   the Free Software Foundation; either version 2 of the License, or
  18.  *   (at your option) any later version.
  19.  *
  20.  ***************************************************************************/
  21.  
  22. /**
  23.  * Moderator Control Panel
  24.  *
  25.  * From this 'Control Panel' the moderator of a forum will be able to do
  26.  * mass topic operations (locking/unlocking/moving/deleteing), and it will
  27.  * provide an interface to do quick locking/unlocking/moving/deleting of
  28.  * topics via the moderator operations buttons on all of the viewtopic pages.
  29.  */
  30.  
  31. define('IN_PHPBB', true);
  32. $phpbb_root_path = './';
  33. include($phpbb_root_path . 'extension.inc');
  34. include($phpbb_root_path . 'common.'.$phpEx);
  35. include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
  36. include($phpbb_root_path . 'includes/functions_admin.'.$phpEx);
  37.  
  38. //
  39. // Obtain initial var settings
  40. //
  41. if ( isset($HTTP_GET_VARS[POST_FORUM_URL]) || isset($HTTP_POST_VARS[POST_FORUM_URL]) )
  42. {
  43.     $forum_id = (isset($HTTP_POST_VARS[POST_FORUM_URL])) ? intval($HTTP_POST_VARS[POST_FORUM_URL]) : intval($HTTP_GET_VARS[POST_FORUM_URL]);
  44. }
  45. else
  46. {
  47.     $forum_id = '';
  48. }
  49.  
  50. if ( isset($HTTP_GET_VARS[POST_POST_URL]) || isset($HTTP_POST_VARS[POST_POST_URL]) )
  51. {
  52.     $post_id = (isset($HTTP_POST_VARS[POST_POST_URL])) ? intval($HTTP_POST_VARS[POST_POST_URL]) : intval($HTTP_GET_VARS[POST_POST_URL]);
  53. }
  54. else
  55. {
  56.     $post_id = '';
  57. }
  58.  
  59. if ( isset($HTTP_GET_VARS[POST_TOPIC_URL]) || isset($HTTP_POST_VARS[POST_TOPIC_URL]) )
  60. {
  61.     $topic_id = (isset($HTTP_POST_VARS[POST_TOPIC_URL])) ? intval($HTTP_POST_VARS[POST_TOPIC_URL]) : intval($HTTP_GET_VARS[POST_TOPIC_URL]);
  62. }
  63. else
  64. {
  65.     $topic_id = '';
  66. }
  67.  
  68. $confirm = ( $HTTP_POST_VARS['confirm'] ) ? TRUE : 0;
  69.  
  70. //
  71. // Continue var definitions
  72. //
  73. $start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
  74. $start = ($start < 0) ? 0 : $start;
  75.  
  76. $delete = ( isset($HTTP_POST_VARS['delete']) ) ? TRUE : FALSE;
  77. $move = ( isset($HTTP_POST_VARS['move']) ) ? TRUE : FALSE;
  78. $lock = ( isset($HTTP_POST_VARS['lock']) ) ? TRUE : FALSE;
  79. $unlock = ( isset($HTTP_POST_VARS['unlock']) ) ? TRUE : FALSE;
  80.  
  81. if ( isset($HTTP_POST_VARS['mode']) || isset($HTTP_GET_VARS['mode']) )
  82. {
  83.     $mode = ( isset($HTTP_POST_VARS['mode']) ) ? $HTTP_POST_VARS['mode'] : $HTTP_GET_VARS['mode'];
  84.     $mode = htmlspecialchars($mode);
  85. }
  86. else
  87. {
  88.     if ( $delete )
  89.     {
  90.         $mode = 'delete';
  91.     }
  92.     else if ( $move )
  93.     {
  94.         $mode = 'move';
  95.     }
  96.     else if ( $lock )
  97.     {
  98.         $mode = 'lock';
  99.     }
  100.     else if ( $unlock )
  101.     {
  102.         $mode = 'unlock';
  103.     }
  104.     else
  105.     {
  106.         $mode = '';
  107.     }
  108. }
  109.  
  110. // session id check
  111. if (!empty($HTTP_POST_VARS['sid']) || !empty($HTTP_GET_VARS['sid']))
  112. {
  113.     $sid = (!empty($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : $HTTP_GET_VARS['sid'];
  114. }
  115. else
  116. {
  117.     $sid = '';
  118. }
  119.  
  120. //
  121. // Obtain relevant data
  122. //
  123. if ( !empty($topic_id) )
  124. {
  125.     $sql = "SELECT f.forum_id, f.forum_name, f.forum_topics
  126.         FROM " . TOPICS_TABLE . " t, " . FORUMS_TABLE . " f
  127.         WHERE t.topic_id = " . $topic_id . "
  128.             AND f.forum_id = t.forum_id";
  129.     if ( !($result = $db->sql_query($sql)) )
  130.     {
  131.         message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
  132.     }
  133.     $topic_row = $db->sql_fetchrow($result);
  134.  
  135.     if (!$topic_row)
  136.     {
  137.         message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
  138.     }
  139.  
  140.     $forum_topics = ( $topic_row['forum_topics'] == 0 ) ? 1 : $topic_row['forum_topics'];
  141.     $forum_id = $topic_row['forum_id'];
  142.     $forum_name = $topic_row['forum_name'];
  143. }
  144. else if ( !empty($forum_id) )
  145. {
  146.     $sql = "SELECT forum_name, forum_topics
  147.         FROM " . FORUMS_TABLE . "
  148.         WHERE forum_id = " . $forum_id;
  149.     if ( !($result = $db->sql_query($sql)) )
  150.     {
  151.         message_die(GENERAL_MESSAGE, 'Forum_not_exist');
  152.     }
  153.     $topic_row = $db->sql_fetchrow($result);
  154.  
  155.     if (!$topic_row)
  156.     {
  157.         message_die(GENERAL_MESSAGE, 'Forum_not_exist');
  158.     }
  159.  
  160.     $forum_topics = ( $topic_row['forum_topics'] == 0 ) ? 1 : $topic_row['forum_topics'];
  161.     $forum_name = $topic_row['forum_name'];
  162. }
  163. else
  164. {
  165.     message_die(GENERAL_MESSAGE, 'Forum_not_exist');
  166. }
  167.  
  168. //
  169. // Start session management
  170. //
  171. $userdata = session_pagestart($user_ip, $forum_id);
  172. init_userprefs($userdata);
  173. //
  174. // End session management
  175. //
  176.  
  177. // session id check
  178. if ($sid == '' || $sid != $userdata['session_id'])
  179. {
  180.     message_die(GENERAL_ERROR, 'Invalid_session');
  181. }
  182.  
  183. //
  184. // Check if user did or did not confirm
  185. // If they did not, forward them to the last page they were on
  186. //
  187. if ( isset($HTTP_POST_VARS['cancel']) )
  188. {
  189.     if ( $topic_id )
  190.     {
  191.         $redirect = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id";
  192.     }
  193.     else if ( $forum_id )
  194.     {
  195.         $redirect = "viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id";
  196.     }
  197.     else
  198.     {
  199.         $redirect = "index.$phpEx";
  200.     }
  201.  
  202.     redirect(append_sid($redirect, true));
  203. }
  204.  
  205. //
  206. // Start auth check
  207. //
  208. $is_auth = auth(AUTH_ALL, $forum_id, $userdata);
  209.  
  210. if ( !$is_auth['auth_mod'] )
  211. {
  212.     message_die(GENERAL_MESSAGE, $lang['Not_Moderator'], $lang['Not_Authorised']);
  213. }
  214. //
  215. // End Auth Check
  216. //
  217.  
  218. //
  219. // Do major work ...
  220. //
  221. switch( $mode )
  222. {
  223.     case 'delete':
  224.         if (!$is_auth['auth_delete'])
  225.         {
  226.             message_die(GENERAL_MESSAGE, sprintf($lang['Sorry_auth_delete'], $is_auth['auth_delete_type']));
  227.         }
  228.  
  229.         $page_title = $lang['Mod_CP'];
  230.         include($phpbb_root_path . 'includes/page_header.'.$phpEx);
  231.  
  232.         if ( $confirm )
  233.         {
  234.               if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
  235.             {
  236.                 message_die(GENERAL_MESSAGE, $lang['None_selected']);
  237.             }
  238.  
  239.             include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
  240.  
  241.             $topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ? $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
  242.  
  243.             $topic_id_sql = '';
  244.             for($i = 0; $i < count($topics); $i++)
  245.             {
  246.                 $topic_id_sql .= ( ( $topic_id_sql != '' ) ? ', ' : '' ) . intval($topics[$i]);
  247.             }
  248.  
  249.             $sql = "SELECT topic_id 
  250.                 FROM " . TOPICS_TABLE . "
  251.                 WHERE topic_id IN ($topic_id_sql)
  252.                     AND forum_id = $forum_id";
  253.             if ( !($result = $db->sql_query($sql)) )
  254.             {
  255.                 message_die(GENERAL_ERROR, 'Could not get topic id information', '', __LINE__, __FILE__, $sql);
  256.             }
  257.             
  258.             $topic_id_sql = '';
  259.             while ($row = $db->sql_fetchrow($result))
  260.             {
  261.                 $topic_id_sql .= (($topic_id_sql != '') ? ', ' : '') . intval($row['topic_id']);
  262.             }
  263.             $db->sql_freeresult($result);
  264.  
  265.             if ( $topic_id_sql == '')
  266.             {
  267.                 message_die(GENERAL_MESSAGE, $lang['None_selected']);
  268.             }
  269.  
  270.             $sql = "SELECT poster_id, COUNT(post_id) AS posts 
  271.                 FROM " . POSTS_TABLE . " 
  272.                 WHERE topic_id IN ($topic_id_sql) 
  273.                 GROUP BY poster_id";
  274.             if ( !($result = $db->sql_query($sql)) )
  275.             {
  276.                 message_die(GENERAL_ERROR, 'Could not get poster id information', '', __LINE__, __FILE__, $sql);
  277.             }
  278.  
  279.             $count_sql = array();
  280.             while ( $row = $db->sql_fetchrow($result) )
  281.             {
  282.                 $count_sql[] = "UPDATE " . USERS_TABLE . " 
  283.                     SET user_posts = user_posts - " . $row['posts'] . " 
  284.                     WHERE user_id = " . $row['poster_id'];
  285.             }
  286.             $db->sql_freeresult($result);
  287.  
  288.             if ( sizeof($count_sql) )
  289.             {
  290.                 for($i = 0; $i < sizeof($count_sql); $i++)
  291.                 {
  292.                     if ( !$db->sql_query($count_sql[$i]) )
  293.                     {
  294.                         message_die(GENERAL_ERROR, 'Could not update user post count information', '', __LINE__, __FILE__, $sql);
  295.                     }
  296.                 }
  297.             }
  298.             
  299.             $sql = "SELECT post_id 
  300.                 FROM " . POSTS_TABLE . " 
  301.                 WHERE topic_id IN ($topic_id_sql)";
  302.             if ( !($result = $db->sql_query($sql)) )
  303.             {
  304.                 message_die(GENERAL_ERROR, 'Could not get post id information', '', __LINE__, __FILE__, $sql);
  305.             }
  306.  
  307.             $post_id_sql = '';
  308.             while ( $row = $db->sql_fetchrow($result) )
  309.             {
  310.                 $post_id_sql .= ( ( $post_id_sql != '' ) ? ', ' : '' ) . intval($row['post_id']);
  311.             }
  312.             $db->sql_freeresult($result);
  313.  
  314.             $sql = "SELECT vote_id 
  315.                 FROM " . VOTE_DESC_TABLE . " 
  316.                 WHERE topic_id IN ($topic_id_sql)";
  317.             if ( !($result = $db->sql_query($sql)) )
  318.             {
  319.                 message_die(GENERAL_ERROR, 'Could not get vote id information', '', __LINE__, __FILE__, $sql);
  320.             }
  321.  
  322.             $vote_id_sql = '';
  323.             while ( $row = $db->sql_fetchrow($result) )
  324.             {
  325.                 $vote_id_sql .= ( ( $vote_id_sql != '' ) ? ', ' : '' ) . $row['vote_id'];
  326.             }
  327.             $db->sql_freeresult($result);
  328.  
  329.             //
  330.             // Got all required info so go ahead and start deleting everything
  331.             //
  332.             $sql = "DELETE 
  333.                 FROM " . TOPICS_TABLE . " 
  334.                 WHERE topic_id IN ($topic_id_sql) 
  335.                     OR topic_moved_id IN ($topic_id_sql)";
  336.             if ( !$db->sql_query($sql, BEGIN_TRANSACTION) )
  337.             {
  338.                 message_die(GENERAL_ERROR, 'Could not delete topics', '', __LINE__, __FILE__, $sql);
  339.             }
  340.  
  341.             if ( $post_id_sql != '' )
  342.             {
  343.                 $sql = "DELETE 
  344.                     FROM " . POSTS_TABLE . " 
  345.                     WHERE post_id IN ($post_id_sql)";
  346.                 if ( !$db->sql_query($sql) )
  347.                 {
  348.                     message_die(GENERAL_ERROR, 'Could not delete posts', '', __LINE__, __FILE__, $sql);
  349.                 }
  350.  
  351.                 $sql = "DELETE 
  352.                     FROM " . POSTS_TEXT_TABLE . " 
  353.                     WHERE post_id IN ($post_id_sql)";
  354.                 if ( !$db->sql_query($sql) )
  355.                 {
  356.                     message_die(GENERAL_ERROR, 'Could not delete posts text', '', __LINE__, __FILE__, $sql);
  357.                 }
  358.  
  359.                 remove_search_post($post_id_sql);
  360.             }
  361.  
  362.             if ( $vote_id_sql != '' )
  363.             {
  364.                 $sql = "DELETE 
  365.                     FROM " . VOTE_DESC_TABLE . " 
  366.                     WHERE vote_id IN ($vote_id_sql)";
  367.                 if ( !$db->sql_query($sql) )
  368.                 {
  369.                     message_die(GENERAL_ERROR, 'Could not delete vote descriptions', '', __LINE__, __FILE__, $sql);
  370.                 }
  371.  
  372.                 $sql = "DELETE 
  373.                     FROM " . VOTE_RESULTS_TABLE . " 
  374.                     WHERE vote_id IN ($vote_id_sql)";
  375.                 if ( !$db->sql_query($sql) )
  376.                 {
  377.                     message_die(GENERAL_ERROR, 'Could not delete vote results', '', __LINE__, __FILE__, $sql);
  378.                 }
  379.  
  380.                 $sql = "DELETE 
  381.                     FROM " . VOTE_USERS_TABLE . " 
  382.                     WHERE vote_id IN ($vote_id_sql)";
  383.                 if ( !$db->sql_query($sql) )
  384.                 {
  385.                     message_die(GENERAL_ERROR, 'Could not delete vote users', '', __LINE__, __FILE__, $sql);
  386.                 }
  387.             }
  388.  
  389.             $sql = "DELETE 
  390.                 FROM " . TOPICS_WATCH_TABLE . " 
  391.                 WHERE topic_id IN ($topic_id_sql)";
  392.             if ( !$db->sql_query($sql, END_TRANSACTION) )
  393.             {
  394.                 message_die(GENERAL_ERROR, 'Could not delete watched post list', '', __LINE__, __FILE__, $sql);
  395.             }
  396.  
  397.             sync('forum', $forum_id);
  398.  
  399.             if ( !empty($topic_id) )
  400.             {
  401.                 $redirect_page = "viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
  402.                 $l_redirect = sprintf($lang['Click_return_forum'], '<a href="' . $redirect_page . '">', '</a>');
  403.             }
  404.             else
  405.             {
  406.                 $redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
  407.                 $l_redirect = sprintf($lang['Click_return_modcp'], '<a href="' . $redirect_page . '">', '</a>');
  408.             }
  409.  
  410.             $template->assign_vars(array(
  411.                 'META' => '<meta http-equiv="refresh" content="3;url=' . $redirect_page . '">')
  412.             );
  413.  
  414.             message_die(GENERAL_MESSAGE, $lang['Topics_Removed'] . '<br /><br />' . $l_redirect);
  415.         }
  416.         else
  417.         {
  418.             // Not confirmed, show confirmation message
  419.             if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
  420.             {
  421.                 message_die(GENERAL_MESSAGE, $lang['None_selected']);
  422.             }
  423.  
  424.             $hidden_fields = '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" /><input type="hidden" name="mode" value="' . $mode . '" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />';
  425.  
  426.             if ( isset($HTTP_POST_VARS['topic_id_list']) )
  427.             {
  428.                 $topics = $HTTP_POST_VARS['topic_id_list'];
  429.                 for($i = 0; $i < count($topics); $i++)
  430.                 {
  431.                     $hidden_fields .= '<input type="hidden" name="topic_id_list[]" value="' . intval($topics[$i]) . '" />';
  432.                 }
  433.             }
  434.             else
  435.             {
  436.                 $hidden_fields .= '<input type="hidden" name="' . POST_TOPIC_URL . '" value="' . $topic_id . '" />';
  437.             }
  438.  
  439.             //
  440.             // Set template files
  441.             //
  442.             $template->set_filenames(array(
  443.                 'confirm' => 'confirm_body.tpl')
  444.             );
  445.  
  446.             $template->assign_vars(array(
  447.                 'MESSAGE_TITLE' => $lang['Confirm'],
  448.                 'MESSAGE_TEXT' => $lang['Confirm_delete_topic'],
  449.  
  450.                 'L_YES' => $lang['Yes'],
  451.                 'L_NO' => $lang['No'],
  452.  
  453.                 'S_CONFIRM_ACTION' => append_sid("modcp.$phpEx"),
  454.                 'S_HIDDEN_FIELDS' => $hidden_fields)
  455.             );
  456.  
  457.             $template->pparse('confirm');
  458.  
  459.             include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  460.         }
  461.         break;
  462.  
  463.     case 'move':
  464.         $page_title = $lang['Mod_CP'];
  465.         include($phpbb_root_path . 'includes/page_header.'.$phpEx);
  466.  
  467.         if ( $confirm )
  468.         {
  469.             if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
  470.             {
  471.                 message_die(GENERAL_MESSAGE, $lang['None_selected']);
  472.             }
  473.  
  474.             $new_forum_id = intval($HTTP_POST_VARS['new_forum']);
  475.             $old_forum_id = $forum_id;
  476.  
  477.             $sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . '
  478.                 WHERE forum_id = ' . $new_forum_id;
  479.             if ( !($result = $db->sql_query($sql)) )
  480.             {
  481.                 message_die(GENERAL_ERROR, 'Could not select from forums table', '', __LINE__, __FILE__, $sql);
  482.             }
  483.             
  484.             if (!$db->sql_fetchrow($result))
  485.             {
  486.                 message_die(GENERAL_MESSAGE, 'New forum does not exist');
  487.             }
  488.  
  489.             $db->sql_freeresult($result);
  490.  
  491.             if ( $new_forum_id != $old_forum_id )
  492.             {
  493.                 $topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ?  $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
  494.  
  495.                 $topic_list = '';
  496.                 for($i = 0; $i < count($topics); $i++)
  497.                 {
  498.                     $topic_list .= ( ( $topic_list != '' ) ? ', ' : '' ) . intval($topics[$i]);
  499.                 }
  500.  
  501.                 $sql = "SELECT * 
  502.                     FROM " . TOPICS_TABLE . " 
  503.                     WHERE topic_id IN ($topic_list)
  504.                         AND forum_id = $old_forum_id
  505.                         AND topic_status <> " . TOPIC_MOVED;
  506.                 if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) )
  507.                 {
  508.                     message_die(GENERAL_ERROR, 'Could not select from topic table', '', __LINE__, __FILE__, $sql);
  509.                 }
  510.  
  511.                 $row = $db->sql_fetchrowset($result);
  512.                 $db->sql_freeresult($result);
  513.  
  514.                 for($i = 0; $i < count($row); $i++)
  515.                 {
  516.                     $topic_id = $row[$i]['topic_id'];
  517.                     
  518.                     if ( isset($HTTP_POST_VARS['move_leave_shadow']) )
  519.                     {
  520.                         // Insert topic in the old forum that indicates that the forum has moved.
  521.                         $sql = "INSERT INTO " . TOPICS_TABLE . " (forum_id, topic_title, topic_poster, topic_time, topic_status, topic_type, topic_vote, topic_views, topic_replies, topic_first_post_id, topic_last_post_id, topic_moved_id)
  522.                             VALUES ($old_forum_id, '" . addslashes(str_replace("\'", "''", $row[$i]['topic_title'])) . "', '" . str_replace("\'", "''", $row[$i]['topic_poster']) . "', " . $row[$i]['topic_time'] . ", " . TOPIC_MOVED . ", " . POST_NORMAL . ", " . $row[$i]['topic_vote'] . ", " . $row[$i]['topic_views'] . ", " . $row[$i]['topic_replies'] . ", " . $row[$i]['topic_first_post_id'] . ", " . $row[$i]['topic_last_post_id'] . ", $topic_id)";
  523.                         if ( !$db->sql_query($sql) )
  524.                         {
  525.                             message_die(GENERAL_ERROR, 'Could not insert shadow topic', '', __LINE__, __FILE__, $sql);
  526.                         }
  527.                     }
  528.  
  529.                     $sql = "UPDATE " . TOPICS_TABLE . " 
  530.                         SET forum_id = $new_forum_id  
  531.                         WHERE topic_id = $topic_id";
  532.                     if ( !$db->sql_query($sql) )
  533.                     {
  534.                         message_die(GENERAL_ERROR, 'Could not update old topic', '', __LINE__, __FILE__, $sql);
  535.                     }
  536.  
  537.                     $sql = "UPDATE " . POSTS_TABLE . " 
  538.                         SET forum_id = $new_forum_id 
  539.                         WHERE topic_id = $topic_id";
  540.                     if ( !$db->sql_query($sql) )
  541.                     {
  542.                         message_die(GENERAL_ERROR, 'Could not update post topic ids', '', __LINE__, __FILE__, $sql);
  543.                     }
  544.                 }
  545.  
  546.                 // Sync the forum indexes
  547.                 sync('forum', $new_forum_id);
  548.                 sync('forum', $old_forum_id);
  549.  
  550.                 $message = $lang['Topics_Moved'] . '<br /><br />';
  551.  
  552.             }
  553.             else
  554.             {
  555.                 $message = $lang['No_Topics_Moved'] . '<br /><br />';
  556.             }
  557.  
  558.             if ( !empty($topic_id) )
  559.             {
  560.                 $redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
  561.                 $message .= sprintf($lang['Click_return_topic'], '<a href="' . $redirect_page . '">', '</a>');
  562.             }
  563.             else
  564.             {
  565.                 $redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
  566.                 $message .= sprintf($lang['Click_return_modcp'], '<a href="' . $redirect_page . '">', '</a>');
  567.             }
  568.  
  569.             $message = $message . '<br \><br \>' . sprintf($lang['Click_return_forum'], '<a href="' . "viewforum.$phpEx?" . POST_FORUM_URL . "=$old_forum_id&sid=" . $userdata['session_id'] . '">', '</a>');
  570.  
  571.             $template->assign_vars(array(
  572.                 'META' => '<meta http-equiv="refresh" content="3;url=' . $redirect_page . '">')
  573.             );
  574.  
  575.             message_die(GENERAL_MESSAGE, $message);
  576.         }
  577.         else
  578.         {
  579.             if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
  580.             {
  581.                 message_die(GENERAL_MESSAGE, $lang['None_selected']);
  582.             }
  583.  
  584.             $hidden_fields = '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" /><input type="hidden" name="mode" value="' . $mode . '" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />';
  585.  
  586.             if ( isset($HTTP_POST_VARS['topic_id_list']) )
  587.             {
  588.                 $topics = $HTTP_POST_VARS['topic_id_list'];
  589.  
  590.                 for($i = 0; $i < count($topics); $i++)
  591.                 {
  592.                     $hidden_fields .= '<input type="hidden" name="topic_id_list[]" value="' . intval($topics[$i]) . '" />';
  593.                 }
  594.             }
  595.             else
  596.             {
  597.                 $hidden_fields .= '<input type="hidden" name="' . POST_TOPIC_URL . '" value="' . $topic_id . '" />';
  598.             }
  599.  
  600.             //
  601.             // Set template files
  602.             //
  603.             $template->set_filenames(array(
  604.                 'movetopic' => 'modcp_move.tpl')
  605.             );
  606.  
  607.             $template->assign_vars(array(
  608.                 'MESSAGE_TITLE' => $lang['Confirm'],
  609.                 'MESSAGE_TEXT' => $lang['Confirm_move_topic'],
  610.  
  611.                 'L_MOVE_TO_FORUM' => $lang['Move_to_forum'], 
  612.                 'L_LEAVESHADOW' => $lang['Leave_shadow_topic'], 
  613.                 'L_YES' => $lang['Yes'],
  614.                 'L_NO' => $lang['No'],
  615.  
  616.                 'S_FORUM_SELECT' => make_forum_select('new_forum', $forum_id), 
  617.                 'S_MODCP_ACTION' => append_sid("modcp.$phpEx"),
  618.                 'S_HIDDEN_FIELDS' => $hidden_fields)
  619.             );
  620.  
  621.             $template->pparse('movetopic');
  622.  
  623.             include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  624.         }
  625.         break;
  626.  
  627.     case 'lock':
  628.         if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
  629.         {
  630.             message_die(GENERAL_MESSAGE, $lang['None_selected']);
  631.         }
  632.  
  633.         $topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ?  $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
  634.  
  635.         $topic_id_sql = '';
  636.         for($i = 0; $i < count($topics); $i++)
  637.         {
  638.             $topic_id_sql .= ( ( $topic_id_sql != '' ) ? ', ' : '' ) . intval($topics[$i]);
  639.         }
  640.  
  641.         $sql = "UPDATE " . TOPICS_TABLE . " 
  642.             SET topic_status = " . TOPIC_LOCKED . " 
  643.             WHERE topic_id IN ($topic_id_sql) 
  644.                 AND forum_id = $forum_id
  645.                 AND topic_moved_id = 0";
  646.         if ( !($result = $db->sql_query($sql)) )
  647.         {
  648.             message_die(GENERAL_ERROR, 'Could not update topics table', '', __LINE__, __FILE__, $sql);
  649.         }
  650.  
  651.         if ( !empty($topic_id) )
  652.         {
  653.             $redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
  654.             $message = sprintf($lang['Click_return_topic'], '<a href="' . $redirect_page . '">', '</a>');
  655.         }
  656.         else
  657.         {
  658.             $redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
  659.             $message = sprintf($lang['Click_return_modcp'], '<a href="' . $redirect_page . '">', '</a>');
  660.         }
  661.  
  662.         $message = $message . '<br \><br \>' . sprintf($lang['Click_return_forum'], '<a href="' . "viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'] . '">', '</a>');
  663.  
  664.         $template->assign_vars(array(
  665.             'META' => '<meta http-equiv="refresh" content="3;url=' . $redirect_page . '">')
  666.         );
  667.  
  668.         message_die(GENERAL_MESSAGE, $lang['Topics_Locked'] . '<br /><br />' . $message);
  669.  
  670.         break;
  671.  
  672.     case 'unlock':
  673.         if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
  674.         {
  675.             message_die(GENERAL_MESSAGE, $lang['None_selected']);
  676.         }
  677.  
  678.         $topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ?  $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
  679.  
  680.         $topic_id_sql = '';
  681.         for($i = 0; $i < count($topics); $i++)
  682.         {
  683.             $topic_id_sql .= ( ( $topic_id_sql != "") ? ', ' : '' ) . intval($topics[$i]);
  684.         }
  685.  
  686.         $sql = "UPDATE " . TOPICS_TABLE . " 
  687.             SET topic_status = " . TOPIC_UNLOCKED . " 
  688.             WHERE topic_id IN ($topic_id_sql) 
  689.                 AND forum_id = $forum_id
  690.                 AND topic_moved_id = 0";
  691.         if ( !($result = $db->sql_query($sql)) )
  692.         {
  693.             message_die(GENERAL_ERROR, 'Could not update topics table', '', __LINE__, __FILE__, $sql);
  694.         }
  695.  
  696.         if ( !empty($topic_id) )
  697.         {
  698.             $redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
  699.             $message = sprintf($lang['Click_return_topic'], '<a href="' . $redirect_page . '">', '</a>');
  700.         }
  701.         else
  702.         {
  703.             $redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
  704.             $message = sprintf($lang['Click_return_modcp'], '<a href="' . $redirect_page . '">', '</a>');
  705.         }
  706.  
  707.         $message = $message . '<br \><br \>' . sprintf($lang['Click_return_forum'], '<a href="' . "viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'] . '">', '</a>');
  708.  
  709.         $template->assign_vars(array(
  710.             'META' => '<meta http-equiv="refresh" content="3;url=' . $redirect_page . '">')
  711.         );
  712.  
  713.         message_die(GENERAL_MESSAGE, $lang['Topics_Unlocked'] . '<br /><br />' . $message);
  714.  
  715.         break;
  716.  
  717.     case 'split':
  718.         $page_title = $lang['Mod_CP'];
  719.         include($phpbb_root_path . 'includes/page_header.'.$phpEx);
  720.  
  721.         $post_id_sql = '';
  722.  
  723.         if (isset($HTTP_POST_VARS['split_type_all']) || isset($HTTP_POST_VARS['split_type_beyond']))
  724.         {
  725.             $posts = $HTTP_POST_VARS['post_id_list'];
  726.  
  727.             for ($i = 0; $i < count($posts); $i++)
  728.             {
  729.                 $post_id_sql .= (($post_id_sql != '') ? ', ' : '') . intval($posts[$i]);
  730.             }
  731.         }
  732.  
  733.         if ($post_id_sql != '')
  734.         {
  735.             $sql = "SELECT post_id 
  736.                 FROM " . POSTS_TABLE . "
  737.                 WHERE post_id IN ($post_id_sql)
  738.                     AND forum_id = $forum_id";
  739.             if ( !($result = $db->sql_query($sql)) )
  740.             {
  741.                 message_die(GENERAL_ERROR, 'Could not get post id information', '', __LINE__, __FILE__, $sql);
  742.             }
  743.             
  744.             $post_id_sql = '';
  745.             while ($row = $db->sql_fetchrow($result))
  746.             {
  747.                 $post_id_sql .= (($post_id_sql != '') ? ', ' : '') . intval($row['post_id']);
  748.             }
  749.             $db->sql_freeresult($result);
  750.  
  751.             if ($post_id_sql == '')
  752.             {
  753.                 message_die(GENERAL_MESSAGE, $lang['None_selected']);
  754.             }
  755.  
  756.             $sql = "SELECT post_id, poster_id, topic_id, post_time
  757.                 FROM " . POSTS_TABLE . "
  758.                 WHERE post_id IN ($post_id_sql) 
  759.                 ORDER BY post_time ASC";
  760.             if (!($result = $db->sql_query($sql)))
  761.             {
  762.                 message_die(GENERAL_ERROR, 'Could not get post information', '', __LINE__, __FILE__, $sql);
  763.             }
  764.  
  765.             if ($row = $db->sql_fetchrow($result))
  766.             {
  767.                 $first_poster = $row['poster_id'];
  768.                 $topic_id = $row['topic_id'];
  769.                 $post_time = $row['post_time'];
  770.  
  771.                 $user_id_sql = '';
  772.                 $post_id_sql = '';
  773.                 do
  774.                 {
  775.                     $user_id_sql .= (($user_id_sql != '') ? ', ' : '') . intval($row['poster_id']);
  776.                     $post_id_sql .= (($post_id_sql != '') ? ', ' : '') . intval($row['post_id']);;
  777.                 }
  778.                 while ($row = $db->sql_fetchrow($result));
  779.  
  780.                 $post_subject = trim(htmlspecialchars($HTTP_POST_VARS['subject']));
  781.                 if (empty($post_subject))
  782.                 {
  783.                     message_die(GENERAL_MESSAGE, $lang['Empty_subject']);
  784.                 }
  785.  
  786.                 $new_forum_id = intval($HTTP_POST_VARS['new_forum_id']);
  787.                 $topic_time = time();
  788.                 
  789.                 $sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . '
  790.                     WHERE forum_id = ' . $new_forum_id;
  791.                 if ( !($result = $db->sql_query($sql)) )
  792.                 {
  793.                     message_die(GENERAL_ERROR, 'Could not select from forums table', '', __LINE__, __FILE__, $sql);
  794.                 }
  795.             
  796.                 if (!$db->sql_fetchrow($result))
  797.                 {
  798.                     message_die(GENERAL_MESSAGE, 'New forum does not exist');
  799.                 }
  800.  
  801.                 $db->sql_freeresult($result);
  802.  
  803.                 $sql  = "INSERT INTO " . TOPICS_TABLE . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type)
  804.                     VALUES ('" . str_replace("\'", "''", $post_subject) . "', $first_poster, " . $topic_time . ", $new_forum_id, " . TOPIC_UNLOCKED . ", " . POST_NORMAL . ")";
  805.                 if (!($db->sql_query($sql, BEGIN_TRANSACTION)))
  806.                 {
  807.                     message_die(GENERAL_ERROR, 'Could not insert new topic', '', __LINE__, __FILE__, $sql);
  808.                 }
  809.  
  810.                 $new_topic_id = $db->sql_nextid();
  811.  
  812.                 // Update topic watch table, switch users whose posts
  813.                 // have moved, over to watching the new topic
  814.                 $sql = "UPDATE " . TOPICS_WATCH_TABLE . " 
  815.                     SET topic_id = $new_topic_id 
  816.                     WHERE topic_id = $topic_id 
  817.                         AND user_id IN ($user_id_sql)";
  818.                 if (!$db->sql_query($sql))
  819.                 {
  820.                     message_die(GENERAL_ERROR, 'Could not update topics watch table', '', __LINE__, __FILE__, $sql);
  821.                 }
  822.  
  823.                 $sql_where = (!empty($HTTP_POST_VARS['split_type_beyond'])) ? " post_time >= $post_time AND topic_id = $topic_id" : "post_id IN ($post_id_sql)";
  824.  
  825.                 $sql =     "UPDATE " . POSTS_TABLE . "
  826.                     SET topic_id = $new_topic_id, forum_id = $new_forum_id 
  827.                     WHERE $sql_where";
  828.                 if (!$db->sql_query($sql, END_TRANSACTION))
  829.                 {
  830.                     message_die(GENERAL_ERROR, 'Could not update posts table', '', __LINE__, __FILE__, $sql);
  831.                 }
  832.  
  833.                 sync('topic', $new_topic_id);
  834.                 sync('topic', $topic_id);
  835.                 sync('forum', $new_forum_id);
  836.                 sync('forum', $forum_id);
  837.  
  838.                 $template->assign_vars(array(
  839.                     'META' => '<meta http-equiv="refresh" content="3;url=' . "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'] . '">')
  840.                 );
  841.  
  842.                 $message = $lang['Topic_split'] . '<br /><br />' . sprintf($lang['Click_return_topic'], '<a href="' . "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'] . '">', '</a>');
  843.                 message_die(GENERAL_MESSAGE, $message);
  844.             }
  845.         }
  846.         else
  847.         {
  848.             //
  849.             // Set template files
  850.             //
  851.             $template->set_filenames(array(
  852.                 'split_body' => 'modcp_split.tpl')
  853.             );
  854.  
  855.             $sql = "SELECT u.username, p.*, pt.post_text, pt.bbcode_uid, pt.post_subject, p.post_username
  856.                 FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt
  857.                 WHERE p.topic_id = $topic_id
  858.                     AND p.poster_id = u.user_id
  859.                     AND p.post_id = pt.post_id
  860.                 ORDER BY p.post_time ASC";
  861.             if ( !($result = $db->sql_query($sql)) )
  862.             {
  863.                 message_die(GENERAL_ERROR, 'Could not get topic/post information', '', __LINE__, __FILE__, $sql);
  864.             }
  865.  
  866.             $s_hidden_fields = '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" /><input type="hidden" name="' . POST_TOPIC_URL . '" value="' . $topic_id . '" /><input type="hidden" name="mode" value="split" />';
  867.  
  868.             if( ( $total_posts = $db->sql_numrows($result) ) > 0 )
  869.             {
  870.                 $postrow = $db->sql_fetchrowset($result);
  871.  
  872.                 $template->assign_vars(array(
  873.                     'L_SPLIT_TOPIC' => $lang['Split_Topic'],
  874.                     'L_SPLIT_TOPIC_EXPLAIN' => $lang['Split_Topic_explain'],
  875.                     'L_AUTHOR' => $lang['Author'],
  876.                     'L_MESSAGE' => $lang['Message'],
  877.                     'L_SELECT' => $lang['Select'],
  878.                     'L_SPLIT_SUBJECT' => $lang['Split_title'],
  879.                     'L_SPLIT_FORUM' => $lang['Split_forum'],
  880.                     'L_POSTED' => $lang['Posted'],
  881.                     'L_SPLIT_POSTS' => $lang['Split_posts'],
  882.                     'L_SUBMIT' => $lang['Submit'],
  883.                     'L_SPLIT_AFTER' => $lang['Split_after'], 
  884.                     'L_POST_SUBJECT' => $lang['Post_subject'], 
  885.                     'L_MARK_ALL' => $lang['Mark_all'], 
  886.                     'L_UNMARK_ALL' => $lang['Unmark_all'], 
  887.                     'L_POST' => $lang['Post'], 
  888.  
  889.                     'FORUM_NAME' => $forum_name, 
  890.  
  891.                     'U_VIEW_FORUM' => append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id"), 
  892.  
  893.                     'S_SPLIT_ACTION' => append_sid("modcp.$phpEx"),
  894.                     'S_HIDDEN_FIELDS' => $s_hidden_fields,
  895.                     'S_FORUM_SELECT' => make_forum_select("new_forum_id", false, $forum_id))
  896.                 );
  897.  
  898.                 //
  899.                 // Define censored word matches
  900.                 //
  901.                 $orig_word = array();
  902.                 $replacement_word = array();
  903.                 obtain_word_list($orig_word, $replacement_word);
  904.  
  905.                 for($i = 0; $i < $total_posts; $i++)
  906.                 {
  907.                     $post_id = $postrow[$i]['post_id'];
  908.                     $poster_id = $postrow[$i]['poster_id'];
  909.                     $poster = $postrow[$i]['username'];
  910.  
  911.                     $post_date = create_date($board_config['default_dateformat'], $postrow[$i]['post_time'], $board_config['board_timezone']);
  912.  
  913.                     $bbcode_uid = $postrow[$i]['bbcode_uid'];
  914.                     $message = $postrow[$i]['post_text'];
  915.                     $post_subject = ( $postrow[$i]['post_subject'] != '' ) ? $postrow[$i]['post_subject'] : $topic_title;
  916.  
  917.                     //
  918.                     // If the board has HTML off but the post has HTML
  919.                     // on then we process it, else leave it alone
  920.                     //
  921.                     if ( !$board_config['allow_html'] )
  922.                     {
  923.                         if ( $postrow[$i]['enable_html'] )
  924.                         {
  925.                             $message = preg_replace('#(<)([\/]?.*?)(>)#is', '<\\2>', $message);
  926.                         }
  927.                     }
  928.  
  929.                     if ( $bbcode_uid != '' )
  930.                     {
  931.                         $message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($message, $bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $message);
  932.                     }
  933.  
  934.                     if ( count($orig_word) )
  935.                     {
  936.                         $post_subject = preg_replace($orig_word, $replacement_word, $post_subject);
  937.                         $message = preg_replace($orig_word, $replacement_word, $message);
  938.                     }
  939.  
  940.                     $message = make_clickable($message);
  941.  
  942.                     if ( $board_config['allow_smilies'] && $postrow[$i]['enable_smilies'] )
  943.                     {
  944.                         $message = smilies_pass($message);
  945.                     }
  946.  
  947.                     $message = str_replace("\n", '<br />', $message);
  948.                     
  949.                     $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
  950.                     $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
  951.  
  952.                     $checkbox = ( $i > 0 ) ? '<input type="checkbox" name="post_id_list[]" value="' . $post_id . '" />' : ' ';
  953.                     
  954.                     $template->assign_block_vars('postrow', array(
  955.                         'ROW_COLOR' => '#' . $row_color,
  956.                         'ROW_CLASS' => $row_class,
  957.                         'POSTER_NAME' => $poster,
  958.                         'POST_DATE' => $post_date,
  959.                         'POST_SUBJECT' => $post_subject,
  960.                         'MESSAGE' => $message,
  961.                         'POST_ID' => $post_id,
  962.                         
  963.                         'S_SPLIT_CHECKBOX' => $checkbox)
  964.                     );
  965.                 }
  966.  
  967.                 $template->pparse('split_body');
  968.             }
  969.         }
  970.         break;
  971.  
  972.     case 'ip':
  973.         $page_title = $lang['Mod_CP'];
  974.         include($phpbb_root_path . 'includes/page_header.'.$phpEx);
  975.  
  976.         $rdns_ip_num = ( isset($HTTP_GET_VARS['rdns']) ) ? $HTTP_GET_VARS['rdns'] : "";
  977.  
  978.         if ( !$post_id )
  979.         {
  980.             message_die(GENERAL_MESSAGE, $lang['No_such_post']);
  981.         }
  982.  
  983.         //
  984.         // Set template files
  985.         //
  986.         $template->set_filenames(array(
  987.             'viewip' => 'modcp_viewip.tpl')
  988.         );
  989.  
  990.         // Look up relevent data for this post
  991.         $sql = "SELECT poster_ip, poster_id 
  992.             FROM " . POSTS_TABLE . " 
  993.             WHERE post_id = $post_id
  994.                 AND forum_id = $forum_id";
  995.         if ( !($result = $db->sql_query($sql)) )
  996.         {
  997.             message_die(GENERAL_ERROR, 'Could not get poster IP information', '', __LINE__, __FILE__, $sql);
  998.         }
  999.         
  1000.         if ( !($post_row = $db->sql_fetchrow($result)) )
  1001.         {
  1002.             message_die(GENERAL_MESSAGE, $lang['No_such_post']);
  1003.         }
  1004.  
  1005.         $ip_this_post = decode_ip($post_row['poster_ip']);
  1006.         $ip_this_post = ( $rdns_ip_num == $ip_this_post ) ? htmlspecialchars(gethostbyaddr($ip_this_post)) : $ip_this_post;
  1007.  
  1008.         $poster_id = $post_row['poster_id'];
  1009.  
  1010.         $template->assign_vars(array(
  1011.             'L_IP_INFO' => $lang['IP_info'],
  1012.             'L_THIS_POST_IP' => $lang['This_posts_IP'],
  1013.             'L_OTHER_IPS' => $lang['Other_IP_this_user'],
  1014.             'L_OTHER_USERS' => $lang['Users_this_IP'],
  1015.             'L_LOOKUP_IP' => $lang['Lookup_IP'], 
  1016.             'L_SEARCH' => $lang['Search'],
  1017.  
  1018.             'SEARCH_IMG' => $images['icon_search'], 
  1019.  
  1020.             'IP' => $ip_this_post, 
  1021.                 
  1022.             'U_LOOKUP_IP' => "modcp.$phpEx?mode=ip&" . POST_POST_URL . "=$post_id&" . POST_TOPIC_URL . "=$topic_id&rdns=$ip_this_post&sid=" . $userdata['session_id'])
  1023.         );
  1024.  
  1025.         //
  1026.         // Get other IP's this user has posted under
  1027.         //
  1028.         $sql = "SELECT poster_ip, COUNT(*) AS postings 
  1029.             FROM " . POSTS_TABLE . " 
  1030.             WHERE poster_id = $poster_id 
  1031.             GROUP BY poster_ip 
  1032.             ORDER BY " . (( SQL_LAYER == 'msaccess' ) ? 'COUNT(*)' : 'postings' ) . " DESC";
  1033.         if ( !($result = $db->sql_query($sql)) )
  1034.         {
  1035.             message_die(GENERAL_ERROR, 'Could not get IP information for this user', '', __LINE__, __FILE__, $sql);
  1036.         }
  1037.  
  1038.         if ( $row = $db->sql_fetchrow($result) )
  1039.         {
  1040.             $i = 0;
  1041.             do
  1042.             {
  1043.                 if ( $row['poster_ip'] == $post_row['poster_ip'] )
  1044.                 {
  1045.                     $template->assign_vars(array(
  1046.                         'POSTS' => $row['postings'] . ' ' . ( ( $row['postings'] == 1 ) ? $lang['Post'] : $lang['Posts'] ))
  1047.                     );
  1048.                     continue;
  1049.                 }
  1050.  
  1051.                 $ip = decode_ip($row['poster_ip']);
  1052.                 $ip = ( $rdns_ip_num == $row['poster_ip'] || $rdns_ip_num == 'all') ? htmlspecialchars(gethostbyaddr($ip)) : $ip;
  1053.  
  1054.                 $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
  1055.                 $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
  1056.  
  1057.                 $template->assign_block_vars('iprow', array(
  1058.                     'ROW_COLOR' => '#' . $row_color, 
  1059.                     'ROW_CLASS' => $row_class, 
  1060.                     'IP' => $ip,
  1061.                     'POSTS' => $row['postings'] . ' ' . ( ( $row['postings'] == 1 ) ? $lang['Post'] : $lang['Posts'] ),
  1062.  
  1063.                     'U_LOOKUP_IP' => "modcp.$phpEx?mode=ip&" . POST_POST_URL . "=$post_id&" . POST_TOPIC_URL . "=$topic_id&rdns=" . $row['poster_ip'] . "&sid=" . $userdata['session_id'])
  1064.                 );
  1065.  
  1066.                 $i++; 
  1067.             }
  1068.             while ( $row = $db->sql_fetchrow($result) );
  1069.         }
  1070.  
  1071.         //
  1072.         // Get other users who've posted under this IP
  1073.         //
  1074.         $sql = "SELECT u.user_id, u.username, COUNT(*) as postings 
  1075.             FROM " . USERS_TABLE ." u, " . POSTS_TABLE . " p 
  1076.             WHERE p.poster_id = u.user_id 
  1077.                 AND p.poster_ip = '" . $post_row['poster_ip'] . "'
  1078.             GROUP BY u.user_id, u.username
  1079.             ORDER BY " . (( SQL_LAYER == 'msaccess' ) ? 'COUNT(*)' : 'postings' ) . " DESC";
  1080.         if ( !($result = $db->sql_query($sql)) )
  1081.         {
  1082.             message_die(GENERAL_ERROR, 'Could not get posters information based on IP', '', __LINE__, __FILE__, $sql);
  1083.         }
  1084.  
  1085.         if ( $row = $db->sql_fetchrow($result) )
  1086.         {
  1087.             $i = 0;
  1088.             do
  1089.             {
  1090.                 $id = $row['user_id'];
  1091.                 $username = ( $id == ANONYMOUS ) ? $lang['Guest'] : $row['username'];
  1092.  
  1093.                 $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
  1094.                 $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
  1095.  
  1096.                 $template->assign_block_vars('userrow', array(
  1097.                     'ROW_COLOR' => '#' . $row_color, 
  1098.                     'ROW_CLASS' => $row_class, 
  1099.                     'USERNAME' => $username,
  1100.                     'POSTS' => $row['postings'] . ' ' . ( ( $row['postings'] == 1 ) ? $lang['Post'] : $lang['Posts'] ),
  1101.                     'L_SEARCH_POSTS' => sprintf($lang['Search_user_posts'], $username), 
  1102.  
  1103.                     'U_PROFILE' => ($id == ANONYMOUS) ? "modcp.$phpEx?mode=ip&" . POST_POST_URL . "=" . $post_id . "&" . POST_TOPIC_URL . "=" . $topic_id . "&sid=" . $userdata['session_id'] : append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$id"),
  1104.                     'U_SEARCHPOSTS' => append_sid("search.$phpEx?search_author=" . (($id == ANONYMOUS) ? 'Anonymous' : urlencode($username)) . "&showresults=topics"))
  1105.                 );
  1106.  
  1107.                 $i++; 
  1108.             }
  1109.             while ( $row = $db->sql_fetchrow($result) );
  1110.         }
  1111.  
  1112.         $template->pparse('viewip');
  1113.  
  1114.         break;
  1115.  
  1116.     default:
  1117.         $page_title = $lang['Mod_CP'];
  1118.         include($phpbb_root_path . 'includes/page_header.'.$phpEx);
  1119.  
  1120.         $template->assign_vars(array(
  1121.             'FORUM_NAME' => $forum_name,
  1122.  
  1123.             'L_MOD_CP' => $lang['Mod_CP'],
  1124.             'L_MOD_CP_EXPLAIN' => $lang['Mod_CP_explain'],
  1125.             'L_SELECT' => $lang['Select'],
  1126.             'L_DELETE' => $lang['Delete'],
  1127.             'L_MOVE' => $lang['Move'],
  1128.             'L_LOCK' => $lang['Lock'],
  1129.             'L_UNLOCK' => $lang['Unlock'],
  1130.             'L_TOPICS' => $lang['Topics'], 
  1131.             'L_REPLIES' => $lang['Replies'], 
  1132.             'L_LASTPOST' => $lang['Last_Post'], 
  1133.             'L_SELECT' => $lang['Select'], 
  1134.  
  1135.             'U_VIEW_FORUM' => append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id"), 
  1136.             'S_HIDDEN_FIELDS' => '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" /><input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '" />',
  1137.             'S_MODCP_ACTION' => append_sid("modcp.$phpEx"))
  1138.         );
  1139.  
  1140.         $template->set_filenames(array(
  1141.             'body' => 'modcp_body.tpl')
  1142.         );
  1143.         make_jumpbox('modcp.'.$phpEx);
  1144.  
  1145.         //
  1146.         // Define censored word matches
  1147.         //
  1148.         $orig_word = array();
  1149.         $replacement_word = array();
  1150.         obtain_word_list($orig_word, $replacement_word);
  1151.  
  1152.         $sql = "SELECT t.*, u.username, u.user_id, p.post_time
  1153.             FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p
  1154.             WHERE t.forum_id = $forum_id
  1155.                 AND t.topic_poster = u.user_id
  1156.                 AND p.post_id = t.topic_last_post_id
  1157.             ORDER BY t.topic_type DESC, p.post_time DESC
  1158.             LIMIT $start, " . $board_config['topics_per_page'];
  1159.         if ( !($result = $db->sql_query($sql)) )
  1160.         {
  1161.                message_die(GENERAL_ERROR, 'Could not obtain topic information', '', __LINE__, __FILE__, $sql);
  1162.         }
  1163.  
  1164.         while ( $row = $db->sql_fetchrow($result) )
  1165.         {
  1166.             $topic_title = '';
  1167.  
  1168.             if ( $row['topic_status'] == TOPIC_LOCKED )
  1169.             {
  1170.                 $folder_img = $images['folder_locked'];
  1171.                 $folder_alt = $lang['Topic_locked'];
  1172.             }
  1173.             else
  1174.             {
  1175.                 if ( $row['topic_type'] == POST_ANNOUNCE )
  1176.                 {
  1177.                     $folder_img = $images['folder_announce'];
  1178.                     $folder_alt = $lang['Topic_Announcement'];
  1179.                 }
  1180.                 else if ( $row['topic_type'] == POST_STICKY )
  1181.                 {
  1182.                     $folder_img = $images['folder_sticky'];
  1183.                     $folder_alt = $lang['Topic_Sticky'];
  1184.                 }
  1185.                 else 
  1186.                 {
  1187.                     $folder_img = $images['folder'];
  1188.                     $folder_alt = $lang['No_new_posts'];
  1189.                 }
  1190.             }
  1191.  
  1192.             $topic_id = $row['topic_id'];
  1193.             $topic_type = $row['topic_type'];
  1194.             $topic_status = $row['topic_status'];
  1195.             
  1196.             if ( $topic_type == POST_ANNOUNCE )
  1197.             {
  1198.                 $topic_type = $lang['Topic_Announcement'] . ' ';
  1199.             }
  1200.             else if ( $topic_type == POST_STICKY )
  1201.             {
  1202.                 $topic_type = $lang['Topic_Sticky'] . ' ';
  1203.             }
  1204.             else if ( $topic_status == TOPIC_MOVED )
  1205.             {
  1206.                 $topic_type = $lang['Topic_Moved'] . ' ';
  1207.             }
  1208.             else
  1209.             {
  1210.                 $topic_type = '';        
  1211.             }
  1212.     
  1213.             if ( $row['topic_vote'] )
  1214.             {
  1215.                 $topic_type .= $lang['Topic_Poll'] . ' ';
  1216.             }
  1217.     
  1218.             $topic_title = $row['topic_title'];
  1219.             if ( count($orig_word) )
  1220.             {
  1221.                 $topic_title = preg_replace($orig_word, $replacement_word, $topic_title);
  1222.             }
  1223.  
  1224.             $u_view_topic = "modcp.$phpEx?mode=split&" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
  1225.             $topic_replies = $row['topic_replies'];
  1226.  
  1227.             $last_post_time = create_date($board_config['default_dateformat'], $row['post_time'], $board_config['board_timezone']);
  1228.  
  1229.             $template->assign_block_vars('topicrow', array(
  1230.                 'U_VIEW_TOPIC' => $u_view_topic,
  1231.  
  1232.                 'TOPIC_FOLDER_IMG' => $folder_img, 
  1233.                 'TOPIC_TYPE' => $topic_type, 
  1234.                 'TOPIC_TITLE' => $topic_title,
  1235.                 'REPLIES' => $topic_replies,
  1236.                 'LAST_POST_TIME' => $last_post_time,
  1237.                 'TOPIC_ID' => $topic_id,
  1238.                     
  1239.                 'L_TOPIC_FOLDER_ALT' => $folder_alt)
  1240.             );
  1241.         }
  1242.  
  1243.         $template->assign_vars(array(
  1244.             'PAGINATION' => generate_pagination("modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'], $forum_topics, $board_config['topics_per_page'], $start),
  1245.             'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $forum_topics / $board_config['topics_per_page'] )), 
  1246.             'L_GOTO_PAGE' => $lang['Goto_page'])
  1247.         );
  1248.  
  1249.         $template->pparse('body');
  1250.  
  1251.         break;
  1252. }
  1253.  
  1254. include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  1255.  
  1256. ?>