| 1 | <?php
|
|---|
| 2 | /**
|
|---|
| 3 | *
|
|---|
| 4 | * @package mcp
|
|---|
| 5 | * @version $Id: mcp_post.php 8805 2008-09-02 06:36:24Z acydburn $
|
|---|
| 6 | * @copyright (c) 2005 phpBB Group
|
|---|
| 7 | * @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
|---|
| 8 | *
|
|---|
| 9 | */
|
|---|
| 10 |
|
|---|
| 11 | /**
|
|---|
| 12 | * @ignore
|
|---|
| 13 | */
|
|---|
| 14 | if (!defined('IN_PHPBB'))
|
|---|
| 15 | {
|
|---|
| 16 | exit;
|
|---|
| 17 | }
|
|---|
| 18 |
|
|---|
| 19 | /**
|
|---|
| 20 | * Handling actions in post details screen
|
|---|
| 21 | */
|
|---|
| 22 | function mcp_post_details($id, $mode, $action)
|
|---|
| 23 | {
|
|---|
| 24 | global $phpEx, $phpbb_root_path, $config;
|
|---|
| 25 | global $template, $db, $user, $auth, $cache;
|
|---|
| 26 |
|
|---|
| 27 | $user->add_lang('posting');
|
|---|
| 28 |
|
|---|
| 29 | $post_id = request_var('p', 0);
|
|---|
| 30 | $start = request_var('start', 0);
|
|---|
| 31 |
|
|---|
| 32 | // Get post data
|
|---|
| 33 | $post_info = get_post_data(array($post_id), false, true);
|
|---|
| 34 |
|
|---|
| 35 | add_form_key('mcp_post_details');
|
|---|
| 36 |
|
|---|
| 37 | if (!sizeof($post_info))
|
|---|
| 38 | {
|
|---|
| 39 | trigger_error('POST_NOT_EXIST');
|
|---|
| 40 | }
|
|---|
| 41 |
|
|---|
| 42 | $post_info = $post_info[$post_id];
|
|---|
| 43 | $url = append_sid("{$phpbb_root_path}mcp.$phpEx?" . extra_url());
|
|---|
| 44 |
|
|---|
| 45 | switch ($action)
|
|---|
| 46 | {
|
|---|
| 47 | case 'whois':
|
|---|
| 48 |
|
|---|
| 49 | if ($auth->acl_get('m_info', $post_info['forum_id']))
|
|---|
| 50 | {
|
|---|
| 51 | $ip = request_var('ip', '');
|
|---|
| 52 | include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
|---|
| 53 |
|
|---|
| 54 | $template->assign_vars(array(
|
|---|
| 55 | 'RETURN_POST' => sprintf($user->lang['RETURN_POST'], '<a href="' . append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&mode=$mode&p=$post_id") . '">', '</a>'),
|
|---|
| 56 | 'U_RETURN_POST' => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&mode=$mode&p=$post_id"),
|
|---|
| 57 | 'L_RETURN_POST' => sprintf($user->lang['RETURN_POST'], '', ''),
|
|---|
| 58 | 'WHOIS' => user_ipwhois($ip),
|
|---|
| 59 | ));
|
|---|
| 60 | }
|
|---|
| 61 |
|
|---|
| 62 | // We're done with the whois page so return
|
|---|
| 63 | return;
|
|---|
| 64 |
|
|---|
| 65 | break;
|
|---|
| 66 |
|
|---|
| 67 | case 'chgposter':
|
|---|
| 68 | case 'chgposter_ip':
|
|---|
| 69 |
|
|---|
| 70 | if ($action == 'chgposter')
|
|---|
| 71 | {
|
|---|
| 72 | $username = request_var('username', '', true);
|
|---|
| 73 | $sql_where = "username_clean = '" . $db->sql_escape(utf8_clean_string($username)) . "'";
|
|---|
| 74 | }
|
|---|
| 75 | else
|
|---|
| 76 | {
|
|---|
| 77 | $new_user_id = request_var('u', 0);
|
|---|
| 78 | $sql_where = 'user_id = ' . $new_user_id;
|
|---|
| 79 | }
|
|---|
| 80 |
|
|---|
| 81 | $sql = 'SELECT *
|
|---|
| 82 | FROM ' . USERS_TABLE . '
|
|---|
| 83 | WHERE ' . $sql_where;
|
|---|
| 84 | $result = $db->sql_query($sql);
|
|---|
| 85 | $row = $db->sql_fetchrow($result);
|
|---|
| 86 | $db->sql_freeresult($result);
|
|---|
| 87 |
|
|---|
| 88 | if (!$row)
|
|---|
| 89 | {
|
|---|
| 90 | trigger_error('NO_USER');
|
|---|
| 91 | }
|
|---|
| 92 |
|
|---|
| 93 | if ($auth->acl_get('m_chgposter', $post_info['forum_id']))
|
|---|
| 94 | {
|
|---|
| 95 | if (check_form_key('mcp_post_details'))
|
|---|
| 96 | {
|
|---|
| 97 | change_poster($post_info, $row);
|
|---|
| 98 | }
|
|---|
| 99 | else
|
|---|
| 100 | {
|
|---|
| 101 | trigger_error('FORM_INVALID');
|
|---|
| 102 | }
|
|---|
| 103 | }
|
|---|
| 104 |
|
|---|
| 105 | break;
|
|---|
| 106 | }
|
|---|
| 107 |
|
|---|
| 108 | // Set some vars
|
|---|
| 109 | $users_ary = $usernames_ary = array();
|
|---|
| 110 | $attachments = $extensions = array();
|
|---|
| 111 | $post_id = $post_info['post_id'];
|
|---|
| 112 | $topic_tracking_info = array();
|
|---|
| 113 |
|
|---|
| 114 | // Get topic tracking info
|
|---|
| 115 | if ($config['load_db_lastread'])
|
|---|
| 116 | {
|
|---|
| 117 | $tmp_topic_data = array($post_info['topic_id'] => $post_info);
|
|---|
| 118 | $topic_tracking_info = get_topic_tracking($post_info['forum_id'], $post_info['topic_id'], $tmp_topic_data, array($post_info['forum_id'] => $post_info['forum_mark_time']));
|
|---|
| 119 | unset($tmp_topic_data);
|
|---|
| 120 | }
|
|---|
| 121 | else
|
|---|
| 122 | {
|
|---|
| 123 | $topic_tracking_info = get_complete_topic_tracking($post_info['forum_id'], $post_info['topic_id']);
|
|---|
| 124 | }
|
|---|
| 125 |
|
|---|
| 126 | $post_unread = (isset($topic_tracking_info[$post_info['topic_id']]) && $post_info['post_time'] > $topic_tracking_info[$post_info['topic_id']]) ? true : false;
|
|---|
| 127 |
|
|---|
| 128 | // Process message, leave it uncensored
|
|---|
| 129 | $message = $post_info['post_text'];
|
|---|
| 130 |
|
|---|
| 131 | if ($post_info['bbcode_bitfield'])
|
|---|
| 132 | {
|
|---|
| 133 | include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
|
|---|
| 134 | $bbcode = new bbcode($post_info['bbcode_bitfield']);
|
|---|
| 135 | $bbcode->bbcode_second_pass($message, $post_info['bbcode_uid'], $post_info['bbcode_bitfield']);
|
|---|
| 136 | }
|
|---|
| 137 |
|
|---|
| 138 | $message = bbcode_nl2br($message);
|
|---|
| 139 | $message = smiley_text($message);
|
|---|
| 140 |
|
|---|
| 141 | if ($post_info['post_attachment'] && $auth->acl_get('u_download') && $auth->acl_get('f_download', $post_info['forum_id']))
|
|---|
| 142 | {
|
|---|
| 143 | $extensions = $cache->obtain_attach_extensions($post_info['forum_id']);
|
|---|
| 144 |
|
|---|
| 145 | $sql = 'SELECT *
|
|---|
| 146 | FROM ' . ATTACHMENTS_TABLE . '
|
|---|
| 147 | WHERE post_msg_id = ' . $post_id . '
|
|---|
| 148 | AND in_message = 0
|
|---|
| 149 | ORDER BY filetime DESC, post_msg_id ASC';
|
|---|
| 150 | $result = $db->sql_query($sql);
|
|---|
| 151 |
|
|---|
| 152 | while ($row = $db->sql_fetchrow($result))
|
|---|
| 153 | {
|
|---|
| 154 | $attachments[] = $row;
|
|---|
| 155 | }
|
|---|
| 156 | $db->sql_freeresult($result);
|
|---|
| 157 |
|
|---|
| 158 | if (sizeof($attachments))
|
|---|
| 159 | {
|
|---|
| 160 | $update_count = array();
|
|---|
| 161 | parse_attachments($post_info['forum_id'], $message, $attachments, $update_count);
|
|---|
| 162 | }
|
|---|
| 163 |
|
|---|
| 164 | // Display not already displayed Attachments for this post, we already parsed them. ;)
|
|---|
| 165 | if (!empty($attachments))
|
|---|
| 166 | {
|
|---|
| 167 | $template->assign_var('S_HAS_ATTACHMENTS', true);
|
|---|
| 168 |
|
|---|
| 169 | foreach ($attachments as $attachment)
|
|---|
| 170 | {
|
|---|
| 171 | $template->assign_block_vars('attachment', array(
|
|---|
| 172 | 'DISPLAY_ATTACHMENT' => $attachment)
|
|---|
| 173 | );
|
|---|
| 174 | }
|
|---|
| 175 | }
|
|---|
| 176 | }
|
|---|
| 177 |
|
|---|
| 178 | $template->assign_vars(array(
|
|---|
| 179 | 'U_MCP_ACTION' => "$url&i=main&quickmod=1", // Use this for mode paramaters
|
|---|
| 180 | 'U_POST_ACTION' => "$url&i=$id&mode=post_details", // Use this for action parameters
|
|---|
| 181 | 'U_APPROVE_ACTION' => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=queue&p=$post_id&f={$post_info['forum_id']}"),
|
|---|
| 182 |
|
|---|
| 183 | 'S_CAN_VIEWIP' => $auth->acl_get('m_info', $post_info['forum_id']),
|
|---|
| 184 | 'S_CAN_CHGPOSTER' => $auth->acl_get('m_chgposter', $post_info['forum_id']),
|
|---|
| 185 | 'S_CAN_LOCK_POST' => $auth->acl_get('m_lock', $post_info['forum_id']),
|
|---|
| 186 | 'S_CAN_DELETE_POST' => $auth->acl_get('m_delete', $post_info['forum_id']),
|
|---|
| 187 |
|
|---|
| 188 | 'S_POST_REPORTED' => ($post_info['post_reported']) ? true : false,
|
|---|
| 189 | 'S_POST_UNAPPROVED' => (!$post_info['post_approved']) ? true : false,
|
|---|
| 190 | 'S_POST_LOCKED' => ($post_info['post_edit_locked']) ? true : false,
|
|---|
| 191 | 'S_USER_NOTES' => true,
|
|---|
| 192 | 'S_CLEAR_ALLOWED' => ($auth->acl_get('a_clearlogs')) ? true : false,
|
|---|
| 193 |
|
|---|
| 194 | 'U_EDIT' => ($auth->acl_get('m_edit', $post_info['forum_id'])) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=edit&f={$post_info['forum_id']}&p={$post_info['post_id']}") : '',
|
|---|
| 195 | 'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=mcp_chgposter&field=username&select_single=true'),
|
|---|
| 196 | 'U_MCP_APPROVE' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&mode=approve_details&f=' . $post_info['forum_id'] . '&p=' . $post_id),
|
|---|
| 197 | 'U_MCP_REPORT' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=reports&mode=report_details&f=' . $post_info['forum_id'] . '&p=' . $post_id),
|
|---|
| 198 | 'U_MCP_USER_NOTES' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&mode=user_notes&u=' . $post_info['user_id']),
|
|---|
| 199 | 'U_MCP_WARN_USER' => ($auth->acl_get('m_warn')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&mode=warn_user&u=' . $post_info['user_id']) : '',
|
|---|
| 200 | 'U_VIEW_POST' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $post_info['forum_id'] . '&p=' . $post_info['post_id'] . '#p' . $post_info['post_id']),
|
|---|
| 201 | 'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $post_info['forum_id'] . '&t=' . $post_info['topic_id']),
|
|---|
| 202 |
|
|---|
| 203 | 'MINI_POST_IMG' => ($post_unread) ? $user->img('icon_post_target_unread', 'NEW_POST') : $user->img('icon_post_target', 'POST'),
|
|---|
| 204 |
|
|---|
| 205 | 'RETURN_TOPIC' => sprintf($user->lang['RETURN_TOPIC'], '<a href="' . append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f={$post_info['forum_id']}&p=$post_id") . "#p$post_id\">", '</a>'),
|
|---|
| 206 | 'RETURN_FORUM' => sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", "f={$post_info['forum_id']}&start={$start}") . '">', '</a>'),
|
|---|
| 207 | 'REPORTED_IMG' => $user->img('icon_topic_reported', $user->lang['POST_REPORTED']),
|
|---|
| 208 | 'UNAPPROVED_IMG' => $user->img('icon_topic_unapproved', $user->lang['POST_UNAPPROVED']),
|
|---|
| 209 | 'EDIT_IMG' => $user->img('icon_post_edit', $user->lang['EDIT_POST']),
|
|---|
| 210 | 'SEARCH_IMG' => $user->img('icon_user_search', $user->lang['SEARCH']),
|
|---|
| 211 |
|
|---|
| 212 | 'POST_AUTHOR_FULL' => get_username_string('full', $post_info['user_id'], $post_info['username'], $post_info['user_colour'], $post_info['post_username']),
|
|---|
| 213 | 'POST_AUTHOR_COLOUR' => get_username_string('colour', $post_info['user_id'], $post_info['username'], $post_info['user_colour'], $post_info['post_username']),
|
|---|
| 214 | 'POST_AUTHOR' => get_username_string('username', $post_info['user_id'], $post_info['username'], $post_info['user_colour'], $post_info['post_username']),
|
|---|
| 215 | 'U_POST_AUTHOR' => get_username_string('profile', $post_info['user_id'], $post_info['username'], $post_info['user_colour'], $post_info['post_username']),
|
|---|
| 216 |
|
|---|
| 217 | 'POST_PREVIEW' => $message,
|
|---|
| 218 | 'POST_SUBJECT' => $post_info['post_subject'],
|
|---|
| 219 | 'POST_DATE' => $user->format_date($post_info['post_time']),
|
|---|
| 220 | 'POST_IP' => $post_info['poster_ip'],
|
|---|
| 221 | 'POST_IPADDR' => ($auth->acl_get('m_info', $post_info['forum_id']) && request_var('lookup', '')) ? @gethostbyaddr($post_info['poster_ip']) : '',
|
|---|
| 222 | 'POST_ID' => $post_info['post_id'],
|
|---|
| 223 |
|
|---|
| 224 | 'U_LOOKUP_IP' => ($auth->acl_get('m_info', $post_info['forum_id'])) ? "$url&i=$id&mode=$mode&lookup={$post_info['poster_ip']}#ip" : '',
|
|---|
| 225 | 'U_WHOIS' => ($auth->acl_get('m_info', $post_info['forum_id'])) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&mode=$mode&action=whois&p=$post_id&ip={$post_info['poster_ip']}") : '',
|
|---|
| 226 | ));
|
|---|
| 227 |
|
|---|
| 228 | // Get User Notes
|
|---|
| 229 | $log_data = array();
|
|---|
| 230 | $log_count = 0;
|
|---|
| 231 | view_log('user', $log_data, $log_count, $config['posts_per_page'], 0, 0, 0, $post_info['user_id']);
|
|---|
| 232 |
|
|---|
| 233 | if ($log_count)
|
|---|
| 234 | {
|
|---|
| 235 | $template->assign_var('S_USER_NOTES', true);
|
|---|
| 236 |
|
|---|
| 237 | foreach ($log_data as $row)
|
|---|
| 238 | {
|
|---|
| 239 | $template->assign_block_vars('usernotes', array(
|
|---|
| 240 | 'REPORT_BY' => $row['username_full'],
|
|---|
| 241 | 'REPORT_AT' => $user->format_date($row['time']),
|
|---|
| 242 | 'ACTION' => $row['action'],
|
|---|
| 243 | 'ID' => $row['id'])
|
|---|
| 244 | );
|
|---|
| 245 | }
|
|---|
| 246 | }
|
|---|
| 247 |
|
|---|
| 248 | // Get Reports
|
|---|
| 249 | if ($auth->acl_get('m_', $post_info['forum_id']))
|
|---|
| 250 | {
|
|---|
| 251 | $sql = 'SELECT r.*, re.*, u.user_id, u.username
|
|---|
| 252 | FROM ' . REPORTS_TABLE . ' r, ' . USERS_TABLE . ' u, ' . REPORTS_REASONS_TABLE . " re
|
|---|
| 253 | WHERE r.post_id = $post_id
|
|---|
| 254 | AND r.reason_id = re.reason_id
|
|---|
| 255 | AND u.user_id = r.user_id
|
|---|
| 256 | ORDER BY r.report_time DESC";
|
|---|
| 257 | $result = $db->sql_query($sql);
|
|---|
| 258 |
|
|---|
| 259 | if ($row = $db->sql_fetchrow($result))
|
|---|
| 260 | {
|
|---|
| 261 | $template->assign_var('S_SHOW_REPORTS', true);
|
|---|
| 262 |
|
|---|
| 263 | do
|
|---|
| 264 | {
|
|---|
| 265 | // If the reason is defined within the language file, we will use the localized version, else just use the database entry...
|
|---|
| 266 | if (isset($user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])]))
|
|---|
| 267 | {
|
|---|
| 268 | $row['reson_description'] = $user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])];
|
|---|
| 269 | $row['reason_title'] = $user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])];
|
|---|
| 270 | }
|
|---|
| 271 |
|
|---|
| 272 | $template->assign_block_vars('reports', array(
|
|---|
| 273 | 'REPORT_ID' => $row['report_id'],
|
|---|
| 274 | 'REASON_TITLE' => $row['reason_title'],
|
|---|
| 275 | 'REASON_DESC' => $row['reason_description'],
|
|---|
| 276 | 'REPORTER' => ($row['user_id'] != ANONYMOUS) ? $row['username'] : $user->lang['GUEST'],
|
|---|
| 277 | 'U_REPORTER' => ($row['user_id'] != ANONYMOUS) ? append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $row['user_id']) : '',
|
|---|
| 278 | 'USER_NOTIFY' => ($row['user_notify']) ? true : false,
|
|---|
| 279 | 'REPORT_TIME' => $user->format_date($row['report_time']),
|
|---|
| 280 | 'REPORT_TEXT' => bbcode_nl2br(trim($row['report_text'])),
|
|---|
| 281 | ));
|
|---|
| 282 | }
|
|---|
| 283 | while ($row = $db->sql_fetchrow($result));
|
|---|
| 284 | }
|
|---|
| 285 | $db->sql_freeresult($result);
|
|---|
| 286 | }
|
|---|
| 287 |
|
|---|
| 288 | // Get IP
|
|---|
| 289 | if ($auth->acl_get('m_info', $post_info['forum_id']))
|
|---|
| 290 | {
|
|---|
| 291 | $rdns_ip_num = request_var('rdns', '');
|
|---|
| 292 |
|
|---|
| 293 | if ($rdns_ip_num != 'all')
|
|---|
| 294 | {
|
|---|
| 295 | $template->assign_vars(array(
|
|---|
| 296 | 'U_LOOKUP_ALL' => "$url&i=main&mode=post_details&rdns=all")
|
|---|
| 297 | );
|
|---|
| 298 | }
|
|---|
| 299 |
|
|---|
| 300 | // Get other users who've posted under this IP
|
|---|
| 301 | $sql = 'SELECT poster_id, COUNT(poster_id) as postings
|
|---|
| 302 | FROM ' . POSTS_TABLE . "
|
|---|
| 303 | WHERE poster_ip = '" . $db->sql_escape($post_info['poster_ip']) . "'
|
|---|
| 304 | GROUP BY poster_id
|
|---|
| 305 | ORDER BY postings DESC";
|
|---|
| 306 | $result = $db->sql_query($sql);
|
|---|
| 307 |
|
|---|
| 308 | while ($row = $db->sql_fetchrow($result))
|
|---|
| 309 | {
|
|---|
| 310 | // Fill the user select list with users who have posted under this IP
|
|---|
| 311 | if ($row['poster_id'] != $post_info['poster_id'])
|
|---|
| 312 | {
|
|---|
| 313 | $users_ary[$row['poster_id']] = $row;
|
|---|
| 314 | }
|
|---|
| 315 | }
|
|---|
| 316 | $db->sql_freeresult($result);
|
|---|
| 317 |
|
|---|
| 318 | if (sizeof($users_ary))
|
|---|
| 319 | {
|
|---|
| 320 | // Get the usernames
|
|---|
| 321 | $sql = 'SELECT user_id, username
|
|---|
| 322 | FROM ' . USERS_TABLE . '
|
|---|
| 323 | WHERE ' . $db->sql_in_set('user_id', array_keys($users_ary));
|
|---|
| 324 | $result = $db->sql_query($sql);
|
|---|
| 325 |
|
|---|
| 326 | while ($row = $db->sql_fetchrow($result))
|
|---|
| 327 | {
|
|---|
| 328 | $users_ary[$row['user_id']]['username'] = $row['username'];
|
|---|
| 329 | $usernames_ary[utf8_clean_string($row['username'])] = $users_ary[$row['user_id']];
|
|---|
| 330 | }
|
|---|
| 331 | $db->sql_freeresult($result);
|
|---|
| 332 |
|
|---|
| 333 | foreach ($users_ary as $user_id => $user_row)
|
|---|
| 334 | {
|
|---|
| 335 | $template->assign_block_vars('userrow', array(
|
|---|
| 336 | 'USERNAME' => ($user_id == ANONYMOUS) ? $user->lang['GUEST'] : $user_row['username'],
|
|---|
| 337 | 'NUM_POSTS' => $user_row['postings'],
|
|---|
| 338 | 'L_POST_S' => ($user_row['postings'] == 1) ? $user->lang['POST'] : $user->lang['POSTS'],
|
|---|
| 339 |
|
|---|
| 340 | 'U_PROFILE' => ($user_id == ANONYMOUS) ? '' : append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&u=' . $user_id),
|
|---|
| 341 | 'U_SEARCHPOSTS' => append_sid("{$phpbb_root_path}search.$phpEx", 'author_id=' . $user_id . '&sr=topics'))
|
|---|
| 342 | );
|
|---|
| 343 | }
|
|---|
| 344 | }
|
|---|
| 345 |
|
|---|
| 346 | // Get other IP's this user has posted under
|
|---|
| 347 |
|
|---|
| 348 | // A compound index on poster_id, poster_ip (posts table) would help speed up this query a lot,
|
|---|
| 349 | // but the extra size is only valuable if there are persons having more than a thousands posts.
|
|---|
| 350 | // This is better left to the really really big forums.
|
|---|
| 351 |
|
|---|
| 352 | $sql = 'SELECT poster_ip, COUNT(poster_ip) AS postings
|
|---|
| 353 | FROM ' . POSTS_TABLE . '
|
|---|
| 354 | WHERE poster_id = ' . $post_info['poster_id'] . "
|
|---|
| 355 | GROUP BY poster_ip
|
|---|
| 356 | ORDER BY postings DESC";
|
|---|
| 357 | $result = $db->sql_query($sql);
|
|---|
| 358 |
|
|---|
| 359 | while ($row = $db->sql_fetchrow($result))
|
|---|
| 360 | {
|
|---|
| 361 | $hostname = (($rdns_ip_num == $row['poster_ip'] || $rdns_ip_num == 'all') && $row['poster_ip']) ? @gethostbyaddr($row['poster_ip']) : '';
|
|---|
| 362 |
|
|---|
| 363 | $template->assign_block_vars('iprow', array(
|
|---|
| 364 | 'IP' => $row['poster_ip'],
|
|---|
| 365 | 'HOSTNAME' => $hostname,
|
|---|
| 366 | 'NUM_POSTS' => $row['postings'],
|
|---|
| 367 | 'L_POST_S' => ($row['postings'] == 1) ? $user->lang['POST'] : $user->lang['POSTS'],
|
|---|
| 368 |
|
|---|
| 369 | 'U_LOOKUP_IP' => ($rdns_ip_num == $row['poster_ip'] || $rdns_ip_num == 'all') ? '' : "$url&i=$id&mode=post_details&rdns={$row['poster_ip']}#ip",
|
|---|
| 370 | 'U_WHOIS' => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&mode=$mode&action=whois&p=$post_id&ip={$row['poster_ip']}"))
|
|---|
| 371 | );
|
|---|
| 372 | }
|
|---|
| 373 | $db->sql_freeresult($result);
|
|---|
| 374 |
|
|---|
| 375 | $user_select = '';
|
|---|
| 376 |
|
|---|
| 377 | if (sizeof($usernames_ary))
|
|---|
| 378 | {
|
|---|
| 379 | ksort($usernames_ary);
|
|---|
| 380 |
|
|---|
| 381 | foreach ($usernames_ary as $row)
|
|---|
| 382 | {
|
|---|
| 383 | $user_select .= '<option value="' . $row['poster_id'] . '">' . $row['username'] . "</option>\n";
|
|---|
| 384 | }
|
|---|
| 385 | }
|
|---|
| 386 |
|
|---|
| 387 | $template->assign_var('S_USER_SELECT', $user_select);
|
|---|
| 388 | }
|
|---|
| 389 |
|
|---|
| 390 | }
|
|---|
| 391 |
|
|---|
| 392 | /**
|
|---|
| 393 | * Change a post's poster
|
|---|
| 394 | */
|
|---|
| 395 | function change_poster(&$post_info, $userdata)
|
|---|
| 396 | {
|
|---|
| 397 | global $auth, $db, $config, $phpbb_root_path, $phpEx;
|
|---|
| 398 |
|
|---|
| 399 | if (empty($userdata) || $userdata['user_id'] == $post_info['user_id'])
|
|---|
| 400 | {
|
|---|
| 401 | return;
|
|---|
| 402 | }
|
|---|
| 403 |
|
|---|
| 404 | $post_id = $post_info['post_id'];
|
|---|
| 405 |
|
|---|
| 406 | $sql = 'UPDATE ' . POSTS_TABLE . "
|
|---|
| 407 | SET poster_id = {$userdata['user_id']}
|
|---|
| 408 | WHERE post_id = $post_id";
|
|---|
| 409 | $db->sql_query($sql);
|
|---|
| 410 |
|
|---|
| 411 | // Resync topic/forum if needed
|
|---|
| 412 | if ($post_info['topic_last_post_id'] == $post_id || $post_info['forum_last_post_id'] == $post_id || $post_info['topic_first_post_id'] == $post_id)
|
|---|
| 413 | {
|
|---|
| 414 | sync('topic', 'topic_id', $post_info['topic_id'], false, false);
|
|---|
| 415 | sync('forum', 'forum_id', $post_info['forum_id'], false, false);
|
|---|
| 416 | }
|
|---|
| 417 |
|
|---|
| 418 | // Adjust post counts... only if the post is approved (else, it was not added the users post count anyway)
|
|---|
| 419 | if ($post_info['post_postcount'] && $post_info['post_approved'])
|
|---|
| 420 | {
|
|---|
| 421 | $sql = 'UPDATE ' . USERS_TABLE . '
|
|---|
| 422 | SET user_posts = user_posts - 1
|
|---|
| 423 | WHERE user_id = ' . $post_info['user_id'] .'
|
|---|
| 424 | AND user_posts > 0';
|
|---|
| 425 | $db->sql_query($sql);
|
|---|
| 426 |
|
|---|
| 427 | $sql = 'UPDATE ' . USERS_TABLE . '
|
|---|
| 428 | SET user_posts = user_posts + 1
|
|---|
| 429 | WHERE user_id = ' . $userdata['user_id'];
|
|---|
| 430 | $db->sql_query($sql);
|
|---|
| 431 | }
|
|---|
| 432 |
|
|---|
| 433 | // Add posted to information for this topic for the new user
|
|---|
| 434 | markread('post', $post_info['forum_id'], $post_info['topic_id'], time(), $userdata['user_id']);
|
|---|
| 435 |
|
|---|
| 436 | // Remove the dotted topic option if the old user has no more posts within this topic
|
|---|
| 437 | if ($config['load_db_track'] && $post_info['user_id'] != ANONYMOUS)
|
|---|
| 438 | {
|
|---|
| 439 | $sql = 'SELECT topic_id
|
|---|
| 440 | FROM ' . POSTS_TABLE . '
|
|---|
| 441 | WHERE topic_id = ' . $post_info['topic_id'] . '
|
|---|
| 442 | AND poster_id = ' . $post_info['user_id'];
|
|---|
| 443 | $result = $db->sql_query_limit($sql, 1);
|
|---|
| 444 | $topic_id = (int) $db->sql_fetchfield('topic_id');
|
|---|
| 445 | $db->sql_freeresult($result);
|
|---|
| 446 |
|
|---|
| 447 | if (!$topic_id)
|
|---|
| 448 | {
|
|---|
| 449 | $sql = 'DELETE FROM ' . TOPICS_POSTED_TABLE . '
|
|---|
| 450 | WHERE user_id = ' . $post_info['user_id'] . '
|
|---|
| 451 | AND topic_id = ' . $post_info['topic_id'];
|
|---|
| 452 | $db->sql_query($sql);
|
|---|
| 453 | }
|
|---|
| 454 | }
|
|---|
| 455 |
|
|---|
| 456 | // change the poster_id within the attachments table, else the data becomes out of sync and errors displayed because of wrong ownership
|
|---|
| 457 | if ($post_info['post_attachment'])
|
|---|
| 458 | {
|
|---|
| 459 | $sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
|
|---|
| 460 | SET poster_id = ' . $userdata['user_id'] . '
|
|---|
| 461 | WHERE poster_id = ' . $post_info['user_id'] . '
|
|---|
| 462 | AND post_msg_id = ' . $post_info['post_id'] . '
|
|---|
| 463 | AND topic_id = ' . $post_info['topic_id'];
|
|---|
| 464 | $db->sql_query($sql);
|
|---|
| 465 | }
|
|---|
| 466 |
|
|---|
| 467 | // refresh search cache of this post
|
|---|
| 468 | $search_type = basename($config['search_type']);
|
|---|
| 469 |
|
|---|
| 470 | if (file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx))
|
|---|
| 471 | {
|
|---|
| 472 | require("{$phpbb_root_path}includes/search/$search_type.$phpEx");
|
|---|
| 473 |
|
|---|
| 474 | // We do some additional checks in the module to ensure it can actually be utilised
|
|---|
| 475 | $error = false;
|
|---|
| 476 | $search = new $search_type($error);
|
|---|
| 477 |
|
|---|
| 478 | if (!$error && method_exists($search, 'destroy_cache'))
|
|---|
| 479 | {
|
|---|
| 480 | $search->destroy_cache(array(), array($post_info['user_id'], $userdata['user_id']));
|
|---|
| 481 | }
|
|---|
| 482 | }
|
|---|
| 483 |
|
|---|
| 484 | $from_username = $post_info['username'];
|
|---|
| 485 | $to_username = $userdata['username'];
|
|---|
| 486 |
|
|---|
| 487 | // Renew post info
|
|---|
| 488 | $post_info = get_post_data(array($post_id), false, true);
|
|---|
| 489 |
|
|---|
| 490 | if (!sizeof($post_info))
|
|---|
| 491 | {
|
|---|
| 492 | trigger_error('POST_NOT_EXIST');
|
|---|
| 493 | }
|
|---|
| 494 |
|
|---|
| 495 | $post_info = $post_info[$post_id];
|
|---|
| 496 |
|
|---|
| 497 | // Now add log entry
|
|---|
| 498 | add_log('mod', $post_info['forum_id'], $post_info['topic_id'], 'LOG_MCP_CHANGE_POSTER', $post_info['topic_title'], $from_username, $to_username);
|
|---|
| 499 | }
|
|---|
| 500 |
|
|---|
| 501 | ?>
|
|---|