1<?php
2/***************************************************************************
3 *                               privmsgs.php
4 *                            -------------------
5 *   begin                : Saturday, Jun 9, 2001
6 *   copyright            : (C) 2001 The phpBB Group
7 *   email                : support@phpbb.com
8 *
9 *   $Id: privmsg.php 8342 2008-01-29 11:05:17Z Kellanved $
10 *
11 *
12 ***************************************************************************/
13
14/***************************************************************************
15 *
16 *   This program is free software; you can redistribute it and/or modify
17 *   it under the terms of the GNU General Public License as published by
18 *   the Free Software Foundation; either version 2 of the License, or
19 *   (at your option) any later version.
20 *
21 ***************************************************************************/
22
23define('IN_PHPBB', true);
24$phpbb_root_path = './';
25include($phpbb_root_path . 'extension.inc');
26include($phpbb_root_path . 'common.'.$phpEx);
27include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
28include($phpbb_root_path . 'includes/functions_post.'.$phpEx);
29
30//
31// Is PM disabled?
32//
33if ( !empty($board_config['privmsg_disable']) )
34{
35	message_die(GENERAL_MESSAGE, 'PM_disabled');
36}
37
38$html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#', '#"#');
39$html_entities_replace = array('&amp;', '&lt;', '&gt;', '&quot;');
40
41//
42// Parameters
43//
44$submit = ( isset($HTTP_POST_VARS['post']) ) ? TRUE : 0;
45$submit_search = ( isset($HTTP_POST_VARS['usersubmit']) ) ? TRUE : 0;
46$submit_msgdays = ( isset($HTTP_POST_VARS['submit_msgdays']) ) ? TRUE : 0;
47$cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? TRUE : 0;
48$preview = ( isset($HTTP_POST_VARS['preview']) ) ? TRUE : 0;
49$confirm = ( isset($HTTP_POST_VARS['confirm']) ) ? TRUE : 0;
50$delete = ( isset($HTTP_POST_VARS['delete']) ) ? TRUE : 0;
51$delete_all = ( isset($HTTP_POST_VARS['deleteall']) ) ? TRUE : 0;
52$save = ( isset($HTTP_POST_VARS['save']) ) ? TRUE : 0;
53$sid = (isset($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : 0;
54
55$refresh = $preview || $submit_search;
56
57$mark_list = ( !empty($HTTP_POST_VARS['mark']) ) ? $HTTP_POST_VARS['mark'] : 0;
58
59if ( isset($HTTP_POST_VARS['folder']) || isset($HTTP_GET_VARS['folder']) )
60{
61	$folder = ( isset($HTTP_POST_VARS['folder']) ) ? $HTTP_POST_VARS['folder'] : $HTTP_GET_VARS['folder'];
62	$folder = htmlspecialchars($folder);
63
64	if ( $folder != 'inbox' && $folder != 'outbox' && $folder != 'sentbox' && $folder != 'savebox' )
65	{
66		$folder = 'inbox';
67	}
68}
69else
70{
71	$folder = 'inbox';
72}
73
74//
75// Start session management
76//
77$userdata = session_pagestart($user_ip, PAGE_PRIVMSGS);
78init_userprefs($userdata);
79//
80// End session management
81//
82
83//
84// Cancel
85//
86if ( $cancel )
87{
88	redirect(append_sid("privmsg.$phpEx?folder=$folder", true));
89}
90
91//
92// Var definitions
93//
94if ( !empty($HTTP_POST_VARS['mode']) || !empty($HTTP_GET_VARS['mode']) )
95{
96	$mode = ( !empty($HTTP_POST_VARS['mode']) ) ? $HTTP_POST_VARS['mode'] : $HTTP_GET_VARS['mode'];
97	$mode = htmlspecialchars($mode);
98}
99else
100{
101	$mode = '';
102}
103
104$start = ( !empty($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
105$start = ($start < 0) ? 0 : $start;
106
107if ( isset($HTTP_POST_VARS[POST_POST_URL]) || isset($HTTP_GET_VARS[POST_POST_URL]) )
108{
109	$privmsg_id = ( isset($HTTP_POST_VARS[POST_POST_URL]) ) ? intval($HTTP_POST_VARS[POST_POST_URL]) : intval($HTTP_GET_VARS[POST_POST_URL]);
110}
111else
112{
113	$privmsg_id = '';
114}
115
116$error = FALSE;
117
118//
119// Define the box image links
120//
121$inbox_img = ( $folder != 'inbox' || $mode != '' ) ? '<a href="' . append_sid("privmsg.$phpEx?folder=inbox") . '"><img src="' . $images['pm_inbox'] . '" border="0" alt="' . $lang['Inbox'] . '" /></a>' : '<img src="' . $images['pm_inbox'] . '" border="0" alt="' . $lang['Inbox'] . '" />';
122$inbox_url = ( $folder != 'inbox' || $mode != '' ) ? '<a href="' . append_sid("privmsg.$phpEx?folder=inbox") . '">' . $lang['Inbox'] . '</a>' : $lang['Inbox'];
123
124$outbox_img = ( $folder != 'outbox' || $mode != '' ) ? '<a href="' . append_sid("privmsg.$phpEx?folder=outbox") . '"><img src="' . $images['pm_outbox'] . '" border="0" alt="' . $lang['Outbox'] . '" /></a>' : '<img src="' . $images['pm_outbox'] . '" border="0" alt="' . $lang['Outbox'] . '" />';
125$outbox_url = ( $folder != 'outbox' || $mode != '' ) ? '<a href="' . append_sid("privmsg.$phpEx?folder=outbox") . '">' . $lang['Outbox'] . '</a>' : $lang['Outbox'];
126
127$sentbox_img = ( $folder != 'sentbox' || $mode != '' ) ? '<a href="' . append_sid("privmsg.$phpEx?folder=sentbox") . '"><img src="' . $images['pm_sentbox'] . '" border="0" alt="' . $lang['Sentbox'] . '" /></a>' : '<img src="' . $images['pm_sentbox'] . '" border="0" alt="' . $lang['Sentbox'] . '" />';
128$sentbox_url = ( $folder != 'sentbox' || $mode != '' ) ? '<a href="' . append_sid("privmsg.$phpEx?folder=sentbox") . '">' . $lang['Sentbox'] . '</a>' : $lang['Sentbox'];
129
130$savebox_img = ( $folder != 'savebox' || $mode != '' ) ? '<a href="' . append_sid("privmsg.$phpEx?folder=savebox") . '"><img src="' . $images['pm_savebox'] . '" border="0" alt="' . $lang['Savebox'] . '" /></a>' : '<img src="' . $images['pm_savebox'] . '" border="0" alt="' . $lang['Savebox'] . '" />';
131$savebox_url = ( $folder != 'savebox' || $mode != '' ) ? '<a href="' . append_sid("privmsg.$phpEx?folder=savebox") . '">' . $lang['Savebox'] . '</a>' : $lang['Savebox'];
132
133// ----------
134// Start main
135//
136if ( $mode == 'newpm' )
137{
138	$gen_simple_header = TRUE;
139
140	$page_title = $lang['Private_Messaging'];
141	include($phpbb_root_path . 'includes/page_header.'.$phpEx);
142
143	$template->set_filenames(array(
144		'body' => 'privmsgs_popup.tpl')
145	);
146
147	if ( $userdata['session_logged_in'] )
148	{
149		if ( $userdata['user_new_privmsg'] )
150		{
151			$l_new_message = ( $userdata['user_new_privmsg'] == 1 ) ? $lang['You_new_pm'] : $lang['You_new_pms'];
152		}
153		else
154		{
155			$l_new_message = $lang['You_no_new_pm'];
156		}
157
158		$l_new_message .= '<br /><br />' . sprintf($lang['Click_view_privmsg'], '<a href="' . append_sid("privmsg.".$phpEx."?folder=inbox") . '" onclick="jump_to_inbox();return false;" target="_new">', '</a>');
159	}
160	else
161	{
162		$l_new_message = $lang['Login_check_pm'];
163	}
164
165	$template->assign_vars(array(
166		'L_CLOSE_WINDOW' => $lang['Close_window'],
167		'L_MESSAGE' => $l_new_message)
168	);
169
170	$template->pparse('body');
171
172	include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
173
174}
175else if ( $mode == 'read' )
176{
177	if ( !empty($HTTP_GET_VARS[POST_POST_URL]) )
178	{
179		$privmsgs_id = intval($HTTP_GET_VARS[POST_POST_URL]);
180	}
181	else
182	{
183		message_die(GENERAL_ERROR, $lang['No_post_id']);
184	}
185
186	if ( !$userdata['session_logged_in'] )
187	{
188		redirect(append_sid("login.$phpEx?redirect=privmsg.$phpEx&folder=$folder&mode=$mode&" . POST_POST_URL . "=$privmsgs_id", true));
189	}
190
191	//
192	// SQL to pull appropriate message, prevents nosey people
193	// reading other peoples messages ... hopefully!
194	//
195	switch( $folder )
196	{
197		case 'inbox':
198			$l_box_name = $lang['Inbox'];
199			$pm_sql_user = "AND pm.privmsgs_to_userid = " . $userdata['user_id'] . "
200				AND ( pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . "
201					OR pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
202					OR pm.privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
203			break;
204		case 'outbox':
205			$l_box_name = $lang['Outbox'];
206			$pm_sql_user = "AND pm.privmsgs_from_userid =  " . $userdata['user_id'] . "
207				AND ( pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
208					OR pm.privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " ) ";
209			break;
210		case 'sentbox':
211			$l_box_name = $lang['Sentbox'];
212			$pm_sql_user = "AND pm.privmsgs_from_userid =  " . $userdata['user_id'] . "
213				AND pm.privmsgs_type = " . PRIVMSGS_SENT_MAIL;
214			break;
215		case 'savebox':
216			$l_box_name = $lang['Savebox'];
217			$pm_sql_user = "AND ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . "
218					AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
219				OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . "
220					AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " )
221				)";
222			break;
223		default:
224			message_die(GENERAL_ERROR, $lang['No_such_folder']);
225			break;
226	}
227
228	//
229	// Major query obtains the message ...
230	//
231	$sql = "SELECT u.username AS username_1, u.user_id AS user_id_1, u2.username AS username_2, u2.user_id AS user_id_2, u.user_sig_bbcode_uid, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_avatar, pm.*, pmt.privmsgs_bbcode_uid, pmt.privmsgs_text
232		FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS_TABLE . " u, " . USERS_TABLE . " u2
233		WHERE pm.privmsgs_id = $privmsgs_id
234			AND pmt.privmsgs_text_id = pm.privmsgs_id
235			$pm_sql_user
236			AND u.user_id = pm.privmsgs_from_userid
237			AND u2.user_id = pm.privmsgs_to_userid";
238	if ( !($result = $db->sql_query($sql)) )
239	{
240		message_die(GENERAL_ERROR, 'Could not query private message post information', '', __LINE__, __FILE__, $sql);
241	}
242
243	//
244	// Did the query return any data?
245	//
246	if ( !($privmsg = $db->sql_fetchrow($result)) )
247	{
248		redirect(append_sid("privmsg.$phpEx?folder=$folder", true));
249	}
250
251	$privmsg_id = $privmsg['privmsgs_id'];
252
253	//
254	// Is this a new message in the inbox? If it is then save
255	// a copy in the posters sent box
256	//
257	if (($privmsg['privmsgs_type'] == PRIVMSGS_NEW_MAIL || $privmsg['privmsgs_type'] == PRIVMSGS_UNREAD_MAIL) && $folder == 'inbox')
258	{
259		// Update appropriate counter
260		switch ($privmsg['privmsgs_type'])
261		{
262			case PRIVMSGS_NEW_MAIL:
263				$sql = "user_new_privmsg = user_new_privmsg - 1";
264				break;
265			case PRIVMSGS_UNREAD_MAIL:
266				$sql = "user_unread_privmsg = user_unread_privmsg - 1";
267				break;
268		}
269
270		$sql = "UPDATE " . USERS_TABLE . "
271			SET $sql
272			WHERE user_id = " . $userdata['user_id'];
273		if ( !$db->sql_query($sql) )
274		{
275			message_die(GENERAL_ERROR, 'Could not update private message read status for user', '', __LINE__, __FILE__, $sql);
276		}
277
278		$sql = "UPDATE " . PRIVMSGS_TABLE . "
279			SET privmsgs_type = " . PRIVMSGS_READ_MAIL . "
280			WHERE privmsgs_id = " . $privmsg['privmsgs_id'];
281		if ( !$db->sql_query($sql) )
282		{
283			message_die(GENERAL_ERROR, 'Could not update private message read status', '', __LINE__, __FILE__, $sql);
284		}
285
286		// Check to see if the poster has a 'full' sent box
287		$sql = "SELECT COUNT(privmsgs_id) AS sent_items, MIN(privmsgs_date) AS oldest_post_time
288			FROM " . PRIVMSGS_TABLE . "
289			WHERE privmsgs_type = " . PRIVMSGS_SENT_MAIL . "
290				AND privmsgs_from_userid = " . $privmsg['privmsgs_from_userid'];
291		if ( !($result = $db->sql_query($sql)) )
292		{
293			message_die(GENERAL_ERROR, 'Could not obtain sent message info for sendee', '', __LINE__, __FILE__, $sql);
294		}
295
296		$sql_priority = ( SQL_LAYER == 'mysql' ) ? 'LOW_PRIORITY' : '';
297
298		if ( $sent_info = $db->sql_fetchrow($result) )
299		{
300			if ($board_config['max_sentbox_privmsgs'] && $sent_info['sent_items'] >= $board_config['max_sentbox_privmsgs'])
301			{
302				$sql = "SELECT privmsgs_id FROM " . PRIVMSGS_TABLE . "
303					WHERE privmsgs_type = " . PRIVMSGS_SENT_MAIL . "
304						AND privmsgs_date = " . $sent_info['oldest_post_time'] . "
305						AND privmsgs_from_userid = " . $privmsg['privmsgs_from_userid'];
306				if ( !$result = $db->sql_query($sql) )
307				{
308					message_die(GENERAL_ERROR, 'Could not find oldest privmsgs', '', __LINE__, __FILE__, $sql);
309				}
310				$old_privmsgs_id = $db->sql_fetchrow($result);
311				$old_privmsgs_id = $old_privmsgs_id['privmsgs_id'];
312
313				$sql = "DELETE $sql_priority FROM " . PRIVMSGS_TABLE . "
314					WHERE privmsgs_id = $old_privmsgs_id";
315				if ( !$db->sql_query($sql) )
316				{
317					message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs (sent)', '', __LINE__, __FILE__, $sql);
318				}
319
320				$sql = "DELETE $sql_priority FROM " . PRIVMSGS_TEXT_TABLE . "
321					WHERE privmsgs_text_id = $old_privmsgs_id";
322				if ( !$db->sql_query($sql) )
323				{
324					message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs text (sent)', '', __LINE__, __FILE__, $sql);
325				}
326			}
327		}
328
329		//
330		// This makes a copy of the post and stores it as a SENT message from the sendee. Perhaps
331		// not the most DB friendly way but a lot easier to manage, besides the admin will be able to
332		// set limits on numbers of storable posts for users ... hopefully!
333		//
334		$sql = "INSERT $sql_priority INTO " . PRIVMSGS_TABLE . " (privmsgs_type, privmsgs_subject, privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip, privmsgs_enable_html, privmsgs_enable_bbcode, privmsgs_enable_smilies, privmsgs_attach_sig)
335			VALUES (" . PRIVMSGS_SENT_MAIL . ", '" . str_replace("\'", "''", addslashes($privmsg['privmsgs_subject'])) . "', " . $privmsg['privmsgs_from_userid'] . ", " . $privmsg['privmsgs_to_userid'] . ", " . $privmsg['privmsgs_date'] . ", '" . $privmsg['privmsgs_ip'] . "', " . $privmsg['privmsgs_enable_html'] . ", " . $privmsg['privmsgs_enable_bbcode'] . ", " . $privmsg['privmsgs_enable_smilies'] . ", " .  $privmsg['privmsgs_attach_sig'] . ")";
336		if ( !$db->sql_query($sql) )
337		{
338			message_die(GENERAL_ERROR, 'Could not insert private message sent info', '', __LINE__, __FILE__, $sql);
339		}
340
341		$privmsg_sent_id = $db->sql_nextid();
342
343		$sql = "INSERT $sql_priority INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text)
344			VALUES ($privmsg_sent_id, '" . $privmsg['privmsgs_bbcode_uid'] . "', '" . str_replace("\'", "''", addslashes($privmsg['privmsgs_text'])) . "')";
345		if ( !$db->sql_query($sql) )
346		{
347			message_die(GENERAL_ERROR, 'Could not insert private message sent text', '', __LINE__, __FILE__, $sql);
348		}
349	}
350
351	//
352	// Pick a folder, any folder, so long as it's one below ...
353	//
354	$post_urls = array(
355		'post' => append_sid("privmsg.$phpEx?mode=post"),
356		'reply' => append_sid("privmsg.$phpEx?mode=reply&amp;" . POST_POST_URL . "=$privmsg_id"),
357		'quote' => append_sid("privmsg.$phpEx?mode=quote&amp;" . POST_POST_URL . "=$privmsg_id"),
358		'edit' => append_sid("privmsg.$phpEx?mode=edit&amp;" . POST_POST_URL . "=$privmsg_id")
359	);
360	$post_icons = array(
361		'post_img' => '<a href="' . $post_urls['post'] . '"><img src="' . $images['pm_postmsg'] . '" alt="' . $lang['Post_new_pm'] . '" border="0" /></a>',
362		'post' => '<a href="' . $post_urls['post'] . '">' . $lang['Post_new_pm'] . '</a>',
363		'reply_img' => '<a href="' . $post_urls['reply'] . '"><img src="' . $images['pm_replymsg'] . '" alt="' . $lang['Post_reply_pm'] . '" border="0" /></a>',
364		'reply' => '<a href="' . $post_urls['reply'] . '">' . $lang['Post_reply_pm'] . '</a>',
365		'quote_img' => '<a href="' . $post_urls['quote'] . '"><img src="' . $images['pm_quotemsg'] . '" alt="' . $lang['Post_quote_pm'] . '" border="0" /></a>',
366		'quote' => '<a href="' . $post_urls['quote'] . '">' . $lang['Post_quote_pm'] . '</a>',
367		'edit_img' => '<a href="' . $post_urls['edit'] . '"><img src="' . $images['pm_editmsg'] . '" alt="' . $lang['Edit_pm'] . '" border="0" /></a>',
368		'edit' => '<a href="' . $post_urls['edit'] . '">' . $lang['Edit_pm'] . '</a>'
369	);
370
371	if ( $folder == 'inbox' )
372	{
373		$post_img = $post_icons['post_img'];
374		$reply_img = $post_icons['reply_img'];
375		$quote_img = $post_icons['quote_img'];
376		$edit_img = '';
377		$post = $post_icons['post'];
378		$reply = $post_icons['reply'];
379		$quote = $post_icons['quote'];
380		$edit = '';
381		$l_box_name = $lang['Inbox'];
382	}
383	else if ( $folder == 'outbox' )
384	{
385		$post_img = $post_icons['post_img'];
386		$reply_img = '';
387		$quote_img = '';
388		$edit_img = $post_icons['edit_img'];
389		$post = $post_icons['post'];
390		$reply = '';
391		$quote = '';
392		$edit = $post_icons['edit'];
393		$l_box_name = $lang['Outbox'];
394	}
395	else if ( $folder == 'savebox' )
396	{
397		if ( $privmsg['privmsgs_type'] == PRIVMSGS_SAVED_IN_MAIL )
398		{
399			$post_img = $post_icons['post_img'];
400			$reply_img = $post_icons['reply_img'];
401			$quote_img = $post_icons['quote_img'];
402			$edit_img = '';
403			$post = $post_icons['post'];
404			$reply = $post_icons['reply'];
405			$quote = $post_icons['quote'];
406			$edit = '';
407		}
408		else
409		{
410			$post_img = $post_icons['post_img'];
411			$reply_img = '';
412			$quote_img = '';
413			$edit_img = '';
414			$post = $post_icons['post'];
415			$reply = '';
416			$quote = '';
417			$edit = '';
418		}
419		$l_box_name = $lang['Saved'];
420	}
421	else if ( $folder == 'sentbox' )
422	{
423		$post_img = $post_icons['post_img'];
424		$reply_img = '';
425		$quote_img = '';
426		$edit_img = '';
427		$post = $post_icons['post'];
428		$reply = '';
429		$quote = '';
430		$edit = '';
431		$l_box_name = $lang['Sent'];
432	}
433
434	$s_hidden_fields = '<input type="hidden" name="mark[]" value="' . $privmsgs_id . '" />';
435
436	$page_title = $lang['Read_pm'];
437	include($phpbb_root_path . 'includes/page_header.'.$phpEx);
438
439	//
440	// Load templates
441	//
442	$template->set_filenames(array(
443		'body' => 'privmsgs_read_body.tpl')
444	);
445	make_jumpbox('viewforum.'.$phpEx);
446
447	$template->assign_vars(array(
448		'INBOX_IMG' => $inbox_img,
449		'SENTBOX_IMG' => $sentbox_img,
450		'OUTBOX_IMG' => $outbox_img,
451		'SAVEBOX_IMG' => $savebox_img,
452		'INBOX' => $inbox_url,
453
454		'POST_PM_IMG' => $post_img,
455		'REPLY_PM_IMG' => $reply_img,
456		'EDIT_PM_IMG' => $edit_img,
457		'QUOTE_PM_IMG' => $quote_img,
458		'POST_PM' => $post,
459		'REPLY_PM' => $reply,
460		'EDIT_PM' => $edit,
461		'QUOTE_PM' => $quote,
462
463		'SENTBOX' => $sentbox_url,
464		'OUTBOX' => $outbox_url,
465		'SAVEBOX' => $savebox_url,
466
467		'BOX_NAME' => $l_box_name,
468
469		'L_MESSAGE' => $lang['Message'],
470		'L_INBOX' => $lang['Inbox'],
471		'L_OUTBOX' => $lang['Outbox'],
472		'L_SENTBOX' => $lang['Sent'],
473		'L_SAVEBOX' => $lang['Saved'],
474		'L_FLAG' => $lang['Flag'],
475		'L_SUBJECT' => $lang['Subject'],
476		'L_POSTED' => $lang['Posted'],
477		'L_DATE' => $lang['Date'],
478		'L_FROM' => $lang['From'],
479		'L_TO' => $lang['To'],
480		'L_SAVE_MSG' => $lang['Save_message'],
481		'L_DELETE_MSG' => $lang['Delete_message'],
482
483		'S_PRIVMSGS_ACTION' => append_sid("privmsg.$phpEx?folder=$folder"),
484		'S_HIDDEN_FIELDS' => $s_hidden_fields)
485	);
486
487	$username_from = $privmsg['username_1'];
488	$user_id_from = $privmsg['user_id_1'];
489	$username_to = $privmsg['username_2'];
490	$user_id_to = $privmsg['user_id_2'];
491
492	$post_date = create_date($board_config['default_dateformat'], $privmsg['privmsgs_date'], $board_config['board_timezone']);
493
494	$temp_url = append_sid("profile.$phpEx?mode=viewprofile&amp;" . POST_USERS_URL . '=' . $user_id_from);
495	$profile_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_profile'] . '" alt="' . $lang['Read_profile'] . '" title="' . $lang['Read_profile'] . '" border="0" /></a>';
496	$profile = '<a href="' . $temp_url . '">' . $lang['Read_profile'] . '</a>';
497
498	$temp_url = append_sid("privmsg.$phpEx?mode=post&amp;" . POST_USERS_URL . "=$user_id_from");
499	$pm_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_pm'] . '" alt="' . $lang['Send_private_message'] . '" title="' . $lang['Send_private_message'] . '" border="0" /></a>';
500	$pm = '<a href="' . $temp_url . '">' . $lang['Send_private_message'] . '</a>';
501
502	if ( !empty($privmsg['user_viewemail']) || $userdata['user_level'] == ADMIN )
503	{
504		$email_uri = ( $board_config['board_email_form'] ) ? append_sid("profile.$phpEx?mode=email&amp;" . POST_USERS_URL .'=' . $user_id_from) : 'mailto:' . $privmsg['user_email'];
505
506		$email_img = '<a href="' . $email_uri . '"><img src="' . $images['icon_email'] . '" alt="' . $lang['Send_email'] . '" title="' . $lang['Send_email'] . '" border="0" /></a>';
507		$email = '<a href="' . $email_uri . '">' . $lang['Send_email'] . '</a>';
508	}
509	else
510	{
511		$email_img = '';
512		$email = '';
513	}
514
515	$www_img = ( $privmsg['user_website'] ) ? '<a href="' . $privmsg['user_website'] . '" target="_userwww"><img src="' . $images['icon_www'] . '" alt="' . $lang['Visit_website'] . '" title="' . $lang['Visit_website'] . '" border="0" /></a>' : '';
516	$www = ( $privmsg['user_website'] ) ? '<a href="' . $privmsg['user_website'] . '" target="_userwww">' . $lang['Visit_website'] . '</a>' : '';
517
518	if ( !empty($privmsg['user_icq']) )
519	{
520		$icq_status_img = '<a href="http://wwp.icq.com/' . $privmsg['user_icq'] . '#pager"><img src="http://web.icq.com/whitepages/online?icq=' . $privmsg['user_icq'] . '&img=5" width="18" height="18" border="0" /></a>';
521		$icq_img = '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $privmsg['user_icq'] . '"><img src="' . $images['icon_icq'] . '" alt="' . $lang['ICQ'] . '" title="' . $lang['ICQ'] . '" border="0" /></a>';
522		$icq =  '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $privmsg['user_icq'] . '">' . $lang['ICQ'] . '</a>';
523	}
524	else
525	{
526		$icq_status_img = '';
527		$icq_img = '';
528		$icq = '';
529	}
530
531	$aim_img = ( $privmsg['user_aim'] ) ? '<a href="aim:goim?screenname=' . $privmsg['user_aim'] . '&amp;message=Hello+Are+you+there?"><img src="' . $images['icon_aim'] . '" alt="' . $lang['AIM'] . '" title="' . $lang['AIM'] . '" border="0" /></a>' : '';
532	$aim = ( $privmsg['user_aim'] ) ? '<a href="aim:goim?screenname=' . $privmsg['user_aim'] . '&amp;message=Hello+Are+you+there?">' . $lang['AIM'] . '</a>' : '';
533
534	$temp_url = append_sid("profile.$phpEx?mode=viewprofile&amp;" . POST_USERS_URL . "=$user_id_from");
535	$msn_img = ( $privmsg['user_msnm'] ) ? '<a href="' . $temp_url . '"><img src="' . $images['icon_msnm'] . '" alt="' . $lang['MSNM'] . '" title="' . $lang['MSNM'] . '" border="0" /></a>' : '';
536	$msn = ( $privmsg['user_msnm'] ) ? '<a href="' . $temp_url . '">' . $lang['MSNM'] . '</a>' : '';
537
538	$yim_img = ( $privmsg['user_yim'] ) ? '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $privmsg['user_yim'] . '&amp;.src=pg"><img src="' . $images['icon_yim'] . '" alt="' . $lang['YIM'] . '" title="' . $lang['YIM'] . '" border="0" /></a>' : '';
539	$yim = ( $privmsg['user_yim'] ) ? '<a href="http://edit.yahoo.com/config/send_webmesg?.target=' . $privmsg['user_yim'] . '&amp;.src=pg">' . $lang['YIM'] . '</a>' : '';
540
541	$temp_url = append_sid("search.$phpEx?search_author=" . urlencode($username_from) . "&amp;showresults=posts");
542	$search_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_search'] . '" alt="' . sprintf($lang['Search_user_posts'], $username_from) . '" title="' . sprintf($lang['Search_user_posts'], $username_from) . '" border="0" /></a>';
543	$search = '<a href="' . $temp_url . '">' . sprintf($lang['Search_user_posts'], $username_from) . '</a>';
544
545	//
546	// Processing of post
547	//
548	$post_subject = $privmsg['privmsgs_subject'];
549
550	$private_message = $privmsg['privmsgs_text'];
551	$bbcode_uid = $privmsg['privmsgs_bbcode_uid'];
552
553	if ( $board_config['allow_sig'] )
554	{
555		$user_sig = ( $privmsg['privmsgs_from_userid'] == $userdata['user_id'] ) ? $userdata['user_sig'] : $privmsg['user_sig'];
556	}
557	else
558	{
559		$user_sig = '';
560	}
561
562	$user_sig_bbcode_uid = ( $privmsg['privmsgs_from_userid'] == $userdata['user_id'] ) ? $userdata['user_sig_bbcode_uid'] : $privmsg['user_sig_bbcode_uid'];
563
564	//
565	// If the board has HTML off but the post has HTML
566	// on then we process it, else leave it alone
567	//
568	if ( !$board_config['allow_html'] || !$userdata['user_allowhtml'])
569	{
570		if ( $user_sig != '')
571		{
572			$user_sig = preg_replace('#(<)([\/]?.*?)(>)#is', "&lt;\\2&gt;", $user_sig);
573		}
574
575		if ( $privmsg['privmsgs_enable_html'] )
576		{
577			$private_message = preg_replace('#(<)([\/]?.*?)(>)#is', "&lt;\\2&gt;", $private_message);
578		}
579	}
580
581	if ( $user_sig != '' && $privmsg['privmsgs_attach_sig'] && $user_sig_bbcode_uid != '' )
582	{
583		$user_sig = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($user_sig, $user_sig_bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $user_sig);
584	}
585
586	if ( $bbcode_uid != '' )
587	{
588		$private_message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($private_message, $bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $private_message);
589	}
590
591	$private_message = make_clickable($private_message);
592
593	if ( $privmsg['privmsgs_attach_sig'] && $user_sig != '' )
594	{
595		$private_message .= '<br /><br />_________________<br />' . make_clickable($user_sig);
596	}
597
598	$orig_word = array();
599	$replacement_word = array();
600	obtain_word_list($orig_word, $replacement_word);
601
602	if ( count($orig_word) )
603	{
604		$post_subject = preg_replace($orig_word, $replacement_word, $post_subject);
605		$private_message = preg_replace($orig_word, $replacement_word, $private_message);
606	}
607
608	if ( $board_config['allow_smilies'] && $privmsg['privmsgs_enable_smilies'] )
609	{
610		$private_message = smilies_pass($private_message);
611	}
612
613	$private_message = str_replace("\n", '<br />', $private_message);
614
615	//
616	// Dump it to the templating engine
617	//
618	$template->assign_vars(array(
619		'MESSAGE_TO' => $username_to,
620		'MESSAGE_FROM' => $username_from,
621		'RANK_IMAGE' => $rank_image,
622		'POSTER_JOINED' => $poster_joined,
623		'POSTER_POSTS' => $poster_posts,
624		'POSTER_FROM' => $poster_from,
625		'POSTER_AVATAR' => $poster_avatar,
626		'POST_SUBJECT' => $post_subject,
627		'POST_DATE' => $post_date,
628		'MESSAGE' => $private_message,
629
630		'PROFILE_IMG' => $profile_img,
631		'PROFILE' => $profile,
632		'SEARCH_IMG' => $search_img,
633		'SEARCH' => $search,
634		'EMAIL_IMG' => $email_img,
635		'EMAIL' => $email,
636		'WWW_IMG' => $www_img,
637		'WWW' => $www,
638		'ICQ_STATUS_IMG' => $icq_status_img,
639		'ICQ_IMG' => $icq_img,
640		'ICQ' => $icq,
641		'AIM_IMG' => $aim_img,
642		'AIM' => $aim,
643		'MSN_IMG' => $msn_img,
644		'MSN' => $msn,
645		'YIM_IMG' => $yim_img,
646		'YIM' => $yim)
647	);
648
649	$template->pparse('body');
650
651	include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
652
653}
654else if ( ( $delete && $mark_list ) || $delete_all )
655{
656	if ( !$userdata['session_logged_in'] )
657	{
658		redirect(append_sid("login.$phpEx?redirect=privmsg.$phpEx&folder=inbox", true));
659	}
660
661	if ( isset($mark_list) && !is_array($mark_list) )
662	{
663		// Set to empty array instead of '0' if nothing is selected.
664		$mark_list = array();
665	}
666
667	if ( !$confirm )
668	{
669		$s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
670		$s_hidden_fields .= ( isset($HTTP_POST_VARS['delete']) ) ? '<input type="hidden" name="delete" value="true" />' : '<input type="hidden" name="deleteall" value="true" />';
671		$s_hidden_fields .= '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" />';
672
673		for($i = 0; $i < count($mark_list); $i++)
674		{
675			$s_hidden_fields .= '<input type="hidden" name="mark[]" value="' . intval($mark_list[$i]) . '" />';
676		}
677
678		//
679		// Output confirmation page
680		//
681		include($phpbb_root_path . 'includes/page_header.'.$phpEx);
682
683		$template->set_filenames(array(
684			'confirm_body' => 'confirm_body.tpl')
685		);
686		$template->assign_vars(array(
687			'MESSAGE_TITLE' => $lang['Information'],
688			'MESSAGE_TEXT' => ( count($mark_list) == 1 ) ? $lang['Confirm_delete_pm'] : $lang['Confirm_delete_pms'],
689
690			'L_YES' => $lang['Yes'],
691			'L_NO' => $lang['No'],
692
693			'S_CONFIRM_ACTION' => append_sid("privmsg.$phpEx?folder=$folder"),
694			'S_HIDDEN_FIELDS' => $s_hidden_fields)
695		);
696
697		$template->pparse('confirm_body');
698
699		include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
700
701	}
702	else if ($confirm && $sid === $userdata['session_id'])
703	{
704		$delete_sql_id = '';
705
706		if (!$delete_all)
707		{
708			for ($i = 0; $i < count($mark_list); $i++)
709			{
710				$delete_sql_id .= (($delete_sql_id != '') ? ', ' : '') . intval($mark_list[$i]);
711			}
712			$delete_sql_id = "AND privmsgs_id IN ($delete_sql_id)";
713		}
714
715		switch($folder)
716		{
717			case 'inbox':
718				$delete_type = "privmsgs_to_userid = " . $userdata['user_id'] . " AND (
719				privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
720				break;
721
722			case 'outbox':
723				$delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
724				break;
725
726			case 'sentbox':
727				$delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_SENT_MAIL;
728				break;
729
730			case 'savebox':
731				$delete_type = "( ( privmsgs_from_userid = " . $userdata['user_id'] . "
732					AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " )
733				OR ( privmsgs_to_userid = " . $userdata['user_id'] . "
734					AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) )";
735				break;
736		}
737
738		$sql = "SELECT privmsgs_id
739			FROM " . PRIVMSGS_TABLE . "
740			WHERE $delete_type $delete_sql_id";
741
742		if ( !($result = $db->sql_query($sql)) )
743		{
744			message_die(GENERAL_ERROR, 'Could not obtain id list to delete messages', '', __LINE__, __FILE__, $sql);
745		}
746
747		$mark_list = array();
748		while ( $row = $db->sql_fetchrow($result) )
749		{
750			$mark_list[] = $row['privmsgs_id'];
751		}
752
753		unset($delete_type);
754
755		if ( count($mark_list) )
756		{
757			$delete_sql_id = '';
758			for ($i = 0; $i < sizeof($mark_list); $i++)
759			{
760				$delete_sql_id .= (($delete_sql_id != '') ? ', ' : '') . intval($mark_list[$i]);
761			}
762
763			if ($folder == 'inbox' || $folder == 'outbox')
764			{
765				switch ($folder)
766				{
767					case 'inbox':
768						$sql = "privmsgs_to_userid = " . $userdata['user_id'];
769						break;
770					case 'outbox':
771						$sql = "privmsgs_from_userid = " . $userdata['user_id'];
772						break;
773				}
774
775				// Get information relevant to new or unread mail
776				// so we can adjust users counters appropriately
777				$sql = "SELECT privmsgs_to_userid, privmsgs_type
778					FROM " . PRIVMSGS_TABLE . "
779					WHERE privmsgs_id IN ($delete_sql_id)
780						AND $sql
781						AND privmsgs_type IN (" . PRIVMSGS_NEW_MAIL . ", " . PRIVMSGS_UNREAD_MAIL . ")";
782				if ( !($result = $db->sql_query($sql)) )
783				{
784					message_die(GENERAL_ERROR, 'Could not obtain user id list for outbox messages', '', __LINE__, __FILE__, $sql);
785				}
786
787				if ( $row = $db->sql_fetchrow($result))
788				{
789					$update_users = $update_list = array();
790
791					do
792					{
793						switch ($row['privmsgs_type'])
794						{
795							case PRIVMSGS_NEW_MAIL:
796								$update_users['new'][$row['privmsgs_to_userid']]++;
797								break;
798
799							case PRIVMSGS_UNREAD_MAIL:
800								$update_users['unread'][$row['privmsgs_to_userid']]++;
801								break;
802						}
803					}
804					while ($row = $db->sql_fetchrow($result));
805
806					if (sizeof($update_users))
807					{
808						while (list($type, $users) = each($update_users))
809						{
810							while (list($user_id, $dec) = each($users))
811							{
812								$update_list[$type][$dec][] = $user_id;
813							}
814						}
815						unset($update_users);
816
817						while (list($type, $dec_ary) = each($update_list))
818						{
819							switch ($type)
820							{
821								case 'new':
822									$type = "user_new_privmsg";
823									break;
824
825								case 'unread':
826									$type = "user_unread_privmsg";
827									break;
828							}
829
830							while (list($dec, $user_ary) = each($dec_ary))
831							{
832								$user_ids = implode(', ', $user_ary);
833
834								$sql = "UPDATE " . USERS_TABLE . "
835									SET $type = $type - $dec
836									WHERE user_id IN ($user_ids)";
837								if ( !$db->sql_query($sql) )
838								{
839									message_die(GENERAL_ERROR, 'Could not update user pm counters', '', __LINE__, __FILE__, $sql);
840								}
841							}
842						}
843						unset($update_list);
844					}
845				}
846				$db->sql_freeresult($result);
847			}
848
849			// Delete the messages
850			$delete_text_sql = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . "
851				WHERE privmsgs_text_id IN ($delete_sql_id)";
852			$delete_sql = "DELETE FROM " . PRIVMSGS_TABLE . "
853				WHERE privmsgs_id IN ($delete_sql_id)
854					AND ";
855
856			switch( $folder )
857			{
858				case 'inbox':
859					$delete_sql .= "privmsgs_to_userid = " . $userdata['user_id'] . " AND (
860						privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
861					break;
862
863				case 'outbox':
864					$delete_sql .= "privmsgs_from_userid = " . $userdata['user_id'] . " AND (
865						privmsgs_type = " . PRIVMSGS_NEW_MAIL . " OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
866					break;
867
868				case 'sentbox':
869					$delete_sql .= "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_SENT_MAIL;
870					break;
871
872				case 'savebox':
873					$delete_sql .= "( ( privmsgs_from_userid = " . $userdata['user_id'] . "
874						AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " )
875					OR ( privmsgs_to_userid = " . $userdata['user_id'] . "
876						AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) )";
877					break;
878			}
879
880			if ( !$db->sql_query($delete_sql, BEGIN_TRANSACTION) )
881			{
882				message_die(GENERAL_ERROR, 'Could not delete private message info', '', __LINE__, __FILE__, $delete_sql);
883			}
884
885			if ( !$db->sql_query($delete_text_sql, END_TRANSACTION) )
886			{
887				message_die(GENERAL_ERROR, 'Could not delete private message text', '', __LINE__, __FILE__, $delete_text_sql);
888			}
889		}
890	}
891}
892else if ( $save && $mark_list && $folder != 'savebox' && $folder != 'outbox' )
893{
894	if ( !$userdata['session_logged_in'] )
895	{
896		redirect(append_sid("login.$phpEx?redirect=privmsg.$phpEx&folder=inbox", true));
897	}
898
899	if (sizeof($mark_list))
900	{
901		// See if recipient is at their savebox limit
902		$sql = "SELECT COUNT(privmsgs_id) AS savebox_items, MIN(privmsgs_date) AS oldest_post_time
903			FROM " . PRIVMSGS_TABLE . "
904			WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . "
905					AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
906				OR ( privmsgs_from_userid = " . $userdata['user_id'] . "
907					AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )";
908		if ( !($result = $db->sql_query($sql)) )
909		{
910			message_die(GENERAL_ERROR, 'Could not obtain sent message info for sendee', '', __LINE__, __FILE__, $sql);
911		}
912
913		$sql_priority = ( SQL_LAYER == 'mysql' ) ? 'LOW_PRIORITY' : '';
914
915		if ( $saved_info = $db->sql_fetchrow($result) )
916		{
917			if ($board_config['max_savebox_privmsgs'] && $saved_info['savebox_items'] >= $board_config['max_savebox_privmsgs'] )
918			{
919				$sql = "SELECT privmsgs_id FROM " . PRIVMSGS_TABLE . "
920					WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . "
921								AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
922							OR ( privmsgs_from_userid = " . $userdata['user_id'] . "
923								AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )
924						AND privmsgs_date = " . $saved_info['oldest_post_time'];
925				if ( !$result = $db->sql_query($sql) )
926				{
927					message_die(GENERAL_ERROR, 'Could not find oldest privmsgs (save)', '', __LINE__, __FILE__, $sql);
928				}
929				$old_privmsgs_id = $db->sql_fetchrow($result);
930				$old_privmsgs_id = $old_privmsgs_id['privmsgs_id'];
931
932				$sql = "DELETE $sql_priority FROM " . PRIVMSGS_TABLE . "
933					WHERE privmsgs_id = $old_privmsgs_id";
934				if ( !$db->sql_query($sql) )
935				{
936					message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs (save)', '', __LINE__, __FILE__, $sql);
937				}
938
939				$sql = "DELETE $sql_priority FROM " . PRIVMSGS_TEXT_TABLE . "
940					WHERE privmsgs_text_id = $old_privmsgs_id";
941				if ( !$db->sql_query($sql) )
942				{
943					message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs text (save)', '', __LINE__, __FILE__, $sql);
944				}
945			}
946		}
947
948		$saved_sql_id = '';
949		for ($i = 0; $i < sizeof($mark_list); $i++)
950		{
951			$saved_sql_id .= (($saved_sql_id != '') ? ', ' : '') . intval($mark_list[$i]);
952		}
953
954		// Process request
955		$saved_sql = "UPDATE " . PRIVMSGS_TABLE;
956
957		// Decrement read/new counters if appropriate
958		if ($folder == 'inbox' || $folder == 'outbox')
959		{
960			switch ($folder)
961			{
962				case 'inbox':
963					$sql = "privmsgs_to_userid = " . $userdata['user_id'];
964					break;
965				case 'outbox':
966					$sql = "privmsgs_from_userid = " . $userdata['user_id'];
967					break;
968			}
969
970			// Get information relevant to new or unread mail
971			// so we can adjust users counters appropriately
972			$sql = "SELECT privmsgs_to_userid, privmsgs_type
973				FROM " . PRIVMSGS_TABLE . "
974				WHERE privmsgs_id IN ($saved_sql_id)
975					AND $sql
976					AND privmsgs_type IN (" . PRIVMSGS_NEW_MAIL . ", " . PRIVMSGS_UNREAD_MAIL . ")";
977			if ( !($result = $db->sql_query($sql)) )
978			{
979				message_die(GENERAL_ERROR, 'Could not obtain user id list for outbox messages', '', __LINE__, __FILE__, $sql);
980			}
981
982			if ( $row = $db->sql_fetchrow($result))
983			{
984				$update_users = $update_list = array();
985
986				do
987				{
988					switch ($row['privmsgs_type'])
989					{
990						case PRIVMSGS_NEW_MAIL:
991							$update_users['new'][$row['privmsgs_to_userid']]++;
992							break;
993
994						case PRIVMSGS_UNREAD_MAIL:
995							$update_users['unread'][$row['privmsgs_to_userid']]++;
996							break;
997					}
998				}
999				while ($row = $db->sql_fetchrow($result));
1000
1001				if (sizeof($update_users))
1002				{
1003					while (list($type, $users) = each($update_users))
1004					{
1005						while (list($user_id, $dec) = each($users))
1006						{
1007							$update_list[$type][$dec][] = $user_id;
1008						}
1009					}
1010					unset($update_users);
1011
1012					while (list($type, $dec_ary) = each($update_list))
1013					{
1014						switch ($type)
1015						{
1016							case 'new':
1017								$type = "user_new_privmsg";
1018								break;
1019
1020							case 'unread':
1021								$type = "user_unread_privmsg";
1022								break;
1023						}
1024
1025						while (list($dec, $user_ary) = each($dec_ary))
1026						{
1027							$user_ids = implode(', ', $user_ary);
1028
1029							$sql = "UPDATE " . USERS_TABLE . "
1030								SET $type = $type - $dec
1031								WHERE user_id IN ($user_ids)";
1032							if ( !$db->sql_query($sql) )
1033							{
1034								message_die(GENERAL_ERROR, 'Could not update user pm counters', '', __LINE__, __FILE__, $sql);
1035							}
1036						}
1037					}
1038					unset($update_list);
1039				}
1040			}
1041			$db->sql_freeresult($result);
1042		}
1043
1044		switch ($folder)
1045		{
1046			case 'inbox':
1047				$saved_sql .= " SET privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . "
1048					WHERE privmsgs_to_userid = " . $userdata['user_id'] . "
1049						AND ( privmsgs_type = " . PRIVMSGS_READ_MAIL . "
1050							OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
1051							OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . ")";
1052				break;
1053
1054			case 'outbox':
1055				$saved_sql .= " SET privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . "
1056					WHERE privmsgs_from_userid = " . $userdata['user_id'] . "
1057						AND ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
1058							OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " ) ";
1059				break;
1060
1061			case 'sentbox':
1062				$saved_sql .= " SET privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . "
1063					WHERE privmsgs_from_userid = " . $userdata['user_id'] . "
1064						AND privmsgs_type = " . PRIVMSGS_SENT_MAIL;
1065				break;
1066		}
1067
1068		$saved_sql .= " AND privmsgs_id IN ($saved_sql_id)";
1069
1070		if ( !$db->sql_query($saved_sql) )
1071		{
1072			message_die(GENERAL_ERROR, 'Could not save private messages', '', __LINE__, __FILE__, $saved_sql);
1073		}
1074
1075		redirect(append_sid("privmsg.$phpEx?folder=savebox", true));
1076	}
1077}
1078else if ( $submit || $refresh || $mode != '' )
1079{
1080	if ( !$userdata['session_logged_in'] )
1081	{
1082		$user_id = ( isset($HTTP_GET_VARS[POST_USERS_URL]) ) ? '&' . POST_USERS_URL . '=' . intval($HTTP_GET_VARS[POST_USERS_URL]) : '';
1083		redirect(append_sid("login.$phpEx?redirect=privmsg.$phpEx&folder=$folder&mode=$mode" . $user_id, true));
1084	}
1085
1086	//
1087	// Toggles
1088	//
1089	if ( !$board_config['allow_html'] )
1090	{
1091		$html_on = 0;
1092	}
1093	else
1094	{
1095		$html_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_html']) ) ? 0 : TRUE ) : $userdata['user_allowhtml'];
1096	}
1097
1098	if ( !$board_config['allow_bbcode'] )
1099	{
1100		$bbcode_on = 0;
1101	}
1102	else
1103	{
1104		$bbcode_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_bbcode']) ) ? 0 : TRUE ) : $userdata['user_allowbbcode'];
1105	}
1106
1107	if ( !$board_config['allow_smilies'] )
1108	{
1109		$smilies_on = 0;
1110	}
1111	else
1112	{
1113		$smilies_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_smilies']) ) ? 0 : TRUE ) : $userdata['user_allowsmile'];
1114	}
1115
1116	$attach_sig = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['attach_sig']) ) ? TRUE : 0 ) : $userdata['user_attachsig'];
1117	$user_sig = ( $userdata['user_sig'] != '' && $board_config['allow_sig'] ) ? $userdata['user_sig'] : "";
1118
1119	if ( $submit && $mode != 'edit' )
1120	{
1121		//
1122		// Flood control
1123		//
1124		$sql = "SELECT MAX(privmsgs_date) AS last_post_time
1125			FROM " . PRIVMSGS_TABLE . "
1126			WHERE privmsgs_from_userid = " . $userdata['user_id'];
1127		if ( $result = $db->sql_query($sql) )
1128		{
1129			$db_row = $db->sql_fetchrow($result);
1130
1131			$last_post_time = $db_row['last_post_time'];
1132			$current_time = time();
1133
1134			if ( ( $current_time - $last_post_time ) < $board_config['flood_interval'])
1135			{
1136				message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
1137			}
1138		}
1139		//
1140		// End Flood control
1141		//
1142	}
1143
1144	if ($submit && $mode == 'edit')
1145	{
1146		$sql = 'SELECT privmsgs_from_userid
1147			FROM ' . PRIVMSGS_TABLE . '
1148			WHERE privmsgs_id = ' . (int) $privmsg_id . '
1149				AND privmsgs_from_userid = ' . $userdata['user_id'];
1150
1151		if (!($result = $db->sql_query($sql)))
1152		{
1153			message_die(GENERAL_ERROR, "Could not obtain message details", "", __LINE__, __FILE__, $sql);
1154		}
1155
1156		if (!($row = $db->sql_fetchrow($result)))
1157		{
1158			message_die(GENERAL_MESSAGE, $lang['No_such_post']);
1159		}
1160		$db->sql_freeresult($result);
1161
1162		unset($row);
1163	}
1164
1165	if ( $submit )
1166	{
1167		// session id check
1168		if ($sid == '' || $sid != $userdata['session_id'])
1169		{
1170			$error = true;
1171			$error_msg .= ( ( !empty($error_msg) ) ? '<br />' : '' ) . $lang['Session_invalid'];
1172		}
1173
1174		if ( !empty($HTTP_POST_VARS['username']) )
1175		{
1176			$to_username = phpbb_clean_username($HTTP_POST_VARS['username']);
1177
1178			$sql = "SELECT user_id, user_notify_pm, user_email, user_lang, user_active
1179				FROM " . USERS_TABLE . "
1180				WHERE username = '" . str_replace("\'", "''", $to_username) . "'
1181					AND user_id <> " . ANONYMOUS;
1182			if ( !($result = $db->sql_query($sql)) )
1183			{
1184				$error = TRUE;
1185				$error_msg = $lang['No_such_user'];
1186			}
1187
1188			if (!($to_userdata = $db->sql_fetchrow($result)))
1189			{
1190				$error = TRUE;
1191				$error_msg = $lang['No_such_user'];
1192			}
1193		}
1194		else
1195		{
1196			$error = TRUE;
1197			$error_msg .= ( ( !empty($error_msg) ) ? '<br />' : '' ) . $lang['No_to_user'];
1198		}
1199
1200		$privmsg_subject = trim(htmlspecialchars($HTTP_POST_VARS['subject']));
1201		if ( empty($privmsg_subject) )
1202		{
1203			$error = TRUE;
1204			$error_msg .= ( ( !empty($error_msg) ) ? '<br />' : '' ) . $lang['Empty_subject'];
1205		}
1206
1207		if ( !empty($HTTP_POST_VARS['message']) )
1208		{
1209			if ( !$error )
1210			{
1211				if ( $bbcode_on )
1212				{
1213					$bbcode_uid = make_bbcode_uid();
1214				}
1215
1216				$privmsg_message = prepare_message($HTTP_POST_VARS['message'], $html_on, $bbcode_on, $smilies_on, $bbcode_uid);
1217
1218			}
1219		}
1220		else
1221		{
1222			$error = TRUE;
1223			$error_msg .= ( ( !empty($error_msg) ) ? '<br />' : '' ) . $lang['Empty_message'];
1224		}
1225	}
1226
1227	if ( $submit && !$error )
1228	{
1229		//
1230		// Has admin prevented user from sending PM's?
1231		//
1232		if ( !$userdata['user_allow_pm'] )
1233		{
1234			$message = $lang['Cannot_send_privmsg'];
1235			message_die(GENERAL_MESSAGE, $message);
1236		}
1237
1238		$msg_time = time();
1239
1240		if ( $mode != 'edit' )
1241		{
1242			//
1243			// See if recipient is at their inbox limit
1244			//
1245			$sql = "SELECT COUNT(privmsgs_id) AS inbox_items, MIN(privmsgs_date) AS oldest_post_time
1246				FROM " . PRIVMSGS_TABLE . "
1247				WHERE ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
1248						OR privmsgs_type = " . PRIVMSGS_READ_MAIL . "
1249						OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )
1250					AND privmsgs_to_userid = " . $to_userdata['user_id'];
1251			if ( !($result = $db->sql_query($sql)) )
1252			{
1253				message_die(GENERAL_MESSAGE, $lang['No_such_user']);
1254			}
1255
1256			$sql_priority = ( SQL_LAYER == 'mysql' ) ? 'LOW_PRIORITY' : '';
1257
1258			if ( $inbox_info = $db->sql_fetchrow($result) )
1259			{
1260				if ($board_config['max_inbox_privmsgs'] && $inbox_info['inbox_items'] >= $board_config['max_inbox_privmsgs'])
1261				{
1262					$sql = "SELECT privmsgs_id FROM " . PRIVMSGS_TABLE . "
1263						WHERE ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
1264								OR privmsgs_type = " . PRIVMSGS_READ_MAIL . "
1265								OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . "  )
1266							AND privmsgs_date = " . $inbox_info['oldest_post_time'] . "
1267							AND privmsgs_to_userid = " . $to_userdata['user_id'];
1268					if ( !$result = $db->sql_query($sql) )
1269					{
1270						message_die(GENERAL_ERROR, 'Could not find oldest privmsgs (inbox)', '', __LINE__, __FILE__, $sql);
1271					}
1272					$old_privmsgs_id = $db->sql_fetchrow($result);
1273					$old_privmsgs_id = $old_privmsgs_id['privmsgs_id'];
1274
1275					$sql = "DELETE $sql_priority FROM " . PRIVMSGS_TABLE . "
1276						WHERE privmsgs_id = $old_privmsgs_id";
1277					if ( !$db->sql_query($sql) )
1278					{
1279						message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs (inbox)'.$sql, '', __LINE__, __FILE__, $sql);
1280					}
1281
1282					$sql = "DELETE $sql_priority FROM " . PRIVMSGS_TEXT_TABLE . "
1283						WHERE privmsgs_text_id = $old_privmsgs_id";
1284					if ( !$db->sql_query($sql) )
1285					{
1286						message_die(GENERAL_ERROR, 'Could not delete oldest privmsgs text (inbox)', '', __LINE__, __FILE__, $sql);
1287					}
1288				}
1289			}
1290
1291			$sql_info = "INSERT INTO " . PRIVMSGS_TABLE . " (privmsgs_type, privmsgs_subject, privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip, privmsgs_enable_html, privmsgs_enable_bbcode, privmsgs_enable_smilies, privmsgs_attach_sig)
1292				VALUES (" . PRIVMSGS_NEW_MAIL . ", '" . str_replace("\'", "''", $privmsg_subject) . "', " . $userdata['user_id'] . ", " . $to_userdata['user_id'] . ", $msg_time, '$user_ip', $html_on, $bbcode_on, $smilies_on, $attach_sig)";
1293		}
1294		else
1295		{
1296			$sql_info = "UPDATE " . PRIVMSGS_TABLE . "
1297				SET privmsgs_type = " . PRIVMSGS_NEW_MAIL . ", privmsgs_subject = '" . str_replace("\'", "''", $privmsg_subject) . "', privmsgs_from_userid = " . $userdata['user_id'] . ", privmsgs_to_userid = " . $to_userdata['user_id'] . ", privmsgs_date = $msg_time, privmsgs_ip = '$user_ip', privmsgs_enable_html = $html_on, privmsgs_enable_bbcode = $bbcode_on, privmsgs_enable_smilies = $smilies_on, privmsgs_attach_sig = $attach_sig
1298				WHERE privmsgs_id = $privmsg_id";
1299		}
1300
1301		if ( !($result = $db->sql_query($sql_info, BEGIN_TRANSACTION)) )
1302		{
1303			message_die(GENERAL_ERROR, "Could not insert/update private message sent info.", "", __LINE__, __FILE__, $sql_info);
1304		}
1305
1306		if ( $mode != 'edit' )
1307		{
1308			$privmsg_sent_id = $db->sql_nextid();
1309
1310			$sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text)
1311				VALUES ($privmsg_sent_id, '" . $bbcode_uid . "', '" . str_replace("\'", "''", $privmsg_message) . "')";
1312		}
1313		else
1314		{
1315			$sql = "UPDATE " . PRIVMSGS_TEXT_TABLE . "
1316				SET privmsgs_text = '" . str_replace("\'", "''", $privmsg_message) . "', privmsgs_bbcode_uid = '$bbcode_uid'
1317				WHERE privmsgs_text_id = $privmsg_id";
1318		}
1319
1320		if ( !$db->sql_query($sql, END_TRANSACTION) )
1321		{
1322			message_die(GENERAL_ERROR, "Could not insert/update private message sent text.", "", __LINE__, __FILE__, $sql);
1323		}
1324
1325		if ( $mode != 'edit' )
1326		{
1327			//
1328			// Add to the users new pm counter
1329			//
1330			$sql = "UPDATE " . USERS_TABLE . "
1331				SET user_new_privmsg = user_new_privmsg + 1, user_last_privmsg = " . time() . "
1332				WHERE user_id = " . $to_userdata['user_id'];
1333			if ( !$status = $db->sql_query($sql) )
1334			{
1335				message_die(GENERAL_ERROR, 'Could not update private message new/read status for user', '', __LINE__, __FILE__, $sql);
1336			}
1337
1338			if ( $to_userdata['user_notify_pm'] && !empty($to_userdata['user_email']) && $to_userdata['user_active'] )
1339			{
1340				$script_name = preg_replace('/^\/?(.*?)\/?$/', "\\1", trim($board_config['script_path']));
1341				$script_name = ( $script_name != '' ) ? $script_name . '/privmsg.'.$phpEx : 'privmsg.'.$phpEx;
1342				$server_name = trim($board_config['server_name']);
1343				$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';
1344				$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/';
1345
1346				include($phpbb_root_path . 'includes/emailer.'.$phpEx);
1347				$emailer = new emailer($board_config['smtp_delivery']);
1348
1349				$emailer->from($board_config['board_email']);
1350				$emailer->replyto($board_config['board_email']);
1351
1352				$emailer->use_template('privmsg_notify', $to_userdata['user_lang']);
1353				$emailer->email_address($to_userdata['user_email']);
1354				$emailer->set_subject($lang['Notification_subject']);
1355
1356				$emailer->assign_vars(array(
1357					'USERNAME' => stripslashes($to_username),
1358					'SITENAME' => $board_config['sitename'],
1359					'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '',
1360
1361					'U_INBOX' => $server_protocol . $server_name . $server_port . $script_name . '?folder=inbox')
1362				);
1363
1364				$emailer->send();
1365				$emailer->reset();
1366			}
1367		}
1368
1369		$template->assign_vars(array(
1370			'META' => '<meta http-equiv="refresh" content="3;url=' . append_sid("privmsg.$phpEx?folder=inbox") . '">')
1371		);
1372
1373		$msg = $lang['Message_sent'] . '<br /><br />' . sprintf($lang['Click_return_inbox'], '<a href="' . append_sid("privmsg.$phpEx?folder=inbox") . '">', '</a> ') . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');
1374
1375		message_die(GENERAL_MESSAGE, $msg);
1376	}
1377	else if ( $preview || $refresh || $error )
1378	{
1379
1380		//
1381		// If we're previewing or refreshing then obtain the data
1382		// passed to the script, process it a little, do some checks
1383		// where neccessary, etc.
1384		//
1385		$to_username = (isset($HTTP_POST_VARS['username']) ) ? trim(htmlspecialchars(stripslashes($HTTP_POST_VARS['username']))) : '';
1386
1387		$privmsg_subject = ( isset($HTTP_POST_VARS['subject']) ) ? trim(htmlspecialchars(stripslashes($HTTP_POST_VARS['subject']))) : '';
1388		$privmsg_message = ( isset($HTTP_POST_VARS['message']) ) ? trim($HTTP_POST_VARS['message']) : '';
1389		// $privmsg_message = preg_replace('#<textarea>#si', '&lt;textarea&gt;', $privmsg_message);
1390		if ( !$preview )
1391		{
1392			$privmsg_message = stripslashes($privmsg_message);
1393		}
1394
1395		//
1396		// Do mode specific things
1397		//
1398		if ( $mode == 'post' )
1399		{
1400			$page_title = $lang['Post_new_pm'];
1401
1402			$user_sig = ( $userdata['user_sig'] != '' && $board_config['allow_sig'] ) ? $userdata['user_sig'] : '';
1403
1404		}
1405		else if ( $mode == 'reply' )
1406		{
1407			$page_title = $lang['Post_reply_pm'];
1408
1409			$user_sig = ( $userdata['user_sig'] != '' && $board_config['allow_sig'] ) ? $userdata['user_sig'] : '';
1410
1411		}
1412		else if ( $mode == 'edit' )
1413		{
1414			$page_title = $lang['Edit_pm'];
1415
1416			$sql = "SELECT u.user_id, u.user_sig
1417				FROM " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " u
1418				WHERE pm.privmsgs_id = $privmsg_id
1419					AND u.user_id = pm.privmsgs_from_userid";
1420			if ( !($result = $db->sql_query($sql)) )
1421			{
1422				message_die(GENERAL_ERROR, "Could not obtain post and post text", "", __LINE__, __FILE__, $sql);
1423			}
1424
1425			if ( $postrow = $db->sql_fetchrow($result) )
1426			{
1427				if ( $userdata['user_id'] != $postrow['user_id'] )
1428				{
1429					message_die(GENERAL_MESSAGE, $lang['Edit_own_posts']);
1430				}
1431
1432				$user_sig = ( $postrow['user_sig'] != '' && $board_config['allow_sig'] ) ? $postrow['user_sig'] : '';
1433			}
1434		}
1435	}
1436	else
1437	{
1438		if ( !$privmsg_id && ( $mode == 'reply' || $mode == 'edit' || $mode == 'quote' ) )
1439		{
1440			message_die(GENERAL_ERROR, $lang['No_post_id']);
1441		}
1442
1443		if ( !empty($HTTP_GET_VARS[POST_USERS_URL]) )
1444		{
1445			$user_id = intval($HTTP_GET_VARS[POST_USERS_URL]);
1446
1447			$sql = "SELECT username
1448				FROM " . USERS_TABLE . "
1449				WHERE user_id = $user_id
1450					AND user_id <> " . ANONYMOUS;
1451			if ( !($result = $db->sql_query($sql)) )
1452			{
1453				$error = TRUE;
1454				$error_msg = $lang['No_such_user'];
1455			}
1456
1457			if ( $row = $db->sql_fetchrow($result) )
1458			{
1459				$to_username = $row['username'];
1460			}
1461		}
1462		else if ( $mode == 'edit' )
1463		{
1464			$sql = "SELECT pm.*, pmt.privmsgs_bbcode_uid, pmt.privmsgs_text, u.username, u.user_id, u.user_sig
1465				FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS_TABLE . " u
1466				WHERE pm.privmsgs_id = $privmsg_id
1467					AND pmt.privmsgs_text_id = pm.privmsgs_id
1468					AND pm.privmsgs_from_userid = " . $userdata['user_id'] . "
1469					AND ( pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
1470						OR pm.privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )
1471					AND u.user_id = pm.privmsgs_to_userid";
1472			if ( !($result = $db->sql_query($sql)) )
1473			{
1474				message_die(GENERAL_ERROR, 'Could not obtain private message for editing', '', __LINE__, __FILE__, $sql);
1475			}
1476
1477			if ( !($privmsg = $db->sql_fetchrow($result)) )
1478			{
1479				redirect(append_sid("privmsg.$phpEx?folder=$folder", true));
1480			}
1481
1482			$privmsg_subject = $privmsg['privmsgs_subject'];
1483			$privmsg_message = $privmsg['privmsgs_text'];
1484			$privmsg_bbcode_uid = $privmsg['privmsgs_bbcode_uid'];
1485			$privmsg_bbcode_enabled = ($privmsg['privmsgs_enable_bbcode'] == 1);
1486
1487			if ( $privmsg_bbcode_enabled )
1488			{
1489				$privmsg_message = preg_replace("/\:(([a-z0-9]:)?)$privmsg_bbcode_uid/si", '', $privmsg_message);
1490			}
1491
1492			$privmsg_message = str_replace('<br />', "\n", $privmsg_message);
1493			// $privmsg_message = preg_replace('#</textarea>#si', '&lt;/textarea&gt;', $privmsg_message);
1494
1495			$user_sig = ( $board_config['allow_sig'] ) ? (($privmsg['privmsgs_type'] == PRIVMSGS_NEW_MAIL) ? $user_sig : $privmsg['user_sig']) : '';
1496
1497			$to_username = $privmsg['username'];
1498			$to_userid = $privmsg['user_id'];
1499
1500		}
1501		else if ( $mode == 'reply' || $mode == 'quote' )
1502		{
1503
1504			$sql = "SELECT pm.privmsgs_subject, pm.privmsgs_date, pmt.privmsgs_bbcode_uid, pmt.privmsgs_text, u.username, u.user_id
1505				FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS_TABLE . " u
1506				WHERE pm.privmsgs_id = $privmsg_id
1507					AND pmt.privmsgs_text_id = pm.privmsgs_id
1508					AND pm.privmsgs_to_userid = " . $userdata['user_id'] . "
1509					AND u.user_id = pm.privmsgs_from_userid";
1510			if ( !($result = $db->sql_query($sql)) )
1511			{
1512				message_die(GENERAL_ERROR, 'Could not obtain private message for editing', '', __LINE__, __FILE__, $sql);
1513			}
1514
1515			if ( !($privmsg = $db->sql_fetchrow($result)) )
1516			{
1517				redirect(append_sid("privmsg.$phpEx?folder=$folder", true));
1518			}
1519
1520			$orig_word = $replacement_word = array();
1521			obtain_word_list($orig_word, $replacement_word);
1522
1523			$privmsg_subject = ( ( !preg_match('/^Re:/', $privmsg['privmsgs_subject']) ) ? 'Re: ' : '' ) . $privmsg['privmsgs_subject'];
1524			$privmsg_subject = preg_replace($orig_word, $replacement_word, $privmsg_subject);
1525
1526			$to_username = $privmsg['username'];
1527			$to_userid = $privmsg['user_id'];
1528
1529			if ( $mode == 'quote' )
1530			{
1531				$privmsg_message = $privmsg['privmsgs_text'];
1532				$privmsg_bbcode_uid = $privmsg['privmsgs_bbcode_uid'];
1533
1534				$privmsg_message = preg_replace("/\:(([a-z0-9]:)?)$privmsg_bbcode_uid/si", '', $privmsg_message);
1535				$privmsg_message = str_replace('<br />', "\n", $privmsg_message);
1536				// $privmsg_message = preg_replace('#</textarea>#si', '&lt;/textarea&gt;', $privmsg_message);
1537				$privmsg_message = preg_replace($orig_word, $replacement_word, $privmsg_message);
1538
1539				$msg_date =  create_date($board_config['default_dateformat'], $privmsg['privmsgs_date'], $board_config['board_timezone']);
1540
1541				$privmsg_message = '[quote="' . $to_username . '"]' . $privmsg_message . '[/quote]';
1542
1543				$mode = 'reply';
1544			}
1545		}
1546		else
1547		{
1548			$privmsg_subject = $privmsg_message = $to_username = '';
1549		}
1550	}
1551
1552	//
1553	// Has admin prevented user from sending PM's?
1554	//
1555	if ( !$userdata['user_allow_pm'] && $mode != 'edit' )
1556	{
1557		$message = $lang['Cannot_send_privmsg'];
1558		message_die(GENERAL_MESSAGE, $message);
1559	}
1560
1561	//
1562	// Start output, first preview, then errors then post form
1563	//
1564	$page_title = $lang['Send_private_message'];
1565	include($phpbb_root_path . 'includes/page_header.'.$phpEx);
1566
1567	if ( $preview && !$error )
1568	{
1569		$orig_word = array();
1570		$replacement_word = array();
1571		obtain_word_list($orig_word, $replacement_word);
1572
1573		if ( $bbcode_on )
1574		{
1575			$bbcode_uid = make_bbcode_uid();
1576		}
1577
1578		$preview_message = stripslashes(prepare_message($privmsg_message, $html_on, $bbcode_on, $smilies_on, $bbcode_uid));
1579		$privmsg_message = stripslashes(preg_replace($html_entities_match, $html_entities_replace, $privmsg_message));
1580
1581		//
1582		// Finalise processing as per viewtopic
1583		//
1584		if ( !$html_on || !$board_config['allow_html'] || !$userdata['user_allowhtml'] )
1585		{
1586			if ( $user_sig != '' )
1587			{
1588				$user_sig = preg_replace('#(<)([\/]?.*?)(>)#is', "&lt;\\2&gt;", $user_sig);
1589			}
1590		}
1591
1592		if ( $attach_sig && $user_sig != '' && $userdata['user_sig_bbcode_uid'] )
1593		{
1594			$user_sig = bbencode_second_pass($user_sig, $userdata['user_sig_bbcode_uid']);
1595		}
1596
1597		if ( $bbcode_on )
1598		{
1599			$preview_message = bbencode_second_pass($preview_message, $bbcode_uid);
1600		}
1601
1602		if ( $attach_sig && $user_sig != '' )
1603		{
1604			$preview_message = $preview_message . '<br /><br />_________________<br />' . $user_sig;
1605		}
1606
1607		if ( count($orig_word) )
1608		{
1609			$preview_subject = preg_replace($orig_word, $replacement_word, $privmsg_subject);
1610			$preview_message = preg_replace($orig_word, $replacement_word, $preview_message);
1611		}
1612		else
1613		{
1614			$preview_subject = $privmsg_subject;
1615		}
1616
1617		if ( $smilies_on )
1618		{
1619			$preview_message = smilies_pass($preview_message);
1620		}
1621
1622		$preview_message = make_clickable($preview_message);
1623		$preview_message = str_replace("\n", '<br />', $preview_message);
1624
1625		$s_hidden_fields = '<input type="hidden" name="folder" value="' . $folder . '" />';
1626		$s_hidden_fields .= '<input type="hidden" name="mode" value="' . $mode . '" />';
1627
1628		if ( isset($privmsg_id) )
1629		{
1630			$s_hidden_fields .= '<input type="hidden" name="' . POST_POST_URL . '" value="' . $privmsg_id . '" />';
1631		}
1632
1633		$template->set_filenames(array(
1634			"preview" => 'privmsgs_preview.tpl')
1635		);
1636
1637		$template->assign_vars(array(
1638			'TOPIC_TITLE' => $preview_subject,
1639			'POST_SUBJECT' => $preview_subject,
1640			'MESSAGE_TO' => $to_username,
1641			'MESSAGE_FROM' => $userdata['username'],
1642			'POST_DATE' => create_date($board_config['default_dateformat'], time(), $board_config['board_timezone']),
1643			'MESSAGE' => $preview_message,
1644
1645			'S_HIDDEN_FIELDS' => $s_hidden_fields,
1646
1647			'L_SUBJECT' => $lang['Subject'],
1648			'L_DATE' => $lang['Date'],
1649			'L_FROM' => $lang['From'],
1650			'L_TO' => $lang['To'],
1651			'L_PREVIEW' => $lang['Preview'],
1652			'L_POSTED' => $lang['Posted'])
1653		);
1654
1655		$template->assign_var_from_handle('POST_PREVIEW_BOX', 'preview');
1656	}
1657
1658	//
1659	// Start error handling
1660	//
1661	if ($error)
1662	{
1663		$privmsg_message = htmlspecialchars($privmsg_message);
1664		$template->set_filenames(array(
1665			'reg_header' => 'error_body.tpl')
1666		);
1667		$template->assign_vars(array(
1668			'ERROR_MESSAGE' => $error_msg)
1669		);
1670		$template->assign_var_from_handle('ERROR_BOX', 'reg_header');
1671	}
1672
1673	//
1674	// Load templates
1675	//
1676	$template->set_filenames(array(
1677		'body' => 'posting_body.tpl')
1678	);
1679	make_jumpbox('viewforum.'.$phpEx);
1680
1681	//
1682	// Enable extensions in posting_body
1683	//
1684	$template->assign_block_vars('switch_privmsg', array());
1685
1686	//
1687	// HTML toggle selection
1688	//
1689	if ( $board_config['allow_html'] )
1690	{
1691		$html_status = $lang['HTML_is_ON'];
1692		$template->assign_block_vars('switch_html_checkbox', array());
1693	}
1694	else
1695	{
1696		$html_status = $lang['HTML_is_OFF'];
1697	}
1698
1699	//
1700	// BBCode toggle selection
1701	//
1702	if ( $board_config['allow_bbcode'] )
1703	{
1704		$bbcode_status = $lang['BBCode_is_ON'];
1705		$template->assign_block_vars('switch_bbcode_checkbox', array());
1706	}
1707	else
1708	{
1709		$bbcode_status = $lang['BBCode_is_OFF'];
1710	}
1711
1712	//
1713	// Smilies toggle selection
1714	//
1715	if ( $board_config['allow_smilies'] )
1716	{
1717		$smilies_status = $lang['Smilies_are_ON'];
1718		$template->assign_block_vars('switch_smilies_checkbox', array());
1719	}
1720	else
1721	{
1722		$smilies_status = $lang['Smilies_are_OFF'];
1723	}
1724
1725	//
1726	// Signature toggle selection - only show if
1727	// the user has a signature
1728	//
1729	if ( $user_sig != '' )
1730	{
1731		$template->assign_block_vars('switch_signature_checkbox', array());
1732	}
1733
1734	if ( $mode == 'post' )
1735	{
1736		$post_a = $lang['Send_a_new_message'];
1737	}
1738	else if ( $mode == 'reply' )
1739	{
1740		$post_a = $lang['Send_a_reply'];
1741		$mode = 'post';
1742	}
1743	else if ( $mode == 'edit' )
1744	{
1745		$post_a = $lang['Edit_message'];
1746	}
1747
1748	$s_hidden_fields = '<input type="hidden" name="folder" value="' . $folder . '" />';
1749	$s_hidden_fields .= '<input type="hidden" name="mode" value="' . $mode . '" />';
1750	$s_hidden_fields .= '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" />';
1751	if ( $mode == 'edit' )
1752	{
1753		$s_hidden_fields .= '<input type="hidden" name="' . POST_POST_URL . '" value="' . $privmsg_id . '" />';
1754	}
1755
1756	//
1757	// Send smilies to template
1758	//
1759	generate_smilies('inline', PAGE_PRIVMSGS);
1760
1761	$template->assign_vars(array(
1762		'SUBJECT' => $privmsg_subject,
1763		'USERNAME' => $to_username,
1764		'MESSAGE' => $privmsg_message,
1765		'HTML_STATUS' => $html_status,
1766		'SMILIES_STATUS' => $smilies_status,
1767		'BBCODE_STATUS' => sprintf($bbcode_status, '<a href="' . append_sid("faq.$phpEx?mode=bbcode") . '" target="_phpbbcode">', '</a>'),
1768		'FORUM_NAME' => $lang['Private_Message'],
1769
1770		'BOX_NAME' => $l_box_name,
1771		'INBOX_IMG' => $inbox_img,
1772		'SENTBOX_IMG' => $sentbox_img,
1773		'OUTBOX_IMG' => $outbox_img,
1774		'SAVEBOX_IMG' => $savebox_img,
1775		'INBOX' => $inbox_url,
1776		'SENTBOX' => $sentbox_url,
1777		'OUTBOX' => $outbox_url,
1778		'SAVEBOX' => $savebox_url,
1779
1780		'L_SUBJECT' => $lang['Subject'],
1781		'L_MESSAGE_BODY' => $lang['Message_body'],
1782		'L_OPTIONS' => $lang['Options'],
1783		'L_SPELLCHECK' => $lang['Spellcheck'],
1784		'L_PREVIEW' => $lang['Preview'],
1785		'L_SUBMIT' => $lang['Submit'],
1786		'L_CANCEL' => $lang['Cancel'],
1787		'L_POST_A' => $post_a,
1788		'L_FIND_USERNAME' => $lang['Find_username'],
1789		'L_FIND' => $lang['Find'],
1790		'L_DISABLE_HTML' => $lang['Disable_HTML_pm'],
1791		'L_DISABLE_BBCODE' => $lang['Disable_BBCode_pm'],
1792		'L_DISABLE_SMILIES' => $lang['Disable_Smilies_pm'],
1793		'L_ATTACH_SIGNATURE' => $lang['Attach_signature'],
1794
1795		'L_BBCODE_B_HELP' => $lang['bbcode_b_help'],
1796		'L_BBCODE_I_HELP' => $lang['bbcode_i_help'],
1797		'L_BBCODE_U_HELP' => $lang['bbcode_u_help'],
1798		'L_BBCODE_Q_HELP' => $lang['bbcode_q_help'],
1799		'L_BBCODE_C_HELP' => $lang['bbcode_c_help'],
1800		'L_BBCODE_L_HELP' => $lang['bbcode_l_help'],
1801		'L_BBCODE_O_HELP' => $lang['bbcode_o_help'],
1802		'L_BBCODE_P_HELP' => $lang['bbcode_p_help'],
1803		'L_BBCODE_W_HELP' => $lang['bbcode_w_help'],
1804		'L_BBCODE_A_HELP' => $lang['bbcode_a_help'],
1805		'L_BBCODE_S_HELP' => $lang['bbcode_s_help'],
1806		'L_BBCODE_F_HELP' => $lang['bbcode_f_help'],
1807		'L_EMPTY_MESSAGE' => $lang['Empty_message'],
1808
1809		'L_FONT_COLOR' => $lang['Font_color'],
1810		'L_COLOR_DEFAULT' => $lang['color_default'],
1811		'L_COLOR_DARK_RED' => $lang['color_dark_red'],
1812		'L_COLOR_RED' => $lang['color_red'],
1813		'L_COLOR_ORANGE' => $lang['color_orange'],
1814		'L_COLOR_BROWN' => $lang['color_brown'],
1815		'L_COLOR_YELLOW' => $lang['color_yellow'],
1816		'L_COLOR_GREEN' => $lang['color_green'],
1817		'L_COLOR_OLIVE' => $lang['color_olive'],
1818		'L_COLOR_CYAN' => $lang['color_cyan'],
1819		'L_COLOR_BLUE' => $lang['color_blue'],
1820		'L_COLOR_DARK_BLUE' => $lang['color_dark_blue'],
1821		'L_COLOR_INDIGO' => $lang['color_indigo'],
1822		'L_COLOR_VIOLET' => $lang['color_violet'],
1823		'L_COLOR_WHITE' => $lang['color_white'],
1824		'L_COLOR_BLACK' => $lang['color_black'],
1825
1826		'L_FONT_SIZE' => $lang['Font_size'],
1827		'L_FONT_TINY' => $lang['font_tiny'],
1828		'L_FONT_SMALL' => $lang['font_small'],
1829		'L_FONT_NORMAL' => $lang['font_normal'],
1830		'L_FONT_LARGE' => $lang['font_large'],
1831		'L_FONT_HUGE' => $lang['font_huge'],
1832
1833		'L_BBCODE_CLOSE_TAGS' => $lang['Close_Tags'],
1834		'L_STYLES_TIP' => $lang['Styles_tip'],
1835
1836		'S_HTML_CHECKED' => ( !$html_on ) ? ' checked="checked"' : '',
1837		'S_BBCODE_CHECKED' => ( !$bbcode_on ) ? ' checked="checked"' : '',
1838		'S_SMILIES_CHECKED' => ( !$smilies_on ) ? ' checked="checked"' : '',
1839		'S_SIGNATURE_CHECKED' => ( $attach_sig ) ? ' checked="checked"' : '',
1840		'S_HIDDEN_FORM_FIELDS' => $s_hidden_fields,
1841		'S_POST_ACTION' => append_sid("privmsg.$phpEx"),
1842
1843		'U_SEARCH_USER' => append_sid("search.$phpEx?mode=searchuser"),
1844		'U_VIEW_FORUM' => append_sid("privmsg.$phpEx"))
1845	);
1846
1847	$template->pparse('body');
1848
1849	include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
1850}
1851
1852//
1853// Default page
1854//
1855if ( !$userdata['session_logged_in'] )
1856{
1857	redirect(append_sid("login.$phpEx?redirect=privmsg.$phpEx&folder=inbox", true));
1858}
1859
1860//
1861// Update unread status
1862//
1863$sql = "UPDATE " . USERS_TABLE . "
1864	SET user_unread_privmsg = user_unread_privmsg + user_new_privmsg, user_new_privmsg = 0, user_last_privmsg = " . $userdata['session_start'] . "
1865	WHERE user_id = " . $userdata['user_id'];
1866if ( !$db->sql_query($sql) )
1867{
1868	message_die(GENERAL_ERROR, 'Could not update private message new/read status for user', '', __LINE__, __FILE__, $sql);
1869}
1870
1871$sql = "UPDATE " . PRIVMSGS_TABLE . "
1872	SET privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . "
1873	WHERE privmsgs_type = " . PRIVMSGS_NEW_MAIL . "
1874		AND privmsgs_to_userid = " . $userdata['user_id'];
1875if ( !$db->sql_query($sql) )
1876{
1877	message_die(GENERAL_ERROR, 'Could not update private message new/read status (2) for user', '', __LINE__, __FILE__, $sql);
1878}
1879
1880//
1881// Reset PM counters
1882//
1883$userdata['user_new_privmsg'] = 0;
1884$userdata['user_unread_privmsg'] = ( $userdata['user_new_privmsg'] + $userdata['user_unread_privmsg'] );
1885
1886//
1887// Generate page
1888//
1889$page_title = $lang['Private_Messaging'];
1890include($phpbb_root_path . 'includes/page_header.'.$phpEx);
1891
1892//
1893// Load templates
1894//
1895$template->set_filenames(array(
1896	'body' => 'privmsgs_body.tpl')
1897);
1898make_jumpbox('viewforum.'.$phpEx);
1899
1900$orig_word = array();
1901$replacement_word = array();
1902obtain_word_list($orig_word, $replacement_word);
1903
1904//
1905// New message
1906//
1907$post_new_mesg_url = '<a href="' . append_sid("privmsg.$phpEx?mode=post") . '"><img src="' . $images['post_new'] . '" alt="' . $lang['Send_a_new_message'] . '" border="0" /></a>';
1908
1909//
1910// General SQL to obtain messages
1911//
1912$sql_tot = "SELECT COUNT(privmsgs_id) AS total
1913	FROM " . PRIVMSGS_TABLE . " ";
1914$sql = "SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username
1915	FROM " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " u ";
1916switch( $folder )
1917{
1918	case 'inbox':
1919		$sql_tot .= "WHERE privmsgs_to_userid = " . $userdata['user_id'] . "
1920			AND ( privmsgs_type =  " . PRIVMSGS_NEW_MAIL . "
1921				OR privmsgs_type = " . PRIVMSGS_READ_MAIL . "
1922				OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
1923
1924		$sql .= "WHERE pm.privmsgs_to_userid = " . $userdata['user_id'] . "
1925			AND u.user_id = pm.privmsgs_from_userid
1926			AND ( pm.privmsgs_type =  " . PRIVMSGS_NEW_MAIL . "
1927				OR pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . "
1928				OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
1929		break;
1930
1931	case 'outbox':
1932		$sql_tot .= "WHERE privmsgs_from_userid = " . $userdata['user_id'] . "
1933			AND ( privmsgs_type =  " . PRIVMSGS_NEW_MAIL . "
1934				OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
1935
1936		$sql .= "WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
1937			AND u.user_id = pm.privmsgs_to_userid
1938			AND ( pm.privmsgs_type =  " . PRIVMSGS_NEW_MAIL . "
1939				OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " )";
1940		break;
1941
1942	case 'sentbox':
1943		$sql_tot .= "WHERE privmsgs_from_userid = " . $userdata['user_id'] . "
1944			AND privmsgs_type =  " . PRIVMSGS_SENT_MAIL;
1945
1946		$sql .= "WHERE pm.privmsgs_from_userid = " . $userdata['user_id'] . "
1947			AND u.user_id = pm.privmsgs_to_userid
1948			AND pm.privmsgs_type =  " . PRIVMSGS_SENT_MAIL;
1949		break;
1950
1951	case 'savebox':
1952		$sql_tot .= "WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . "
1953				AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
1954			OR ( privmsgs_from_userid = " . $userdata['user_id'] . "
1955				AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )";
1956
1957		$sql .= "WHERE u.user_id = pm.privmsgs_from_userid
1958			AND ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . "
1959				AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " )
1960			OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . "
1961				AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) )";
1962		break;
1963
1964	default:
1965		message_die(GENERAL_MESSAGE, $lang['No_such_folder']);
1966		break;
1967}
1968
1969//
1970// Show messages over previous x days/months
1971//
1972if ( $submit_msgdays && ( !empty($HTTP_POST_VARS['msgdays']) || !empty($HTTP_GET_VARS['msgdays']) ) )
1973{
1974	$msg_days = ( !empty($HTTP_POST_VARS['msgdays']) ) ? intval($HTTP_POST_VARS['msgdays']) : intval($HTTP_GET_VARS['msgdays']);
1975	$min_msg_time = time() - ($msg_days * 86400);
1976
1977	$limit_msg_time_total = " AND privmsgs_date > $min_msg_time";
1978	$limit_msg_time = " AND pm.privmsgs_date > $min_msg_time ";
1979
1980	if ( !empty($HTTP_POST_VARS['msgdays']) )
1981	{
1982		$start = 0;
1983	}
1984}
1985else
1986{
1987	$limit_msg_time = $limit_msg_time_total = '';
1988	$msg_days = 0;
1989}
1990
1991$sql .= $limit_msg_time . " ORDER BY pm.privmsgs_date DESC LIMIT $start, " . $board_config['topics_per_page'];
1992$sql_all_tot = $sql_tot;
1993$sql_tot .= $limit_msg_time_total;
1994
1995//
1996// Get messages
1997//
1998if ( !($result = $db->sql_query($sql_tot)) )
1999{
2000	message_die(GENERAL_ERROR, 'Could not query private message information', '', __LINE__, __FILE__, $sql_tot);
2001}
2002
2003$pm_total = ( $row = $db->sql_fetchrow($result) ) ? $row['total'] : 0;
2004
2005if ( !($result = $db->sql_query($sql_all_tot)) )
2006{
2007	message_die(GENERAL_ERROR, 'Could not query private message information', '', __LINE__, __FILE__, $sql_tot);
2008}
2009
2010$pm_all_total = ( $row = $db->sql_fetchrow($result) ) ? $row['total'] : 0;
2011
2012//
2013// Build select box
2014//
2015$previous_days = array(0, 1, 7, 14, 30, 90, 180, 364);
2016$previous_days_text = array($lang['All_Posts'], $lang['1_Day'], $lang['7_Days'], $lang['2_Weeks'], $lang['1_Month'], $lang['3_Months'], $lang['6_Months'], $lang['1_Year']);
2017
2018$select_msg_days = '';
2019for($i = 0; $i < count($previous_days); $i++)
2020{
2021	$selected = ( $msg_days == $previous_days[$i] ) ? ' selected="selected"' : '';
2022	$select_msg_days .= '<option value="' . $previous_days[$i] . '"' . $selected . '>' . $previous_days_text[$i] . '</option>';
2023}
2024
2025//
2026// Define correct icons
2027//
2028switch ( $folder )
2029{
2030	case 'inbox':
2031		$l_box_name = $lang['Inbox'];
2032		break;
2033	case 'outbox':
2034		$l_box_name = $lang['Outbox'];
2035		break;
2036	case 'savebox':
2037		$l_box_name = $lang['Savebox'];
2038		break;
2039	case 'sentbox':
2040		$l_box_name = $lang['Sentbox'];
2041		break;
2042}
2043$post_pm = append_sid("privmsg.$phpEx?mode=post");
2044$post_pm_img = '<a href="' . $post_pm . '"><img src="' . $images['pm_postmsg'] . '" alt="' . $lang['Post_new_pm'] . '" border="0" /></a>';
2045$post_pm = '<a href="' . $post_pm . '">' . $lang['Post_new_pm'] . '</a>';
2046
2047//
2048// Output data for inbox status
2049//
2050if ( $folder != 'outbox' )
2051{
2052	$inbox_limit_pct = ( $board_config['max_' . $folder . '_privmsgs'] > 0 ) ? round(( $pm_all_total / $board_config['max_' . $folder . '_privmsgs'] ) * 100) : 100;
2053	$inbox_limit_img_length = ( $board_config['max_' . $folder . '_privmsgs'] > 0 ) ? round(( $pm_all_total / $board_config['max_' . $folder . '_privmsgs'] ) * $board_config['privmsg_graphic_length']) : $board_config['privmsg_graphic_length'];
2054	$inbox_limit_remain = ( $board_config['max_' . $folder . '_privmsgs'] > 0 ) ? $board_config['max_' . $folder . '_privmsgs'] - $pm_all_total : 0;
2055
2056	$template->assign_block_vars('switch_box_size_notice', array());
2057
2058	switch( $folder )
2059	{
2060		case 'inbox':
2061			$l_box_size_status = sprintf($lang['Inbox_size'], $inbox_limit_pct);
2062			break;
2063		case 'sentbox':
2064			$l_box_size_status = sprintf($lang['Sentbox_size'], $inbox_limit_pct);
2065			break;
2066		case 'savebox':
2067			$l_box_size_status = sprintf($lang['Savebox_size'], $inbox_limit_pct);
2068			break;
2069		default:
2070			$l_box_size_status = '';
2071			break;
2072	}
2073}
2074else
2075{
2076	$inbox_limit_img_length = $inbox_limit_pct = $l_box_size_status = '';
2077}
2078
2079//
2080// Dump vars to template
2081//
2082$template->assign_vars(array(
2083	'BOX_NAME' => $l_box_name,
2084	'INBOX_IMG' => $inbox_img,
2085	'SENTBOX_IMG' => $sentbox_img,
2086	'OUTBOX_IMG' => $outbox_img,
2087	'SAVEBOX_IMG' => $savebox_img,
2088	'INBOX' => $inbox_url,
2089	'SENTBOX' => $sentbox_url,
2090	'OUTBOX' => $outbox_url,
2091	'SAVEBOX' => $savebox_url,
2092
2093	'POST_PM_IMG' => $post_pm_img,
2094	'POST_PM' => $post_pm,
2095
2096	'INBOX_LIMIT_IMG_WIDTH' => $inbox_limit_img_length,
2097	'INBOX_LIMIT_PERCENT' => $inbox_limit_pct,
2098
2099	'BOX_SIZE_STATUS' => $l_box_size_status,
2100
2101	'L_INBOX' => $lang['Inbox'],
2102	'L_OUTBOX' => $lang['Outbox'],
2103	'L_SENTBOX' => $lang['Sent'],
2104	'L_SAVEBOX' => $lang['Saved'],
2105	'L_MARK' => $lang['Mark'],
2106	'L_FLAG' => $lang['Flag'],
2107	'L_SUBJECT' => $lang['Subject'],
2108	'L_DATE' => $lang['Date'],
2109	'L_DISPLAY_MESSAGES' => $lang['Display_messages'],
2110	'L_FROM_OR_TO' => ( $folder == 'inbox' || $folder == 'savebox' ) ? $lang['From'] : $lang['To'],
2111	'L_MARK_ALL' => $lang['Mark_all'],
2112	'L_UNMARK_ALL' => $lang['Unmark_all'],
2113	'L_DELETE_MARKED' => $lang['Delete_marked'],
2114	'L_DELETE_ALL' => $lang['Delete_all'],
2115	'L_SAVE_MARKED' => $lang['Save_marked'],
2116
2117	'S_PRIVMSGS_ACTION' => append_sid("privmsg.$phpEx?folder=$folder"),
2118	'S_HIDDEN_FIELDS' => '',
2119	'S_POST_NEW_MSG' => $post_new_mesg_url,
2120	'S_SELECT_MSG_DAYS' => $select_msg_days,
2121
2122	'U_POST_NEW_TOPIC' => append_sid("privmsg.$phpEx?mode=post"))
2123);
2124
2125//
2126// Okay, let's build the correct folder
2127//
2128if ( !($result = $db->sql_query($sql)) )
2129{
2130	message_die(GENERAL_ERROR, 'Could not query private messages', '', __LINE__, __FILE__, $sql);
2131}
2132
2133if ( $row = $db->sql_fetchrow($result) )
2134{
2135	$i = 0;
2136	do
2137	{
2138		$privmsg_id = $row['privmsgs_id'];
2139
2140		$flag = $row['privmsgs_type'];
2141
2142		$icon_flag = ( $flag == PRIVMSGS_NEW_MAIL || $flag == PRIVMSGS_UNREAD_MAIL ) ? $images['pm_unreadmsg'] : $images['pm_readmsg'];
2143		$icon_flag_alt = ( $flag == PRIVMSGS_NEW_MAIL || $flag == PRIVMSGS_UNREAD_MAIL ) ? $lang['Unread_message'] : $lang['Read_message'];
2144
2145		$msg_userid = $row['user_id'];
2146		$msg_username = $row['username'];
2147
2148		$u_from_user_profile = append_sid("profile.$phpEx?mode=viewprofile&amp;" . POST_USERS_URL . "=$msg_userid");
2149
2150		$msg_subject = $row['privmsgs_subject'];
2151
2152		if ( count($orig_word) )
2153		{
2154			$msg_subject = preg_replace($orig_word, $replacement_word, $msg_subject);
2155		}
2156
2157		$u_subject = append_sid("privmsg.$phpEx?folder=$folder&amp;mode=read&amp;" . POST_POST_URL . "=$privmsg_id");
2158
2159		$msg_date = create_date($board_config['default_dateformat'], $row['privmsgs_date'], $board_config['board_timezone']);
2160
2161		if ( $flag == PRIVMSGS_NEW_MAIL && $folder == 'inbox' )
2162		{
2163			$msg_subject = '<b>' . $msg_subject . '</b>';
2164			$msg_date = '<b>' . $msg_date . '</b>';
2165			$msg_username = '<b>' . $msg_username . '</b>';
2166		}
2167
2168		$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
2169		$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
2170		$i++;
2171
2172		$template->assign_block_vars('listrow', array(
2173			'ROW_COLOR' => '#' . $row_color,
2174			'ROW_CLASS' => $row_class,
2175			'FROM' => $msg_username,
2176			'SUBJECT' => $msg_subject,
2177			'DATE' => $msg_date,
2178			'PRIVMSG_FOLDER_IMG' => $icon_flag,
2179
2180			'L_PRIVMSG_FOLDER_ALT' => $icon_flag_alt,
2181
2182			'S_MARK_ID' => $privmsg_id,
2183
2184			'U_READ' => $u_subject,
2185			'U_FROM_USER_PROFILE' => $u_from_user_profile)
2186		);
2187	}
2188	while( $row = $db->sql_fetchrow($result) );
2189
2190	$template->assign_vars(array(
2191		'PAGINATION' => generate_pagination("privmsg.$phpEx?folder=$folder", $pm_total, $board_config['topics_per_page'], $start),
2192		'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $pm_total / $board_config['topics_per_page'] )),
2193
2194		'L_GOTO_PAGE' => $lang['Goto_page'])
2195	);
2196
2197}
2198else
2199{
2200	$template->assign_vars(array(
2201		'L_NO_MESSAGES' => $lang['No_messages_folder'])
2202	);
2203
2204	$template->assign_block_vars("switch_no_messages", array() );
2205}
2206
2207$template->pparse('body');
2208
2209include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
2210
2211?>