443
by dcoles
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0 |
1 |
<?php
|
2 |
/**
|
|
3 |
*
|
|
4 |
* @package mcp
|
|
5 |
* @version $Id: mcp_post.php,v 1.62 2007/10/05 14:36:33 acydburn Exp $
|
|
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
|
|
419 |
if ($post_info['post_postcount']) |
|
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 |
?>
|