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