diff options
| author | Paul S. Owen <psotfx@users.sourceforge.net> | 2001-10-01 23:22:18 +0000 |
|---|---|---|
| committer | Paul S. Owen <psotfx@users.sourceforge.net> | 2001-10-01 23:22:18 +0000 |
| commit | a711e6d677257b64574fb5c377dfbde7127da3c3 (patch) | |
| tree | 7f0af4764382a88e96fa9fdb35794932de104e46 /phpBB/privmsg.php | |
| parent | 09dc77b5813c43d5754d346b6a024d9650ae6a0b (diff) | |
| download | forums-a711e6d677257b64574fb5c377dfbde7127da3c3.tar forums-a711e6d677257b64574fb5c377dfbde7127da3c3.tar.gz forums-a711e6d677257b64574fb5c377dfbde7127da3c3.tar.bz2 forums-a711e6d677257b64574fb5c377dfbde7127da3c3.tar.xz forums-a711e6d677257b64574fb5c377dfbde7127da3c3.zip | |
Changes related to private messaging + some bug fixes
git-svn-id: file:///svn/phpbb/trunk@1111 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/privmsg.php')
| -rw-r--r-- | phpBB/privmsg.php | 1869 |
1 files changed, 1202 insertions, 667 deletions
diff --git a/phpBB/privmsg.php b/phpBB/privmsg.php index 038df5496c..88da77606b 100644 --- a/phpBB/privmsg.php +++ b/phpBB/privmsg.php @@ -26,8 +26,37 @@ include($phpbb_root_path . 'common.'.$phpEx); include($phpbb_root_path . 'includes/post.'.$phpEx); include($phpbb_root_path . 'includes/bbcode.'.$phpEx); -$pagetype = "privmsgs"; -$page_title = "Private Messageing"; +// +// Var definitions +// +$html_entities_match = array("#<#", "#>#", "#& #", "#\"#"); +$html_entities_replace = array("<", ">", "& ", """); + +// +// Parameters +// +$submit = ( isset($HTTP_POST_VARS['submit']) ) ? TRUE : 0; +$submit_search = ( isset($HTTP_POST_VARS['usersubmit']) ) ? TRUE : 0; +$submit_msgdays = ( isset($HTTP_POST_VARS['submit_msgdays']) ) ? TRUE : 0; +$cancel = ( isset($HTTP_POST_VARS['cancel']) ) ? TRUE : 0; +$preview = ( isset($HTTP_POST_VARS['preview']) ) ? TRUE : 0; +$confirm = ( isset($HTTP_POST_VARS['confirm']) ) ? TRUE : 0; +$delete = ( isset($HTTP_POST_VARS['delete']) ) ? TRUE : 0; +$delete_all = ( isset($HTTP_POST_VARS['deleteall']) ) ? TRUE : 0; + +$refresh = $preview || $submit_search; + +$mark_list = ( !empty($HTTP_POST_VARS['mark']) ) ? $HTTP_POST_VARS['mark'] : 0; + +$folder = ( !empty($HTTP_POST_VARS['folder']) ) ? $HTTP_POST_VARS['folder'] : ( (!empty($HTTP_GET_VARS['folder'])) ? $HTTP_GET_VARS['folder'] : "inbox" ); + +// +// Cancel +// +if( $cancel ) +{ + header("Location: " . append_sid("privmsg.$phpEx?folder=$folder")); +} // // Start session management @@ -38,26 +67,49 @@ init_userprefs($userdata); // End session management // - -$folder = (!empty($HTTP_POST_VARS['folder'])) ? $HTTP_POST_VARS['folder'] : ( (!empty($HTTP_GET_VARS['folder'])) ? $HTTP_GET_VARS['folder'] : "inbox" ); -if(empty($HTTP_POST_VARS['cancel'])) +if( !empty($HTTP_POST_VARS['mode']) || !empty($HTTP_GET_VARS['mode']) ) { - $mode = (!empty($HTTP_POST_VARS['mode'])) ? $HTTP_POST_VARS['mode'] : ( (!empty($HTTP_GET_VARS['mode'])) ? $HTTP_GET_VARS['mode'] : "" ); + $mode = ( !empty($HTTP_POST_VARS['mode']) ) ? $HTTP_POST_VARS['mode'] : $HTTP_GET_VARS['mode']; } else { $mode = ""; } -$start = (!empty($HTTP_GET_VARS['start'])) ? $HTTP_GET_VARS['start'] : 0; + +$start = ( !empty($HTTP_GET_VARS['start']) ) ? $HTTP_GET_VARS['start'] : 0; + +if( isset($HTTP_POST_VARS[POST_POST_URL]) || isset($HTTP_GET_VARS[POST_POST_URL]) ) +{ + $privmsg_id = ( isset($HTTP_POST_VARS[POST_POST_URL]) ) ? $HTTP_POST_VARS[POST_POST_URL] : $HTTP_GET_VARS[POST_POST_URL]; +} +else +{ + $privmsg_id = ""; +} $error = FALSE; // +// Define the box image links +// +$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'] . '" />'; +$inbox_url = ($folder != "inbox" || $mode != "") ? '<a href="' . append_sid("privmsg.$phpEx?folder=inbox") . '">' . $lang['Inbox'] . '</a>' : $lang['Inbox']; + +$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'] . '" />'; +$outbox_url = ($folder != "outbox" || $mode != "") ? '<a href="' . append_sid("privmsg.$phpEx?folder=outbox") . '">' . $lang['Outbox'] . '</a>' : $lang['Outbox']; + +$sentbox_img = ($folder != "sentbox" || $mode != "") ? '<a href="' . append_sid("privmsg.$phpEx?folder=sentbox") . '"><img src="' . $images['pm_sentbox'] . '" border="0" alt="' . $lang['Sent'] . '" /></a>' : '<img src="' . $images['pm_sentbox'] . '" border="0" alt="' . $lang['Sent'] . '" />'; +$sentbox_url = ($folder != "sentbox" || $mode != "") ? '<a href="' . append_sid("privmsg.$phpEx?folder=sentbox") . '">' . $lang['Sent'] . '</a>' : $lang['Sent']; + +$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['Saved'] . '" />'; +$savebox_url = ($folder != "savebox" || $mode != "") ? '<a href="' . append_sid("privmsg.$phpEx?folder=savebox") . '">' . $lang['Saved'] . '</a>' : $lang['Saved']; + +// ---------- // Start main // -if($mode == "read") +if( $mode == "read" ) { - if(!empty($HTTP_GET_VARS[POST_POST_URL])) + if( !empty($HTTP_GET_VARS[POST_POST_URL]) ) { $privmsgs_id = $HTTP_GET_VARS[POST_POST_URL]; } @@ -66,36 +118,48 @@ if($mode == "read") message_die(GENERAL_ERROR, $lang['No_post_id']); } - if(!$userdata['session_logged_in']) + if( !$userdata['session_logged_in'] ) { header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=$folder&mode=$mode&" . POST_POST_URL . "=$privmsgs_id")); } - if(!empty($HTTP_GET_VARS['folder'])) + if( $folder ) { + // + // SQL to pull appropriate message, prevents nosey people + // reading other peoples messages ... hopefully! + // if($folder == "inbox") { - $user_to_sql = "AND pm.privmsgs_to_userid = " . $userdata['user_id']; - $user_from_sql = "AND u.user_id = pm.privmsgs_from_userid"; - $sql_type = "AND (pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . " )"; + $l_box_name = $lang['Inbox']; + + $pm_sql_user = "AND pm.privmsgs_to_userid = " . $userdata['user_id'] . " + AND ( pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . " + OR pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . " )"; } else if($folder == "outbox") { - $user_to_sql = "AND u.user_id = pm.privmsgs_to_userid"; - $user_from_sql = "AND pm.privmsgs_from_userid = " . $userdata['user_id']; - $sql_type = "AND pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL; + $l_box_name = $lang['Outbox']; + + $pm_sql_user = "AND pm.privmsgs_from_userid = " . $userdata['user_id'] . " + AND pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL; } else if($folder == "sentbox") { - $user_to_sql = "AND u.user_id = pm.privmsgs_to_userid"; - $user_from_sql = "AND pm.privmsgs_from_userid = " . $userdata['user_id']; - $sql_type = "AND pm.privmsgs_type = " . PRIVMSGS_SENT_MAIL; + $l_box_name = $lang['Sentbox']; + + $pm_sql_user = "AND pm.privmsgs_from_userid = " . $userdata['user_id'] . " + AND pm.privmsgs_type = " . PRIVMSGS_SENT_MAIL; } else if($folder == "savebox") { - $user_to_sql = "AND ( (pm.privmsgs_to_userid = " . $userdata['user_id'] . " AND u.user_id = pm.privmsgs_from_userid) "; - $user_from_sql = "OR (u.user_id = pm.privmsgs_to_userid AND pm.privmsgs_from_userid = " . $userdata['user_id'] . ") )"; - $sql_type = "AND pm.privmsgs_type = " . PRIVMSGS_SAVED_MAIL; + $l_box_name = $lang['Savebox']; + + $pm_sql_user .= "AND ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . " + AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) + OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . " + AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) + )"; } else { @@ -107,35 +171,77 @@ if($mode == "read") message_die(GENERAL_ERROR, $lang['No_folder']); } - $sql = "SELECT u.username, u.user_id, u.user_website, u.user_icq, u.user_aim, u.user_yim, u.user_msnm, u.user_viewemail, u.user_email, u.user_sig, u.user_avatar, pm.privmsgs_id, pm.privmsgs_type, pm.privmsgs_subject, pm.privmsgs_from_userid, pm.privmsgs_to_userid, pm.privmsgs_date, pm.privmsgs_ip, pm.privmsgs_bbcode_uid, pmt.privmsgs_text - FROM ".PRIVMSGS_TABLE." pm, " . PRIVMSGS_TEXT_TABLE . " pmt, ".USERS_TABLE." u + // + // Major query obtains the message ... + // + $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 + FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS_TABLE . " u, " . USERS_TABLE . " u2 WHERE pm.privmsgs_id = $privmsgs_id - AND pmt.privmsgs_text_id = pm.privmsgs_id - $user_to_sql - $user_from_sql - $sql_type"; - if(!$pm_status = $db->sql_query($sql)) + AND pmt.privmsgs_text_id = pm.privmsgs_id + $pm_sql_user + AND u.user_id = pm.privmsgs_from_userid + AND u2.user_id = pm.privmsgs_to_userid"; + if( !$pm_status = $db->sql_query($sql) ) { message_die(GENERAL_ERROR, "Could not query private message post information.", "", __LINE__, __FILE__, $sql); } - if(!$db->sql_numrows($pm_status)) + + // + // Did the query return any data? + // + if( !( $privmsg = $db->sql_fetchrow($pm_status) ) ) { header("Location: " . append_sid("privmsg.$phpEx?folder=$folder")); } - $privmsg = $db->sql_fetchrow($pm_status); + $privmsg_id = $privmsg['privmsgs_id']; - if($privmsg['privmsgs_type'] == PRIVMSGS_NEW_MAIL && $folder == "inbox") + // + // Is this a new message in the inbox? If it is then save + // a copy in the posters sent box + // + if( $privmsg['privmsgs_type'] == PRIVMSGS_NEW_MAIL && $folder == "inbox" ) { $sql = "UPDATE " . PRIVMSGS_TABLE . " SET privmsgs_type = " . PRIVMSGS_READ_MAIL . " WHERE privmsgs_id = " . $privmsg['privmsgs_id']; - if(!$pm_upd_status = $db->sql_query($sql)) + if( !$pm_upd_status = $db->sql_query($sql) ) { message_die(GENERAL_ERROR, "Could not update private message read status.", "", __LINE__, __FILE__, $sql); } // + // Check to see if the poster has a 'full' sent box + // + $sql = "SELECT COUNT(privmsgs_id) AS sent_items, MIN(privmsgs_date) AS oldest_post_time + FROM " . PRIVMSGS_TABLE . " + WHERE privmsgs_type = " . PRIVMSGS_SENT_MAIL . " + AND privmsgs_from_userid = " . $privmsg['privmsgs_from_userid']; + if( !$result = $db->sql_query($sql) ) + { + message_die(GENERAL_ERROR, "Could not obtain sent message info for sendee.", "", __LINE__, __FILE__, $sql); + } + + $sql_priority = (SQL_LAYER == "mysql") ? "LOW_PRIORITY" : ""; + + if( $db->sql_numrows($result) ) + { + $sent_info = $db->sql_fetchrow($result); + + if( $sent_info['sent_items'] > $board_config['max_sentbox_privmsgs'] ) + { + $sql = "DELETE $sql_priority FROM " . PRIVMSGS_TABLE . " + WHERE privmsgs_type = " . PRIVMSGS_SENT_MAIL . " + AND privmsgs_date <= " . $sent_info['oldest_post_time'] . " + AND privmsgs_from_userid = " . $privmsg['privmsgs_from_userid']; + if( !$result = $db->sql_query($sql) ) + { + message_die(GENERAL_ERROR, "Could not delete oldest privmsgs.", "", __LINE__, __FILE__, $sql); + } + } + } + + // // This makes a copy of the post and stores // it as a SENT message from the sendee. Perhaps // not the most DB friendly way but a lot easier @@ -143,9 +249,9 @@ if($mode == "read") // set limits on numbers of storable posts for // users ... hopefully! // - $sql = "INSERT INTO " . PRIVMSGS_TABLE . " (privmsgs_type, privmsgs_subject, privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip, privmsgs_bbcode_uid) - VALUES (" . PRIVMSGS_SENT_MAIL . ", '" . $privmsg['privmsgs_subject'] . "', " . $privmsg['privmsgs_from_userid'] . ", " . $privmsg['privmsgs_to_userid'] . ", " . $privmsg['privmsgs_date'] . ", '" . $privmsg['privmsgs_ip'] . "', '" . $privmsg['privmsgs_bbcode_uid'] . "')"; - if(!$pm_sent_status = $db->sql_query($sql)) + $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) + VALUES (" . PRIVMSGS_SENT_MAIL . ", '" . 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'] . ")"; + if( !$pm_sent_status = $db->sql_query($sql) ) { message_die(GENERAL_ERROR, "Could not insert private message sent info.", "", __LINE__, __FILE__, $sql); } @@ -153,8 +259,8 @@ if($mode == "read") { $privmsg_sent_id = $db->sql_nextid($pm_sent_status); - $sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_text) - VALUES ($privmsg_sent_id, '" . $privmsg['privmsgs_text'] . "')"; + $sql = "INSERT $sql_priority INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text) + VALUES ($privmsg_sent_id, '" . $privmsg['privmsgs_bbcode_uid'] . "', '" . addslashes($privmsg['privmsgs_text']) . "')"; if(!$pm_sent_text_status = $db->sql_query($sql)) { message_die(GENERAL_ERROR, "Could not insert private message sent text.<BR>$sql", "", __LINE__, __FILE__, $sql); @@ -163,22 +269,55 @@ if($mode == "read") } // - // These may well be better handled in the - // templates + // Pick a folder, any folder, so long as it's one + // below ... // - $inbox_url = "<img src=\"images/msg_inbox.gif\" border=\"0\"> <a href=\"" . append_sid("privmsg.$phpEx?folder=inbox") . "\"><b>" . $lang['Inbox'] . "</b></a>"; - - $sentbox_url = "<img src=\"images/msg_sentbox.gif\" border=\"0\"> <a href=\"" . append_sid("privmsg.$phpEx?folder=sentbox") . "\"><b>" . $lang['Sent'] . "</b></a>"; - - $outbox_url = "<img src=\"images/msg_outbox.gif\" border=\"0\"> <a href=\"" . append_sid("privmsg.$phpEx?folder=outbox") . "\"><b>" . $lang['Outbox'] . "</b></a>"; - - $savebox_url = "<img src=\"images/msg_savebox.gif\" border=\"0\"> <a href=\"" . append_sid("privmsg.$phpEx?folder=savebox") . "\"><b>" . $lang['Saved'] . "</b></a>"; - - $post_new_mesg_url = "<a href=\"privmsg.$phpEx?mode=post\"><img src=\"templates/PSO/images/post.gif\" border=\"1\"></a>"; - $post_reply_mesg_url = ($folder == "inbox") ? "<a href=\"" . append_sid("privmsg.$phpEx?mode=reply&" . POST_POST_URL . "=$privmsgs_id") . "\"><img src=\"templates/PSO/images/reply.gif\" border=\"1\"></a>" : ""; + if( $folder == "inbox" ) + { + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=reply&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_replymsg'] . "\" alt=\"" . $lang['Post_reply_pm'] . "\" border=\"0\"></a>"; + $quote_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=quote&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_quotemsg'] . "\" alt=\"" . $lang['Post_quote_pm'] . "\" border=\"0\"></a>"; + $edit_pm_img = ""; + $l_box_name = $lang['Inbox']; + } + else if( $folder == "outbox" ) + { + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = ""; + $quote_pm_img = ""; + $edit_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=edit&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_editmsg'] . "\" alt=\"" . $lang['Edit_pm'] . "\" border=\"0\"></a>"; + $l_box_name = $lang['Outbox']; + } + else if( $folder == "savebox" ) + { + if( $privmsg['privmsgs_type'] == PRIVMSGS_SAVED_IN_MAIL ) + { + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=reply&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_replymsg'] . "\" alt=\"" . $lang['Post_reply_pm'] . "\" border=\"0\"></a>"; + $quote_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=quote&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_quotemsg'] . "\" alt=\"" . $lang['Post_quote_pm'] . "\" border=\"0\"></a>"; + $edit_pm_img = ""; + } + else + { + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = ""; + $quote_pm_img = ""; + $edit_pm_img = ""; + } + $l_box_name = $lang['Saved']; + } + else if( $folder == "sentbox" ) + { + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = ""; + $quote_pm_img = ""; + $edit_pm_img = ""; + $l_box_name = $lang['Sent']; + } - $s_hidden_fields = "<input type=\"hidden\" name=\"mark[]\" value=\"$privmsgs_id\">"; + $s_hidden_fields = "<input type=\"hidden\" name=\"mark[]\" value=\"$privmsgs_id\" />"; + $page_title = $lang['Read_private_message']; include($phpbb_root_path . 'includes/page_header.'.$phpEx); // @@ -188,48 +327,82 @@ if($mode == "read") "body" => "privmsgs_read_body.tpl", "jumpbox" => "jumpbox.tpl") ); + $jumpbox = make_jumpbox(); $template->assign_vars(array( - "JUMPBOX_LIST" => $jumpbox, - "SELECT_NAME" => POST_FORUM_URL) + "L_GO" => $lang['Go'], + "L_JUMP_TO" => $lang['Jump_to'], + "L_SELECT_FORUM" => $lang['Select_forum'], + + "S_JUMPBOX_LIST" => $jumpbox, + "S_JUMPBOX_ACTION" => append_sid("viewforum.$phpEx")) ); $template->assign_var_from_handle("JUMPBOX", "jumpbox"); $template->assign_vars(array( - "INBOX" => $inbox_url, - "SENTBOX" => $sentbox_url, - "OUTBOX" => $outbox_url, - "SAVEBOX" => $savebox_url, - + "INBOX_IMG" => $inbox_img, + "SENTBOX_IMG" => $sentbox_img, + "OUTBOX_IMG" => $outbox_img, + "SAVEBOX_IMG" => $savebox_img, + "INBOX_LINK" => $inbox_url, + + "POST_PM_IMG" => $post_pm_img, + "REPLY_PM_IMG" => $reply_pm_img, + "EDIT_PM_IMG" => $edit_pm_img, + "QUOTE_PM_IMG" => $quote_pm_img, + + "SENTBOX_LINK" => $sentbox_url, + "OUTBOX_LINK" => $outbox_url, + "SAVEBOX_LINK" => $savebox_url, + + "BOX_NAME" => $l_box_name, + + "L_INBOX" => $lang['Inbox'], + "L_OUTBOX" => $lang['Outbox'], + "L_SENTBOX" => $lang['Sent'], + "L_SAVEBOX" => $lang['Saved'], "L_FLAG" => $lang['Flag'], "L_SUBJECT" => $lang['Subject'], "L_DATE" => $lang['Date'], - "L_FROM_OR_TO" => (($folder == "inbox" || $folder == "savebox") ? $lang['From'] : $lang['To']), + "L_FROM" => $lang['From'], + "L_TO" => $lang['To'], "S_PRIVMSGS_ACTION" => append_sid("privmsg.$phpEx?folder=$folder"), - "S_HIDDEN_FIELDS" => $s_hidden_fields, - "S_POST_NEW_MSG" => $post_new_mesg_url, - "S_POST_REPLY_MSG" => $post_reply_mesg_url) + "S_HIDDEN_FIELDS" => $s_hidden_fields) ); + + $username_from = $privmsg['username_1']; + $user_id_from = $privmsg['user_id_1']; + $username_to = $privmsg['username_2']; + $user_id_to = $privmsg['user_id_2']; - $poster = stripslashes($privmsg['username']); - $poster_id = $privmsg['user_id']; - - $post_date = create_date($board_config['default_dateformat'], $privmsg['privmsgs_date'], $board_config['board_timezone']); + $post_date = create_date($board_config['default_dateformat'], $privmsg['privmsgs_date'], $board_config['default_timezone']); - $poster_avatar = ($privmsg['user_avatar'] != "" && $userdata['user_id'] != ANONYMOUS) ? "<img src=\"" . $board_config['avatar_path'] . "/" . $privmsg['user_avatar'] . "\">" : ""; + $profile_img = "<a href=\"" . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$user_id_from") . "\"><img src=\"" . $images['icon_profile'] . "\" alt=\"" . $lang['Read_profile'] . " $username_from\" border=\"0\" /></a>"; - $profile_img = "<a href=\"" . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$poster_id") . "\"><img src=\"" . $images['icon_profile'] . "\" alt=\"" . $lang['Profile'] . "\" border=\"0\"></a>"; + $email_addr = str_replace("@", " at ", $privmsg['user_email']); + $email_img = ($privmsg['user_viewemail'] && $email_addr != "" ) ? "<a href=\"mailto:$email_addr\"><img src=\"" . $images['icon_email'] . "\" alt=\"" . $lang['Send_email'] . " $username_from\" border=\"0\" /></a>" : ""; - $email_img = ($privmsg['user_viewemail'] == 1) ? "<a href=\"mailto:" . $privmsg['user_email'] . "\"><img src=\"" .$images['icon_email'] . "\" alt=\"" . $lang['Email'] . "\" border=\"0\"></a>" : ""; - - $www_img = ($privmsg['user_website']) ? "<a href=\"" . $privmsg['user_website'] . "\"><img src=\"" . $images['icon_www'] . "\" alt=\"" . $lang['Website'] . "\" border=\"0\"></a>" : ""; + $www_img = ($privmsg['user_website']) ? "<a href=\"" . $privmsg['user_website'] . "\" target=\"_userwww\"><img src=\"" . $images['icon_www'] . "\" alt=\"" . $lang['Visit_website'] . "\" border=\"0\" /></a>" : ""; if($privmsg['user_icq']) { - $icq_status_img = "<a href=\"http://wwp.icq.com/" . $privmsg['user_icq'] . "#pager\"><img src=\"http://online.mirabilis.com/scripts/online.dll?icq=" . $privmsg['user_icq'] . "&img=5\" border=\"0\"></a>"; + $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>"; - $icq_add_img = "<a href=\"http://wwp.icq.com/scripts/search.dll?to=" . $privmsg['user_icq'] . "\"><img src=\"" . $images['icon_icq'] . "\" alt=\"" . $lang['ICQ'] . "\" border=\"0\"></a>"; + // + // This cannot stay like this, it needs a 'proper' solution, eg a separate + // template for overlaying the ICQ icon, or we just do away with the icq status + // display (which is after all somewhat a pain in the rear :D + // + if( $theme['template_name'] == "subSilver" ) + { + $icq_add_img = '<table width="59" border="0" cellspacing="0" cellpadding="0"><tr><td nowrap="nowrap" class="icqback"><img src="images/spacer.gif" width="3" height="18" alt = "">' . $icq_status_img . '<a href="http://wwp.icq.com/scripts/search.dll?to=' . $privmsg['user_icq'] . '"><img src="images/spacer.gif" width="35" height="18" border="0" alt="' . $lang['ICQ'] . '" /></a></td></tr></table>'; + $icq_status_img = ""; + } + else + { + $icq_add_img = "<a href=\"http://wwp.icq.com/scripts/search.dll?to=" . $privmsg['user_icq'] . "\"><img src=\"" . $images['icon_icq'] . "\" alt=\"" . $lang['ICQ'] . "\" border=\"0\" /></a>"; + } } else { @@ -237,66 +410,95 @@ if($mode == "read") $icq_add_img = ""; } - $aim_img = ($privmsg['user_aim']) ? "<a href=\"aim:goim?screenname=" . $privmsg['user_aim'] . "&message=Hello+Are+you+there?\"><img src=\"" . $images['icon_aim'] . "\" border=\"0\"></a>" : ""; + $aim_img = ($privmsg['user_aim']) ? "<a href=\"aim:goim?screenname=" . $privmsg['user_aim'] . "&message=Hello+Are+you+there?\"><img src=\"" . $images['icon_aim'] . "\" border=\"0\" alt=\"" . $lang['AIM'] . "\" /></a>" : ""; + + $msn_img = ($privmsg['user_msnm']) ? "<a href=\"profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$user_id_from\"><img src=\"" . $images['icon_msnm'] . "\" border=\"0\" alt=\"" . $lang['MSNM'] . "\" /></a>" : ""; + + $yim_img = ($privmsg['user_yim']) ? "<a href=\"http://edit.yahoo.com/config/send_webmesg?.target=" . $privmsg['user_yim'] . "&.src=pg\"><img src=\"" . $images['icon_yim'] . "\" border=\"0\" alt=\"" . $lang['YIM'] . "\" /></a>" : ""; - $msn_img = ($privmsg['user_msnm']) ? "<a href=\"" . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$poster_id") . "\"><img src=\"" . $images['icon_msnm'] . "\" border=\"0\"></a>" : ""; + $search_img = "<a href=\"" . append_sid("search.$phpEx?search_author=" . urlencode($username_from) . "&showresults=topics") . "\"><img src=\"" . $images['icon_search'] . "\" border=\"0\" /></a>"; - $yim_img = ($privmsg['user_yim']) ? "<a href=\"http://edit.yahoo.com/config/send_webmesg?.target=" . $privmsg['user_yim'] . "&.src=pg\"><img src=\"" . $images['icon_yim'] . "\" border=\"0\"></a>" : ""; + // + // Processing of post + // + $post_subject = $privmsg['privmsgs_subject']; - if($folder == "inbox") + $private_message = $privmsg['privmsgs_text']; + $bbcode_uid = $privmsg['privmsgs_bbcode_uid']; + + $user_sig = ( $privmsg['privmsgs_from_userid'] == $userdata['user_id'] ) ? $userdata['user_sig'] : $privmsg['user_sig']; + $user_sig_bbcode_uid = ( $privmsg['privmsgs_from_userid'] == $userdata['user_id'] ) ? $userdata['user_sig_bbcode_uid'] : $privmsg['user_sig_bbcode_uid']; + + // + // If the board has HTML off but the post has HTML + // on then we process it, else leave it alone + // + if( !$board_config['allow_html'] ) { - $quote_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=reply"e=true&" . POST_POST_URL . "=" . $privmsgs_id) . "\"><img src=\"" . $images['icon_quote'] . "\" alt=\"\" border=\"0\"></a>"; + if( $user_sig != "" && $privmsg['privmsgs_enable_sig'] && $userdata['user_allowhtml'] ) + { + $user_sig = preg_replace("#(<)([\/]?.*?)(>)#is", "<\\2>", $user_sig); + } + + if( $privmsg['privmsgs_enable_html'] ) + { + $private_message = preg_replace("#(<)([\/]?.*?)(>)#is", "<\\2>", $private_message); + } } - if($folder == "outbox") + if( $user_sig != "" && $privmsg['privmsgs_attach_sig'] && $user_sig_bbcode_uid != "" ) { - $edit_img = "<a href=\"" . append_sid("privmsg.$phpEx?folder=$folder&mode=edit&" . POST_POST_URL . "=" . $privmsgs_id) . "\"><img src=\"" . $images['icon_edit'] . "\" alt=\"\" border=\"0\"></a>"; + $user_sig = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($user_sig, $user_sig_bbcode_uid) : preg_replace("/\:[0-9a-z\:]+\]/si", "]", $user_sig); } - $post_subject = stripslashes($privmsg['privmsgs_subject']); - - $message = stripslashes($privmsg['privmsgs_text']); - $bbcode_uid = $privmsg['privmsgs_bbcode_uid']; + if( $bbcode_uid != "" ) + { + $private_message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($private_message, $bbcode_uid) : preg_replace("/\:[0-9a-z\:]+\]/si", "]", $private_message); + } - $user_sig = ($privmsg['privmsgs_from_userid'] == $userdata['user_id']) ? stripslashes($userdata['user_sig']) : stripslashes($privmsg['user_sig']); + $private_message = make_clickable($private_message); - if(!$board_config['allow_html']) + if( $privmsg['privmsgs_attach_sig'] && $user_sig != "" ) { - $user_sig = strip_tags($user_sig); - $message = strip_tags($message); + $private_message .= "<br /><br />_________________<br />" . make_clickable($user_sig); } - if($board_config['allow_bbcode']) + + if( count($orig_word) ) { - // do bbcode stuff here - $sig_uid = make_bbcode_uid(); - $user_sig = bbencode_first_pass($user_sig, $sig_uid); - $user_sig = bbencode_second_pass($user_sig, $sig_uid); + $post_subject = preg_replace($orig_word, $replacement_word, $post_subject); + $private_message = preg_replace($orig_word, $replacement_word, $private_message); + } - $message = bbencode_second_pass($message, $bbcode_uid); + if( $board_config['allow_smilies'] && $privmsg['privmsgs_enable_smilies'] ) + { + $private_message = smilies_pass($private_message); } - $message = make_clickable($message); - $message = str_replace("\n", "<br />", $message); - $message = eregi_replace("\[addsig]$", "<br /><br />_________________<br />" . nl2br($user_sig), $message); + $private_message = str_replace("\n", "<br />", $private_message); + // + // Dump it to the templating engine + // $template->assign_vars(array( - "POSTER_NAME" => $poster, + "MESSAGE_TO" => $username_to, + "MESSAGE_FROM" => $username_from, + "RANK_IMAGE" => $rank_image, + "POSTER_JOINED" => $poster_joined, + "POSTER_POSTS" => $poster_posts, + "POSTER_FROM" => $poster_from, "POSTER_AVATAR" => $poster_avatar, - "POST_DATE" => $post_date, - "POST_SUBJECT" => $post_subject, - "MESSAGE" => $message, "PROFILE_IMG" => $profile_img, + "SEARCH_IMG" => $search_img, "EMAIL_IMG" => $email_img, "WWW_IMG" => $www_img, "ICQ_STATUS_IMG" => $icq_status_img, "ICQ_ADD_IMG" => $icq_add_img, "AIM_IMG" => $aim_img, "MSN_IMG" => $msn_img, - "YIM_IMG" => $yim_img, - "QUOTE_IMG" => $quote_img, - "EDIT_IMG" => $edit_img, - - "L_FROM" => $lang['From']) + "YIM_IMG" => $yim_img, + "POST_SUBJECT" => $post_subject, + "MESSAGE" => $private_message, + "POST_DATE" => $post_date) ); $template->pparse("body"); @@ -304,309 +506,591 @@ if($mode == "read") include($phpbb_root_path . 'includes/page_tail.'.$phpEx); } -else if($mode == "post" || $mode == "reply" || $mode == "edit") +else if( ( $delete && $mark_list ) || $delete_all ) { - // ----------------------------- - // Posting capabilities are here - // ----------------------------- - if(!$userdata['session_logged_in']) { - header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=$folder&mode=$mode")); + header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=inbox")); } - if(!$userdata['user_allow_pm']) + if( !$confirm ) { + $s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" />'; + $s_hidden_fields .= (isset($HTTP_POST_VARS['delete'])) ? '<input type="hidden" name="delete" value="true" />' : '<input type="hidden" name="deleteall" value="true" />'; + + for($i = 0; $i < count($mark_list); $i++) + { + $s_hidden_fields .= '<input type="hidden" name="mark[]" value="' . $mark_list[$i] . '" />'; + } + // - // Admin has prevented user from sending PM's + // Output confirmation page // - $msg = $lang['Cannot_send_privmsg']; - message_die(GENERAL_MESSAGE, $msg); - } + include($phpbb_root_path . 'includes/page_header.'.$phpEx); - // - // When we get to the point of a code review we really really really need to look at - // combining the following fragments with the posting routine. I don't think or see it - // necessary to actually use posting for privmsgs but I'm sure more can be combined in - // common functions ... not that I think all functions are common, some functions are - // actually quite classy and sophisticated, champagne, caviar and all that - // + $template->set_filenames(array( + "confirm_body" => "confirm_body.tpl") + ); + $template->assign_vars(array( + "MESSAGE_TITLE" => $lang['Information'], + "MESSAGE_TEXT" => "Are you sure you want to delete these message?", + + "L_YES" => $lang['Yes'], + "L_NO" => $lang['No'], + + "S_CONFIRM_ACTION" => append_sid("privmsg.$phpEx?folder=$folder"), + "S_HIDDEN_FIELDS" => $s_hidden_fields) + ); + $template->pparse("confirm_body"); - $disable_html = (isset($HTTP_POST_VARS['disable_html'])) ? $HTTP_POST_VARS['disable_html'] : !$userdata['user_allowhtml']; - $disable_bbcode = (isset($HTTP_POST_VARS['disable_bbcode'])) ? $HTTP_POST_VARS['disable_bbcode'] : !$userdata['user_allowbbcode']; - $disable_smilies = (isset($HTTP_POST_VARS['disable_smile'])) ? $HTTP_POST_VARS['disable_smile'] : !$userdata['user_allowsmile']; - $attach_sig = (isset($HTTP_POST_VARS['attach_sig'])) ? $HTTP_POST_VARS['attach_sig'] : $userdata['user_attachsig']; - $preview = (isset($HTTP_POST_VARS['preview'])) ? TRUE : FALSE; - $submit = (isset($HTTP_POST_VARS['submit'])) ? TRUE : FALSE; + include($phpbb_root_path . 'includes/page_tail.'.$phpEx); - if($mode == "reply" || $mode == "edit") + } + else if( $confirm ) { - if(!empty($HTTP_GET_VARS[POST_POST_URL])) + if( $delete_all ) { - $privmsgs_id = $HTTP_GET_VARS[POST_POST_URL]; + switch($folder) + { + case 'inbox': + $delete_type = "privmsgs_to_userid = " . $userdata['user_id'] . " AND ( + privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " )"; + break; + + case 'outbox': + $delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_NEW_MAIL; + break; + + case 'sentbox': + $delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_SENT_MAIL; + break; + + case 'savebox': + $delete_type = "( ( privmsgs_from_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) + OR ( privmsgs_to_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) )"; + break; + } + + $deleteall_sql = "SELECT privmsgs_id + FROM " . PRIVMSGS_TABLE . " + WHERE " . $delete_type; + + if(!$del_list_status = $db->sql_query($deleteall_sql)) + { + message_die(GENERAL_ERROR, "Could not obtain id list to delete all messages.", "", __LINE__, __FILE__, $deleteall_sql); + } + + $delete_list = $db->sql_fetchrowset($del_list_status); + for($i = 0; $i < count($delete_list); $i++) + { + $mark_list[] = $delete_list[$i]['privmsgs_id']; + } + unset($delete_list); + unset($delete_type); } - else if(!empty($HTTP_POST_VARS[POST_POST_URL])) + + $delete_sql = "DELETE FROM " . PRIVMSGS_TABLE . " + WHERE "; + $delete_text_sql = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . " + WHERE "; + + $delete_sql_id = ""; + for($i = 0; $i < count($mark_list); $i++) { - $privmsgs_id = $HTTP_POST_VARS[POST_POST_URL]; + if( $delete_sql_id != "" ) + { + $delete_sql_id .= ", "; + } + $delete_sql_id .= $mark_list[$i]; } - else + + $delete_sql .= "privmsgs_id IN ($delete_sql_id)"; + $delete_text_sql .= "privmsgs_text_id IN ($delete_sql_id)"; + + $delete_sql .= " AND "; + + switch($folder) { - message_die(GENERAL_ERROR, $lang['No_post_id']); - } - } + case 'inbox': + $delete_sql .= "privmsgs_to_userid = " . $userdata['user_id'] . " AND ( + privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " )"; + break; - if(!empty($HTTP_GET_VARS[POST_USERS_URL]) && !$preview && empty($HTTP_POST_VARS['submit'])) - { - $user_id = $HTTP_GET_VARS[POST_USERS_URL]; + case 'outbox': + $delete_sql .= "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_NEW_MAIL; + break; + + case 'sentbox': + $delete_sql .= "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_SENT_MAIL; + break; + + case 'savebox': + $delete_sql .= "( ( privmsgs_from_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " ) + OR ( privmsgs_to_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) )"; + break; + } - $sql = "SELECT username - FROM " . USERS_TABLE . " - WHERE user_id = $user_id - AND user_id <> " . ANONYMOUS; - if(!$result = $db->sql_query($sql)) + if(!$del_status = $db->sql_query($delete_sql, BEGIN_TRANSACTION)) { - $error = TRUE; - $error_msg = $lang['No_such_user']; + message_die(GENERAL_ERROR, "Could not delete private message info.", "", __LINE__, __FILE__, $delete_sql); } else { - list($to_username) = $db->sql_fetchrow($result); - $to_username = stripslashes($to_username); + if(!$del_text_status = $db->sql_query($delete_text_sql, END_TRANSACTION)) + { + message_die(GENERAL_ERROR, "Could not delete private message text.", "", __LINE__, __FILE__, $delete_text_sql); + } } } - else + +} +else if( $save && $mark_list && $folder != "savebox" && $folder != "outbox") +{ + if( !$userdata['session_logged_in'] ) { - if(!empty($HTTP_POST_VARS['username_list'])) - { - $to_username = $HTTP_POST_VARS['username_list']; - } - else - { - $to_username = ""; - } + header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=inbox")); } - if($mode == "edit" && !$preview && !$submit) + // + // See if recipient is at their savebox limit + // + $sql = "SELECT COUNT(privmsgs_id) AS savebox_items, MIN(privmsgs_date) AS oldest_post_time + FROM " . PRIVMSGS_TABLE . " + WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) + OR ( privmsgs_from_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )"; + if( !$result = $db->sql_query($sql) ) { - $sql = "SELECT pm.privmsgs_id, pm.privmsgs_subject, pmt.privmsgs_text, u.username, u.user_id - FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS_TABLE . " u - WHERE pm.privmsgs_id = $privmsgs_id - AND pmt.privmsgs_text_id = pm.privmsgs_id - AND pm.privmsgs_from_userid = " . $userdata['user_id'] . " - AND pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . " - AND u.user_id = pm.privmsgs_to_userid"; - if(!$pm_edit_status = $db->sql_query($sql)) - { - message_die(GENERAL_ERROR, "Could not obtain private message for editing.", "", __LINE__, __FILE__, $sql); - } - if(!$db->sql_numrows($pm_edit_status)) + message_die(GENERAL_ERROR, "Could not obtain sent message info for sendee.", "", __LINE__, __FILE__, $sql); + } + + $sql_priority = (SQL_LAYER == "mysql") ? "LOW_PRIORITY" : ""; + + if( $db->sql_numrows($result) ) + { + $saved_info = $db->sql_fetchrow($result); + + if( $saved_info['savebox_items'] > $board_config['max_savebox_privmsgs'] ) { - header("Location: " . append_sid("privmsg.$phpEx?folder=$folder")); + $sql = "DELETE $sql_priority FROM " . PRIVMSGS_TABLE . " + WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) + OR ( privmsgs_from_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") ) + AND privmsgs_date = " . $saved_info['oldest_post_time']; + if( !$result = $db->sql_query($sql) ) + { + message_die(GENERAL_ERROR, "Could not delete oldest privmsgs.", "", __LINE__, __FILE__, $sql); + } } + } - $privmsg = $db->sql_fetchrow($pm_edit_status); + // + // Process request + // + $saved_sql = "UPDATE " . PRIVMSGS_TABLE; - $subject = stripslashes($privmsg['privmsgs_subject']); - $message = stripslashes($privmsg['privmsgs_text']); - $message = str_replace("[addsig]", "", $message); - $message = preg_replace("/\:[0-9a-z\:]*?\]/si", "]", $message); + switch($folder) + { + case 'inbox': + $saved_sql .= " SET privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " + WHERE privmsgs_to_userid = " . $userdata['user_id'] . " + AND ( privmsgs_type = " . PRIVMSGS_READ_MAIL . " + OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " )"; + break; - $to_username = stripslashes($privmsg['username']); - $to_userid = $privmsg['user_id']; + case 'outbox': + $saved_sql .= " SET privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " + WHERE privmsgs_from_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_NEW_MAIL; + break; + case 'sentbox': + $saved_sql .= " SET privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " + WHERE privmsgs_from_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SENT_MAIL; + break; } - else if($mode == "reply" && !$preview && !$submit) - { - $sql = "SELECT pm.privmsgs_subject, pm.privmsgs_date, pmt.privmsgs_text, u.username, u.user_id - FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS_TABLE . " u - WHERE pm.privmsgs_id = $privmsgs_id - AND pmt.privmsgs_text_id = pm.privmsgs_id - AND pm.privmsgs_to_userid = " . $userdata['user_id'] . " - AND pm.privmsgs_type = " . PRIVMSGS_READ_MAIL . " - AND u.user_id = pm.privmsgs_from_userid"; - if(!$pm_reply_status = $db->sql_query($sql)) - { - message_die(GENERAL_ERROR, "Could not obtain private message for editing.", "", __LINE__, __FILE__, $sql); - } - if(!$db->sql_numrows($pm_reply_status)) + $saved_sql_id = ""; + for($i = 0; $i < count($mark_list); $i++) + { + if( $saved_sql_id != "" ) { - header("Location: " . append_sid("privmsg.$phpEx?folder=$folder")); + $saved_sql_id .= ", "; } - $privmsg = $db->sql_fetchrow($pm_reply_status); - - $subject = ( (strstr("Re:", $privmsg['privmsgs_subject'])) ? $lang['Re'] . ":" : "" ) . stripslashes($privmsg['privmsgs_subject']); + $saved_sql_id .= $mark_list[$i]; + } - $to_username = stripslashes($privmsg['username']); - $to_userid = $privmsg['user_id']; + $saved_sql .= " AND privmsgs_id IN ($saved_sql_id)"; - if(isset($HTTP_GET_VARS['quote'])) - { - $msg_date = create_date($board_config['default_dateformat'], $privmsg['privmsgs_date'], $board_config['board_timezone']); //"[date]" . $privmsg['privmsgs_time'] . "[/date]"; + if( !$save_status = $db->sql_query($saved_sql) ) + { + message_die(GENERAL_ERROR, "Could not save private messages.", "", __LINE__, __FILE__, $saved_sql); + } - $message = stripslashes(str_replace("[addsig]", "", $privmsg['privmsgs_text'])); - $message = preg_replace("/\:[0-9a-z\:]*?\]/si", "]", $message); - $message = "On " . $msg_date . " " . $to_username . " wrote:\n\n[quote]\n" . $message . "\n[/quote]"; - } +} +else if( $submit || $refresh || $mode != "" ) +{ + if(!$userdata['session_logged_in']) + { + header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=$folder&mode=$mode")); } - // - // Process the username list operations - // - if( !empty($HTTP_POST_VARS['usersubmit'])) + if( $mode == "searchuser" ) { - if(!empty($HTTP_POST_VARS['username_search']) && !$preview) + if( isset($HTTP_POST_VARS['search']) ) { - $username_search = stripslashes(str_replace("*", "%", $HTTP_POST_VARS['username_search'])); - $first_letter = 65; - - $sql = "SELECT username - FROM " . USERS_TABLE . " - WHERE ( username LIKE '%$username_search' - OR username LIKE '$username_search%' - OR username LIKE '%$username_search%' - OR username LIKE '$username_search' ) - AND user_id <> " . ANONYMOUS; + $username_list = username_search("privmsg.$phpEx", $HTTP_POST_VARS['search_author'], 1); } else { - $first_letter = $HTTP_POST_VARS['user_alpha']; - - $sql = "SELECT username - FROM " . USERS_TABLE . " - WHERE ( username LIKE '" . chr($first_letter) . "%' - OR username LIKE '" . chr($first_letter) . "' ) - AND user_id <> " . ANONYMOUS; + username_search("privmsg.$phpEx", "", 1); } + + // + // Remove this later + // + exit; + } + + // + // Toggles + // + if( !$board_config['allow_html'] ) + { + $html_on = 0; } else { - $first_letter = (!empty($to_username)) ? ord(ucfirst($to_username)) : 65; - - $sql = "SELECT username - FROM " . USERS_TABLE . " - WHERE ( username LIKE '" . chr($first_letter) . "%' - OR username LIKE '" . chr($first_letter) . "' ) - AND user_id <> " . ANONYMOUS; + $html_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_html']) ) ? 0 : TRUE ) : $userdata['user_allowhtml']; } - $result = $db->sql_query($sql); - $name_set = $db->sql_fetchrowset($result); - - $user_names_select = "<select name=\"username_list\">"; - if($db->sql_numrows($result)) + if( !$board_config['allow_bbcode'] ) { - for($i = 0; $i < count($name_set); $i++) - { - $name_selected = ($to_username == $name_set[$i]['username']) ? " selected" : ""; - $user_names_select .= "<option value=\"" . $name_set[$i]['username'] . "\"$name_selected>" . $name_set[$i]['username'] . "</option>\n"; - } + $bbcode_on = 0; } else { - $user_names_select .= "<option value=\"" . ANONYMOUS . "\"$name_selected>" . $lang['No_match'] . "</option>\n"; + $bbcode_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_bbcode']) ) ? 0 : TRUE ) : $userdata['user_allowbbcode']; } - $user_names_select .= "</select>"; - $user_alpha_select = "<select name=\"user_alpha\" onchange=\"\">"; - for($i = 65; $i < 91; $i++) + if( !$board_config['allow_smilies'] ) { - if($first_letter == $i) - { - $user_alpha_select .= "<option value=\"$i\" selected>" . chr($i) . "</option>"; - } - else - { - $user_alpha_select .= "<option value=\"$i\">" . chr($i) . "</option>"; - } + $smilies_on = 0; + } + else + { + $smilies_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_smilies']) ) ? 0 : TRUE ) : $userdata['user_allowsmile']; } - $user_alpha_select .= "</select>"; - if($submit || $preview) + $attach_sig = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['attach_sig']) ) ? TRUE : 0 ) : $userdata['user_attachsig']; + + $user_sig = ( $userdata['user_sig'] != "" ) ? $userdata['user_sig'] : ""; + + if( $submit && $mode != "edit" ) { // // Flood control // - if($mode != 'edit' && !$preview) + $sql = "SELECT MAX(privmsgs_date) AS last_post_time + FROM " . PRIVMSGS_TABLE . " + WHERE privmsgs_from_userid = " . $userdata['user_id']; + if( $result = $db->sql_query($sql) ) { - $sql = "SELECT MAX(privmsgs_date) AS last_post_time - FROM " . PRIVMSGS_TABLE . " - WHERE privmsgs_ip = '$user_ip'"; - if($result = $db->sql_query($sql)) - { - $db_row = $db->sql_fetchrow($result); - $last_post_time = $db_row['last_post_time']; - $current_time = get_gmt_ts(); + $db_row = $db->sql_fetchrow($result); - if(($current_time - $last_post_time) < $board_config['flood_interval']) - { - $error = TRUE; - $error_msg = $lang['Flood_Error']; - } + $last_post_time = $db_row['last_post_time']; + $current_time = time(); + + if( ( $current_time - $last_post_time ) < $board_config['flood_interval']) + { + message_die(GENERAL_MESSAGE, $lang['Flood_Error']); } } // - // End: Flood control + // End Flood control // + } - $subject = (!empty($HTTP_POST_VARS['subject'])) ? $HTTP_POST_VARS['subject'] : ""; - $subject = trim(strip_tags(htmlspecialchars($subject))); - $message = (!empty($HTTP_POST_VARS['message'])) ? $HTTP_POST_VARS['message'] : ""; + if( $submit ) + { + if( !empty($HTTP_POST_VARS['username']) ) + { + $to_username = $HTTP_POST_VARS['username']; - if(empty($subject)) + $sql = "SELECT user_id, user_notify_pm, user_email + FROM " . USERS_TABLE . " + WHERE username = '" . $to_username . "' + AND user_id <> " . ANONYMOUS; + if(!$result = $db->sql_query($sql)) + { + $error = TRUE; + $error_msg = $lang['No_such_user']; + } + else + { + $to_userdata = $db->sql_fetchrow($result); + } + } + else { $error = TRUE; if(isset($error_msg)) { $error_msg .= "<br />"; } + $error_msg .= $lang['No_to_user']; + } + + $privmsg_subject = trim(strip_tags($HTTP_POST_VARS['subject'])); + if( empty($privmsg_subject) ) + { + $error = TRUE; + if( !empty($error_msg) ) + { + $error_msg .= "<br />"; + } $error_msg .= $lang['Empty_subject']; } - if( !empty($message) ) + if( !empty($HTTP_POST_VARS['message']) ) + { + if( !$error ) + { + if( $bbcode_on ) + { + $bbcode_uid = make_bbcode_uid(); + } + + $privmsg_message = prepare_message($HTTP_POST_VARS['message'], $html_on, $bbcode_on, $smilies_on, $bbcode_uid); + + } + } + else + { + $error = TRUE; + if(!empty($error_msg)) + { + $error_msg .= "<br />"; + } + $error_msg .= $lang['Empty_message']; + } + } + + if( $submit && !$error ) + { + // + // Has admin prevented user from sending PM's? + // + if( !$userdata['user_allow_pm'] ) { - if(!$error && !$preview) + $message = $lang['Cannot_send_privmsg']; + message_die(GENERAL_MESSAGE, $message); + } + + $msg_time = time(); + + if( $mode != "edit" ) + { + // + // See if recipient is at their inbox limit + // + $sql = "SELECT COUNT(privmsgs_id) AS inbox_items, MIN(privmsgs_date) AS oldest_post_time + FROM " . PRIVMSGS_TABLE . " + WHERE ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . " + OR privmsgs_type = " . PRIVMSGS_READ_MAIL . " ) + AND privmsgs_from_userid = " . $to_userdata['user_id']; + if( !$result = $db->sql_query($sql) ) { - $html_on = ($disable_html) ? FALSE : TRUE; - $bbcode_on = ($diable_bbcode) ? FALSE : TRUE; - $smile_on = ($disable_smilies) ? FALSE : TRUE; + message_die(GENERAL_ERROR, "Could not obtain sent message info for sendee.", "", __LINE__, __FILE__, $sql); + } - $bbcode_uid = make_bbcode_uid(); + $sql_priority = (SQL_LAYER == "mysql") ? "LOW_PRIORITY" : ""; - $message = prepare_message($message, $html_on, $bbcode_on, $smile_on, $bbcode_uid); - $message = preg_replace('#</textarea>#si', '</TEXTAREA>', $message); + if( $db->sql_numrows($result) ) + { + $inbox_info = $db->sql_fetchrow($result); - if($attach_sig && !empty($userdata['user_sig'])) + if( $inbox_info['inbox_items'] > $board_config['max_inbox_privmsgs'] ) { - $message .= "[addsig]"; + $sql = "DELETE $sql_priority FROM " . PRIVMSGS_TABLE . " + WHERE ( privmsgs_type = " . PRIVMSGS_NEW_MAIL . " + OR privmsgs_type = " . PRIVMSGS_UNREAD_MAIL . " ) + AND privmsgs_date = " . $inbox_info['oldest_post_time'] . " + AND privmsgs_to_userid = " . $to_userdata['user_id']; + if( !$result = $db->sql_query($sql) ) + { + message_die(GENERAL_ERROR, "Could not delete oldest privmsgs.", "", __LINE__, __FILE__, $sql); + } } } + + // + // This area is reserved for future use :D + // + + // + // + // + + $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) + VALUES (" . PRIVMSGS_NEW_MAIL . ", '$privmsg_subject', " . $userdata['user_id'] . ", " . $to_userdata['user_id'] . ", $msg_time, '$user_ip', $html_on, $bbcode_on, $smilies_on, $attach_sig)"; + } + else + { + $sql_info = "UPDATE " . PRIVMSGS_TABLE . " + SET privmsgs_type = " . PRIVMSGS_NEW_MAIL . ", privmsgs_subject = '$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 + WHERE privmsgs_id = $privmsg_id"; + } + + if( !$pm_sent_status = $db->sql_query($sql_info, BEGIN_TRANSACTION) ) + { + message_die(GENERAL_ERROR, "Could not insert/update private message sent info.", "", __LINE__, __FILE__, $sql_info); + } + else + { + if( $mode != "edit" ) + { + $privmsg_sent_id = $db->sql_nextid(); + + $sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text) + VALUES ($privmsg_sent_id, '" . $bbcode_uid . "', '$privmsg_message')"; + } else { - if(!$error) + $sql = "UPDATE " . PRIVMSGS_TEXT_TABLE . " + SET privmsgs_text = '$privmsg_message', privmsgs_bbcode_uid = '$bbcode_uid' + WHERE privmsgs_text_id = $privmsg_id"; + } + + if( !$pm_sent_text_status = $db->sql_query($sql, END_TRANSACTION) ) + { + message_die(GENERAL_ERROR, "Could not insert/update private message sent text.", "", __LINE__, __FILE__, $sql_info); + } + else if( $mode != "edit" ) + { + if( $to_userdata['user_notify_pm'] && !empty($to_userdata['user_email']) ) { - // do stripslashes incase magic_quotes is on. - $message = stripslashes($HTTP_POST_VARS['message']); - $message = preg_replace('#</textarea>#si', '</TEXTAREA>', $message); + $path = (dirname($HTTP_SERVER_VARS['REQUEST_URI']) == "/") ? "" : dirname($HTTP_SERVER_VARS['REQUEST_URI']); + $email_headers = "From: " . $board_config['board_email'] . "\nReturn-Path: " . $board_config['board_email'] . "\r\n"; + + include($phpbb_root_path . 'includes/emailer.'.$phpEx); + $emailer = new emailer($board_config['smtp_delivery']); + + $emailer->use_template("privmsg_notify"); + + $emailer->extra_headers($email_headers); + $emailer->email_address($to_userdata['user_email']); + $emailer->set_subject($lang['Notification_subject']); + + $emailer->assign_vars(array( + "USERNAME" => $to_username, + "SITENAME" => $board_config['sitename'], + "EMAIL_SIG" => str_replace("<br />", "\n", "-- \n" . $board_config['board_email_sig']), + + "U_INBOX" => "http://" . $HTTP_SERVER_VARS['SERVER_NAME'] . $path . "/privmsg.$phpEx?folder=inbox") + ); + + $emailer->send(); + $emailer->reset(); } } + + $template->assign_vars(array( + "META" => '<meta http-equiv="refresh" content="3;url=privmsg.' . $phpEx . '?folder=inbox">') + ); + + $msg = $lang['Message_sent'] . "<br /><br />" . $lang['Click'] . " <a href=\"" . append_sid("privmsg.$phpEx?folder=inbox") . "\">" . $lang['Here'] . "</a> " . $lang['to_return_inbox'] . "<br /><br />" . $lang['Click'] . " <a href=\"" . append_sid("index.$phpEx") . "\">" . $lang['Here'] . "</a> ". $lang['to_return_index']; + + message_die(GENERAL_MESSAGE, $msg); } - else + } + else if( $preview || $refresh || $error ) + { + + // + // If we're previewing or refreshing then obtain the data + // passed to the script, process it a little, do some checks + // where neccessary, etc. + // + $to_username = ( isset($HTTP_POST_VARS['username']) ) ? trim(strip_tags(stripslashes($HTTP_POST_VARS['username']))) : ""; + $privmsg_subject = ( isset($HTTP_POST_VARS['subject']) ) ? trim(strip_tags(stripslashes($HTTP_POST_VARS['subject']))) : ""; + $privmsg_message = ( isset($HTTP_POST_VARS['message']) ) ? trim(stripslashes($HTTP_POST_VARS['message'])) : ""; + $privmsg_message = preg_replace('#<textarea>#si', '<textarea>', $privmsg_message); + + // + // Do mode specific things + // + if( $mode == "post" ) { - $error = TRUE; - if(isset($error_msg)) + $page_title = $lang['Send_new_privmsg']; + + $user_sig = ( $userdata['user_sig'] != "" ) ? $userdata['user_sig'] : ""; + + } + else if( $mode == "reply" ) + { + $page_title = $lang['Reply_privmsg']; + + $user_sig = ( $userdata['user_sig'] != "" ) ? $userdata['user_sig'] : ""; + + } + else if( $mode == "edit" ) + { + $page_title = $lang['Edit_privmsg']; + + $sql = "SELECT u.user_id, u.user_sig + FROM " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " u + WHERE pm.privmsgs_id = $privmsg_id + AND u.user_id = pm.privmsgs_from_userid"; + if($result = $db->sql_query($sql)) + { + $postrow = $db->sql_fetchrow($result); + + if( $userdata['user_id'] != $postrow['user_id'] ) + { + message_die(GENERAL_MESSAGE, $lang['Sorry_edit_own_posts']); + } + + $user_sig = ( $postrow['user_sig'] != "" ) ? $postrow['user_sig'] : ""; + } + else + { + message_die(GENERAL_ERROR, "Couldn't obtain post and post text", "", __LINE__, __FILE__, $sql); + } + } + + // + // Process the username list operations + // + if( $submit_search ) + { + if( !empty($HTTP_POST_VARS['username_search']) ) { - $error_msg .= "<br />"; } - $error_msg .= $lang['Empty_msg']; + } + } + else + { + if( !$privmsg_id && ( $mode == "reply" || $mode == "edit" || $mode == "quote" ) ) + { + message_die(GENERAL_ERROR, $lang['No_post_id']); } - if( !empty($to_username) ) + if( !empty($HTTP_GET_VARS[POST_USERS_URL]) ) { - $sql = "SELECT user_id, username, user_notify_pm, user_email + $user_id = $HTTP_GET_VARS[POST_USERS_URL]; + + $sql = "SELECT username FROM " . USERS_TABLE . " - WHERE username = '" . addslashes($to_username) . "' + WHERE user_id = $user_id AND user_id <> " . ANONYMOUS; if(!$result = $db->sql_query($sql)) { @@ -615,145 +1099,205 @@ else if($mode == "post" || $mode == "reply" || $mode == "edit") } else { - $to_userdata = $db->sql_fetchrow($result); + $row = $db->sql_fetchrow($result); + $to_username = $row['username']; } } - else + + // + // Obtain list of groups/users is + // this user is a group moderator + // + if( $mode == "post" ) { - $error = TRUE; - if(isset($error_msg)) + unset($mod_group_list); + $sql = "SELECT g.group_id, g.group_name, g.group_moderator, g.group_single_user, u.username + FROM " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u + WHERE g.group_moderator = " . $userdata['user_id'] ." + AND ug.group_id = g.group_id + AND u.user_id = ug.user_id"; + if(!$group_status = $db->sql_query($sql)) { - $error_msg .= "<br />"; + message_die(GENERAL_ERROR, "Could not obtain group moderator list.", "", __LINE__, __FILE__, $sql); + } + if($db->sql_numrows($group_status)) + { + $mod_group_list = $db->sql_fetchrowset($group_status); } - $error_msg .= $lang['No_to_user']; } - if(!$preview && !$error) + if( $mode == "edit" ) { - $msg_time = time(); - - if($mode != "edit") + $sql = "SELECT pm.privmsgs_id, pm.privmsgs_subject, pmt.privmsgs_text, u.username, u.user_id, u.user_sig + FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS_TABLE . " u + WHERE pm.privmsgs_id = $privmsg_id + AND pmt.privmsgs_text_id = pm.privmsgs_id + AND pm.privmsgs_from_userid = " . $userdata['user_id'] . " + AND pm.privmsgs_type = " . PRIVMSGS_NEW_MAIL . " + AND u.user_id = pm.privmsgs_to_userid"; + if( !$pm_edit_status = $db->sql_query($sql) ) { - $sql_info = "INSERT INTO " . PRIVMSGS_TABLE . " (privmsgs_type, privmsgs_subject, privmsgs_from_userid, privmsgs_to_userid, privmsgs_date, privmsgs_ip, privmsgs_bbcode_uid) - VALUES (" . PRIVMSGS_NEW_MAIL . ", '$subject', " . $userdata['user_id'] . ", " . $to_userdata['user_id'] . ", $msg_time, '$user_ip', '" . $bbcode_uid . "')"; + message_die(GENERAL_ERROR, "Could not obtain private message for editing.", "", __LINE__, __FILE__, $sql); } - else + if(!$db->sql_numrows($pm_edit_status)) { - $sql_info = "UPDATE " . PRIVMSGS_TABLE . " - SET privmsgs_type = " . PRIVMSGS_NEW_MAIL . ", privmsgs_subject = '$subject', privmsgs_from_userid = " . $userdata['user_id'] . ", privmsgs_to_userid = " . $to_userdata['user_id'] . ", privmsgs_date = $msg_time, privmsgs_ip = '$user_ip', privmsgs_bbcode_uid = '$bbcode_uid' - WHERE privmsgs_id = $privmsgs_id"; + header("Location: " . append_sid("privmsg.$phpEx?folder=$folder")); } - if(!$pm_sent_status = $db->sql_query($sql_info, BEGIN_TRANSACTION)) + $privmsg = $db->sql_fetchrow($pm_edit_status); + + $privmsg_subject = $privmsg['privmsgs_subject']; + $privmsg_message = $privmsg['privmsgs_text']; + + $privmsg_message = preg_replace("/\:[0-9a-z\:]*?\]/si", "]", $privmsg_message); + $privmsg_message = str_replace("<br />", "\n", $privmsg_message); + $privmsg_message = preg_replace($html_entities_match, $html_entities_replace, $privmsg_message); + $privmsg_message = preg_replace('#</textarea>#si', '</textarea>', $privmsg_message); + + $user_sig = $privmsg['user_sig']; + + $to_username = $privmsg['username']; + $to_userid = $privmsg['user_id']; + + } + else if( $mode == "reply" || $mode == "quote" ) + { + + $sql = "SELECT pm.privmsgs_subject, pm.privmsgs_date, pmt.privmsgs_text, u.username, u.user_id + FROM " . PRIVMSGS_TABLE . " pm, " . PRIVMSGS_TEXT_TABLE . " pmt, " . USERS_TABLE . " u + WHERE pm.privmsgs_id = $privmsg_id + AND pmt.privmsgs_text_id = pm.privmsgs_id + AND pm.privmsgs_to_userid = " . $userdata['user_id'] . " + AND u.user_id = pm.privmsgs_from_userid"; + if(!$pm_reply_status = $db->sql_query($sql)) { - message_die(GENERAL_ERROR, "Could not insert/update private message sent info.", "", __LINE__, __FILE__, $sql_info); + message_die(GENERAL_ERROR, "Could not obtain private message for editing.", "", __LINE__, __FILE__, $sql); } - else + if( !$db->sql_numrows($pm_reply_status) ) { +// header("Location: " . append_sid("privmsg.$phpEx?folder=$folder")); + } + $privmsg = $db->sql_fetchrow($pm_reply_status); - if($mode != "edit") - { - $privmsg_sent_id = $db->sql_nextid(); + $privmsg_subject = ( (strstr("Re:", $privmsg['privmsgs_subject'])) ? $lang['Re'] . ":" : "" ) . $privmsg['privmsgs_subject']; - $sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_text) - VALUES ($privmsg_sent_id, '$message')"; - } - else - { - $sql = "UPDATE " . PRIVMSGS_TEXT_TABLE . " - SET privmsgs_text = '$message' - WHERE privmsgs_text_id = $privmsgs_id"; - } + $to_username = $privmsg['username']; + $to_userid = $privmsg['user_id']; - if(!$pm_sent_text_status = $db->sql_query($sql, END_TRANSACTION)) - { - message_die(GENERAL_ERROR, "Could not insert/update private message sent text.", "", __LINE__, __FILE__, $sql_info); - } - else if($mode != "edit") - { - if($to_userdata['user_notify_pm'] && !empty($to_userdata['user_email'])) - { - $email_headers = "From: " . $board_config['board_email'] . "\r\n"; - include($phpbb_root_path . 'includes/emailer.'.$phpEx); - $emailer = new emailer($board_config['smtp_delivery']); - - $emailer->use_template("privmsg_notify"); - $emailer->email_address($to_userdata['user_email']); - $emailer->set_subject($lang['Notification_subject']); - $emailer->extra_headers($email_headers); - - $emailer->assign_vars(array("SITENAME" => $board_config['sitename'], - "U_INBOX" => "http://".$SERVER_NAME . $PHP_SELF . "?folder=inbox", - "EMAIL_SIG" => $board_config['email_sig'])); - $emailer->send(); - $emailer->reset(); - } - } + if( $mode == "quote" ) + { + $privmsg_message = $privmsg['privmsgs_text']; + + $msg_date = create_date($board_config['default_dateformat'], $privmsg['privmsgs_date'], $board_config['board_timezone']); //"[date]" . $privmsg['privmsgs_time'] . "[/date]"; + + $privmsg_message = preg_replace("/\:[0-9a-z\:]*?\]/si", "]", $privmsg_message); + $privmsg_message = str_replace("<br />", "\n", $privmsg_message); + $privmsg_message = preg_replace($html_entities_match, $html_entities_replace, $privmsg_message); + $privmsg_message = preg_replace('#</textarea>#si', '</textarea>', $privmsg_message); - $msg = $lang['Message_sent'] . "<br /><br />" . $lang['Click'] . " <a href=\"" . append_sid("privmsg.$phpEx?folder=inbox") . "\">" . $lang['Here'] . "</a> " . $lang['to_return_inbox'] . "<br /><br />" . $lang['Click'] . " <a href=\"" . append_sid("index.$phpEx") . "\">" . $lang['Here'] . "</a> ". $lang['to_return_index']; + $msg_date = create_date($board_config['default_dateformat'], $privmsg['privmsgs_date'], $board_config['default_timezone']); - message_die(GENERAL_MESSAGE, $msg); + $privmsg_message = $to_username . " wrote:\n\n[quote]\n" . $privmsg_message . "\n[/quote]"; + + $mode = "reply"; } } } // - // Obtain list of groups/users is - // this user is a group moderator + // Has admin prevented user from sending PM's? + // + if( !$userdata['user_allow_pm'] && $mode != "edit" ) + { + $message = $lang['Cannot_send_privmsg']; + message_die(GENERAL_MESSAGE, $message); + } + + // + // Start output, first preview, then errors + // then post form // - if($mode == "post") + $page_title = $lang['Send_private_message']; + include($phpbb_root_path . 'includes/page_header.'.$phpEx); + + if( $preview && !$error ) { - unset($mod_group_list); - $sql = "SELECT g.group_id, g.group_name, g.group_moderator, g.group_single_user, u.username - FROM " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u - WHERE g.group_moderator = " . $userdata['user_id'] ." - AND ug.group_id = g.group_id - AND u.user_id = ug.user_id"; - if(!$group_status = $db->sql_query($sql)) + $orig_word = array(); + $replacement_word = array(); + $result = obtain_word_list($orig_word, $replacement_word); + + if( $bbcode_on ) { - message_die(GENERAL_ERROR, "Could not obtain group moderator list.", "", __LINE__, __FILE__, $sql); + $bbcode_uid = make_bbcode_uid(); } - if($db->sql_numrows($group_status)) + + $preview_message = prepare_message($privmsg_message, $html_on, $bbcode_on, $smilies_on, $bbcode_uid); + + // + // Finalise processing as per viewtopic + // + if( !$html_on ) { - $mod_group_list = $db->sql_fetchrowset($group_status); + if( $user_sig != "" || !$userdata['user_allowhtml'] ) + { + $user_sig = preg_replace("#(<)([\/]?.*?)(>)#is", "<\\2>", $user_sig); + } } - } - include($phpbb_root_path . 'includes/page_header.'.$phpEx); + if( $attach_sig && $user_sig != "" && $userdata['user_sig_bbcode_uid'] ) + { + $user_sig = bbencode_second_pass($user_sig, $userdata['user_sig_bbcode_uid']); + } - if($preview && !$error) - { - $bbcode_uid = make_bbcode_uid(); + if( $bbcode_on ) + { + $preview_message = bbencode_second_pass($preview_message, $bbcode_uid); + } - $preview_message = $message; - $preview_message = prepare_message($preview_message, TRUE, TRUE, TRUE, $bbcode_uid); - $preview_message = bbencode_second_pass($preview_message, $bbcode_uid); - $preview_message = make_clickable($preview_message); + if( $attach_sig && $user_sig != "" ) + { + $preview_message = $preview_message . "<br /><br />_________________<br />" . $user_sig; + } - $s_hidden_fields = "<input type=\"hidden\" name=\"folder\" value=\"$folder\">"; - $s_hidden_fields .= "<input type=\"hidden\" name=\"mode\" value=\"$mode\">"; - if(isset($HTTP_GET_VARS['quote'])) + if( count($orig_word) ) { - $s_hidden_fields .= "<input type=\"hidden\" name=\"quote\" value=\"true\">"; + $preview_subject = preg_replace($orig_word, $replacement_word, $privmsg_subject); + $preview_message = preg_replace($orig_word, $replacement_word, $preview_message); } - if(isset($privmsg_id)) + + if( $smilies_on ) { - $s_hidden_fields .= "<input type=\"hidden\" name=\"" . POST_POST_URL . "\" value=\"$privmsgs_id\">"; + $preview_message = smilies_pass($preview_message); + } + + $preview_message = make_clickable($preview_message); + $preview_message = str_replace("\n", "<br />", $preview_message); + + $s_hidden_fields = "<input type=\"hidden\" name=\"folder\" value=\"$folder\" />"; + $s_hidden_fields .= "<input type=\"hidden\" name=\"mode\" value=\"$mode\" />"; + + if( isset($privmsg_id) ) + { + $s_hidden_fields .= "<input type=\"hidden\" name=\"" . POST_POST_URL . "\" value=\"$privmsg_id\" />"; } $template->set_filenames(array( - "preview" => "posting_preview.tpl") + "preview" => "privmsgs_preview.tpl") ); $template->assign_vars(array( - "TOPIC_TITLE" => $subject, - "POST_SUBJECT" => $subject, - "ROW_COLOR" => "#" . $theme['td_color1'], - "POSTER_NAME" => $to_username, + "TOPIC_TITLE" => $preview_subject, + "POST_SUBJECT" => $preview_subject, + "MESSAGE_TO" => $to_username, + "MESSAGE_FROM" => $userdata['username'], "POST_DATE" => create_date($board_config['default_dateformat'], time(), $board_config['board_timezone']), - "MESSAGE" => stripslashes(nl2br($preview_message)), + "MESSAGE" => $preview_message, "S_HIDDEN_FIELDS" => $s_hidden_fields, + "L_SUBJECT" => $lang['Subject'], + "L_DATE" => $lang['Date'], + "L_FROM" => $lang['From'], + "L_TO" => $lang['To'], "L_PREVIEW" => $lang['Preview'], "L_POSTED" => $lang['Posted']) ); @@ -778,71 +1322,100 @@ else if($mode == "post" || $mode == "reply" || $mode == "edit") // // + // Generic posting form ... + // + + // // Load templates // $template->set_filenames(array( - "body" => "privmsgs_posting_body.tpl", + "body" => "posting_body.tpl", "jumpbox" => "jumpbox.tpl") ); $jumpbox = make_jumpbox(); $template->assign_vars(array( - "JUMPBOX_LIST" => $jumpbox, - "SELECT_NAME" => POST_FORUM_URL) + "L_GO" => $lang['Go'], + "L_JUMP_TO" => $lang['Jump_to'], + "L_SELECT_FORUM" => $lang['Select_forum'], + + "S_JUMPBOX_LIST" => $jumpbox, + "S_JUMPBOX_ACTION" => append_sid("viewforum.$phpEx")) ); $template->assign_var_from_handle("JUMPBOX", "jumpbox"); - if($board_config['allow_html']) + // + // Generate username search output + // + $result = $db->sql_query($sql_namesearch); + $name_set = $db->sql_fetchrowset($result); + + $user_names_select = ""; + if($db->sql_numrows($result)) { - $html_status = $lang['ON']; - $html_toggle = '<input type="checkbox" name="disable_html" '; - if($disable_html) + for($i = 0; $i < count($name_set); $i++) { - $html_toggle .= 'checked'; + $name_selected = ($to_username == $name_set[$i]['username']) ? " selected=\"selected\"" : ""; + $user_names_select .= "<option value=\"" . $name_set[$i]['username'] . "\"$name_selected>" . $name_set[$i]['username'] . "</option>\n"; } - $html_toggle .= "> " . $lang['Disable'] . $lang['HTML'] . $lang['in_this_post']; + } + else + { + $user_names_select .= "<option value=\"" . ANONYMOUS . "\"$name_selected>" . $lang['No_match'] . "</option>\n"; + } + + // + // Enable extensions in posting_body + // + $template->assign_block_vars("privmsg_extensions", array()); + + // + // HTML toggle selection + // + if($board_config['allow_html']) + { + $html_status = $lang['ON']; + $template->assign_block_vars("html_checkbox", array()); } else { $html_status = $lang['OFF']; } + // + // BBCode toggle selection + // if($board_config['allow_bbcode']) { $bbcode_status = $lang['ON']; - $bbcode_toggle = '<input type="checkbox" name="disable_bbcode" '; - if($disable_bbcode) - { - $bbcode_toggle .= "checked"; - } - $bbcode_toggle .= "> " . $lang['Disable'] . $lang['BBCode'] . $lang['in_this_post']; + $template->assign_block_vars("bbcode_checkbox", array()); } else { - $bbcode_status = $lang['BBCode'] . $lang['is_OFF']; + $bbcode_status = $lang['OFF']; } + // + // Smilies toggle selection + // if($board_config['allow_smilies']) { $smilies_status = $lang['ON']; - $smile_toggle = '<input type="checkbox" name="disable_smile" '; - if($disable_smilies) - { - $smile_toggle .= "checked"; - } - $smile_toggle .= "> " . $lang['Disable'] . $lang['Smilies'] . $lang['in_this_post']; + $template->assign_block_vars("smilies_checkbox", array()); } else { $smilies_status = $lang['OFF']; } - $sig_toggle = '<input type="checkbox" name="attach_sig" '; - if($attach_sig) + // + // Signature toggle selection - only show if + // the user has a signature + // + if( $user_sig != "" ) { - $sig_toggle .= "checked"; + $template->assign_block_vars("signature_checkbox", array()); } - $sig_toggle .= "> " . $lang['Attach_signature']; if($mode == 'post') { @@ -863,30 +1436,31 @@ else if($mode == "post" || $mode == "reply" || $mode == "edit") $post_a = $lang['Edit_message']; } - $username_input = '<input type="text" name="username_search" value="' . $username_search . '">'; - $subject_input = '<input type="text" name="subject" value="' . $subject . '" size="50" maxlength="255">'; - $message_input = '<textarea name="message" rows="10" cols="40" wrap="virtual">' . $message . '</textarea>'; - - $s_hidden_fields = "<input type=\"hidden\" name=\"folder\" value=\"$folder\">"; - $s_hidden_fields .= "<input type=\"hidden\" name=\"mode\" value=\"$mode\">"; + $s_hidden_fields = "<input type=\"hidden\" name=\"folder\" value=\"$folder\" />"; + $s_hidden_fields .= "<input type=\"hidden\" name=\"mode\" value=\"$mode\" />"; if($mode == "edit") { - $s_hidden_fields .= "<input type=\"hidden\" name=\"" . POST_POST_URL . "\" value=\"$privmsgs_id\">"; + $s_hidden_fields .= "<input type=\"hidden\" name=\"" . POST_POST_URL . "\" value=\"$privmsg_id\" />"; } $template->assign_vars(array( - "S_USERNAME_INPUT" => $username_input, - - "SUBJECT_INPUT" => $subject_input, - "MESSAGE_INPUT" => $message_input, - "HTML_STATUS" => $html_status, - "HTML_TOGGLE" => $html_toggle, - "SMILIES_STATUS" => $smilies_status, - "SMILE_TOGGLE" => $smile_toggle, - "SIG_TOGGLE" => $sig_toggle, - "NOTIFY_TOGGLE" => $notify_toggle, - "BBCODE_TOGGLE" => $bbcode_toggle, - "BBCODE_STATUS" => $bbcode_status, + "SUBJECT" => preg_replace($html_entities_match, $html_entities_replace, $privmsg_subject), + "USERNAME" => preg_replace($html_entities_match, $html_entities_replace, $to_username), + "MESSAGE" => $privmsg_message, + "HTML_STATUS" => $html_status, + "SMILIES_STATUS" => $smilies_status, + "BBCODE_STATUS" => $bbcode_status, + "FORUM_NAME" => $lang['Private_message'], + + "BOX_NAME" => $l_box_name, + "INBOX_IMG" => $inbox_img, + "SENTBOX_IMG" => $sentbox_img, + "OUTBOX_IMG" => $outbox_img, + "SAVEBOX_IMG" => $savebox_img, + "INBOX_LINK" => $inbox_url, + "SENTBOX_LINK" => $sentbox_url, + "OUTBOX_LINK" => $outbox_url, + "SAVEBOX_LINK" => $savebox_url, "L_SUBJECT" => $lang['Subject'], "L_MESSAGE_BODY" => $lang['Message_body'], @@ -900,11 +1474,20 @@ else if($mode == "post" || $mode == "reply" || $mode == "edit") "L_HTML_IS" => $lang['HTML'] . " " . $lang['is'], "L_BBCODE_IS" => $lang['BBCode'] . " " . $lang['is'], "L_SMILIES_ARE" => $lang['Smilies'] . " " . $lang['are'], - - "S_ALPHA_SELECT" => $user_alpha_select, + "L_DISABLE_HTML" => $lang['Disable'] . $lang['HTML'] . $lang['in_this_post'], + "L_DISABLE_BBCODE" => $lang['Disable'] . $lang['BBCode'] . $lang['in_this_post'], + "L_DISABLE_SMILIES" => $lang['Disable'] . $lang['Smilies'] . $lang['in_this_post'], + "L_ATTACH_SIGNATURE" => $lang['Attach_signature'], + + "S_HTML_CHECKED" => (!$html_on) ? "checked=\"checked\"" : "", + "S_BBCODE_CHECKED" => (!$bbcode_on) ? "checked=\"checked\"" : "", + "S_SMILIES_CHECKED" => (!$smilies_on) ? "checked=\"checked\"" : "", + "S_SIGNATURE_CHECKED" => ($attach_sig) ? "checked=\"checked\"" : "", "S_NAMES_SELECT" => $user_names_select, + "S_HIDDEN_FORM_FIELDS" => $s_hidden_fields, "S_POST_ACTION" => append_sid("privmsg.$phpEx"), - "S_HIDDEN_FORM_FIELDS" => $s_hidden_fields) + + "U_VIEW_FORUM" => append_sid("privmsg.$phpEx")) ); $template->pparse("body"); @@ -912,167 +1495,16 @@ else if($mode == "post" || $mode == "reply" || $mode == "edit") include($phpbb_root_path . 'includes/page_tail.'.$phpEx); } -else if( ( isset($HTTP_POST_VARS['delete']) && !empty($HTTP_POST_VARS['mark']) ) || !empty($HTTP_POST_VARS['deleteall']) ) -{ - if(!$userdata['session_logged_in']) - { - header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=inbox")); - } - - - if(isset($HTTP_POST_VARS['delete'])) - { - $delete_ary = $HTTP_POST_VARS['mark']; - } - else if(!empty($HTTP_POST_VARS['deleteall'])) - { - switch($folder) - { - case 'inbox': - $delete_type = "privmsgs_to_userid = " . $userdata['user_id'] . " AND ( - privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " )"; - break; - case 'outbox': - $delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_NEW_MAIL; - break; - case 'sentbox': - $delete_type = "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_SENT_MAIL; - break; - case 'savebox': - $delete_type = "( privmsgs_from_userid = " . $userdata['user_id'] . " OR privmsgs_to_userid = " . $userdata['user_id'] . " ) - AND privmsgs_type = " . PRIVMSGS_SAVED_MAIL; - break; - } - - $deleteall_sql = "SELECT privmsgs_id - FROM " . PRIVMSGS_TABLE . " - WHERE " . $delete_type; - - if(!$del_list_status = $db->sql_query($deleteall_sql)) - { - message_die(GENERAL_ERROR, "Could not obtain id list to delete all messages.", "", __LINE__, __FILE__, $deleteall_sql); - } - - $delete_list = $db->sql_fetchrowset($del_list_status); - for($i = 0; $i < count($delete_list); $i++) - { - $delete_ary[] = $delete_list[$i]['privmsgs_id']; - } - unset($delete_list); - unset($delete_type); - } - - $delete_sql = "DELETE FROM " . PRIVMSGS_TABLE . " - WHERE "; - $delete_text_sql = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . " - WHERE "; - - for($i = 0; $i < count($delete_ary); $i++) - { - $delete_sql .= "privmsgs_id = " . $delete_ary[$i] . " "; - $delete_text_sql .= "privmsgs_text_id = " . $delete_ary[$i] . " "; - - if($i < count($delete_ary) -1) - { - $delete_sql .= "OR "; - $delete_text_sql .= "OR "; - } - } - - $delete_sql .= "AND "; - - switch($folder) - { - case 'inbox': - $delete_sql .= "privmsgs_to_userid = " . $userdata['user_id'] . " AND ( - privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " )"; - break; - case 'outbox': - $delete_sql .= "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_NEW_MAIL; - break; - case 'sentbox': - $delete_sql .= "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_SENT_MAIL; - break; - case 'savebox': - $delete_sql .= "( privmsgs_from_userid = " . $userdata['user_id'] . " OR privmsgs_to_userid = " . $userdata['user_id'] . " ) - AND privmsgs_type = " . PRIVMSGS_SAVED_MAIL; - break; - } - - if(!$del_status = $db->sql_query($delete_sql, BEGIN_TRANSACTION)) - { - message_die(GENERAL_ERROR, "Could not delete private message info.", "", __LINE__, __FILE__, $delete_sql); - } - else - { - if(!$del_text_status = $db->sql_query($delete_text_sql, END_TRANSACTION)) - { - message_die(GENERAL_ERROR, "Could not delete private message text.", "", __LINE__, __FILE__, $delete_text_sql); - } - } - -} -else if( ( isset($HTTP_POST_VARS['save']) && !empty($HTTP_POST_VARS['mark']) ) && $folder != "savebox" && $folder != "outbox") -{ - if(!$userdata['session_logged_in']) - { - header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=inbox")); - } - - $saved_sql = "UPDATE " . PRIVMSGS_TABLE . " - SET privmsgs_type = " . PRIVMSGS_SAVED_MAIL . " - WHERE "; - - if(isset($HTTP_POST_VARS['save'])) - { - $saved_ary = $HTTP_POST_VARS['mark']; - - for($i = 0; $i < count($saved_ary); $i++) - { - $saved_sql .= "privmsgs_id = " . $saved_ary[$i] . " "; - if($i < count($saved_ary) -1) - { - $saved_sql .= "OR "; - } - } - $saved_sql .= "AND "; - } - - switch($folder) - { - case 'inbox': - $saved_sql .= "privmsgs_to_userid = " . $userdata['user_id'] . " AND ( - privmsgs_type = " . PRIVMSGS_READ_MAIL . " OR privmsgs_type = " . PRIVMSGS_NEW_MAIL . " )"; - break; - case 'sentbox': - $saved_sql .= "privmsgs_from_userid = " . $userdata['user_id'] . " AND privmsgs_type = " . PRIVMSGS_READ_MAIL; - break; - } - - if(!$save_status = $db->sql_query($saved_sql)) - { - message_die(GENERAL_ERROR, "Could not save private messages.", "", __LINE__, __FILE__, $saved_sql); - } - - $folder = "savebox"; - -} -else if($HTTP_POST_VARS['cancel']) -{ - $folder = "inbox"; - $mode = ""; - -} // // Default page // - if(!$userdata['session_logged_in']) { - header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=inbox")); + header("Location: " . append_sid("login.$phpEx?forward_page=privmsg.$phpEx&folder=inbox")); } +$page_title = $lang['Private_Messaging']; include($phpbb_root_path . 'includes/page_header.'.$phpEx); // @@ -1082,36 +1514,30 @@ $template->set_filenames(array( "body" => "privmsgs_body.tpl", "jumpbox" => "jumpbox.tpl") ); + $jumpbox = make_jumpbox(); $template->assign_vars(array( - "JUMPBOX_LIST" => $jumpbox, - "SELECT_NAME" => POST_FORUM_URL) + "L_GO" => $lang['Go'], + "L_JUMP_TO" => $lang['Jump_to'], + "L_SELECT_FORUM" => $lang['Select_forum'], + + "S_JUMPBOX_LIST" => $jumpbox, + "S_JUMPBOX_ACTION" => append_sid("viewforum.$phpEx")) ); $template->assign_var_from_handle("JUMPBOX", "jumpbox"); // -// These may well be better handled in the -// templates +// New message // -$inbox_url = "<img src=\"images/msg_inbox.gif\" border=\"0\"> "; -$inbox_url .= ($folder != "inbox") ? "<a href=\"" . append_sid("privmsg.$phpEx?folder=inbox") . "\"><b>" . $lang['Inbox'] . "</b></a>" : "<b>" . $lang['Inbox'] . "</b>"; - -$sentbox_url = "<img src=\"images/msg_sentbox.gif\" border=\"0\"> "; -$sentbox_url .= ($folder != "sentbox") ? "<a href=\"" . append_sid("privmsg.$phpEx?folder=sentbox") . "\"><b>" . $lang['Sent'] . "</b></a>" : "<b>" . $lang['Sent'] . "</b>"; - -$outbox_url = "<img src=\"images/msg_outbox.gif\" border=\"0\"> "; -$outbox_url .= ($folder != "outbox") ? "<a href=\"" . append_sid("privmsg.$phpEx?folder=outbox") . "\"><b>" . $lang['Outbox'] . "</b></a>" : "<b>" . $lang['Outbox'] . "</b>"; - -$savebox_url = "<img src=\"images/msg_savebox.gif\" border=\"0\"> "; -$savebox_url .= ($folder != "savebox") ? "<a href=\"" . append_sid("privmsg.$phpEx?folder=savebox") . "\"><b>" . $lang['Saved'] . "</b></a>" : "<b>" . $lang['Saved'] . "</b>"; - -$post_new_mesg_url = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"templates/PSO/images/post.gif\" border=\"1\"></a>"; +$post_new_mesg_url = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['post_new'] . "\" alt=\"" . $lang['Post_new_message'] . "\" border=\"0\" /></a>"; // // General SQL to obtain messages // -$sql_tot = "SELECT COUNT(privmsgs_id) AS total FROM " . PRIVMSGS_TABLE . " "; -$sql = "SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username FROM " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " u "; +$sql_tot = "SELECT COUNT(privmsgs_id) AS total + FROM " . PRIVMSGS_TABLE . " "; +$sql = "SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username + FROM " . PRIVMSGS_TABLE . " pm, " . USERS_TABLE . " u "; switch($folder) { @@ -1145,19 +1571,24 @@ switch($folder) break; case 'savebox': - $sql_tot .= "WHERE privmsgs_to_userid = " . $userdata['user_id'] . " - AND privmsgs_type = " . PRIVMSGS_SAVED_MAIL; - - $sql .= "WHERE pm.privmsgs_to_userid = " . $userdata['user_id'] . " - AND u.user_id = pm.privmsgs_from_userid - AND pm.privmsgs_type = " . PRIVMSGS_SAVED_MAIL; + $sql_tot .= "WHERE ( ( privmsgs_to_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " ) + OR ( privmsgs_from_userid = " . $userdata['user_id'] . " + AND privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . ") )"; + + $sql .= "WHERE ( ( pm.privmsgs_to_userid = " . $userdata['user_id'] . " + AND pm.privmsgs_type = " . PRIVMSGS_SAVED_IN_MAIL . " + AND u.user_id = pm.privmsgs_from_userid ) + OR ( pm.privmsgs_from_userid = " . $userdata['user_id'] . " + AND pm.privmsgs_type = " . PRIVMSGS_SAVED_OUT_MAIL . " + AND u.user_id = pm.privmsgs_from_userid ) )"; break; } // // Show messages over previous x days/months // -if(!empty($HTTP_POST_VARS['msgdays']) || !empty($HTTP_GET_VARS['msgdays'])) +if( $submit_msgdays && ( !empty($HTTP_POST_VARS['msgdays']) || !empty($HTTP_GET_VARS['msgdays']) ) ) { $msg_days = (!empty($HTTP_POST_VARS['msgdays'])) ? $HTTP_POST_VARS['msgdays'] : $HTTP_GET_VARS['msgdays']; $min_msg_time = time() - ($msg_days * 86400); @@ -1177,106 +1608,220 @@ else } $sql .= $limit_msg_time . " ORDER BY pm.privmsgs_date DESC LIMIT $start, " . $board_config['topics_per_page']; +$sql_all_tot = $sql_tot; $sql_tot .= $limit_msg_time_total; // +// Get messages +// +if( !$pm_tot_status = $db->sql_query($sql_tot) ) +{ + message_die(GENERAL_ERROR, "Could not query private message information.", "", __LINE__, __FILE__, $sql_tot); +} +else +{ + if( $db->sql_numrows($pm_tot_status) ) + { + $row = $db->sql_fetchrow($pm_tot_status); + $pm_total = $row['total']; + } +} + +if( !$pm_all_status = $db->sql_query($sql_all_tot) ) +{ + message_die(GENERAL_ERROR, "Could not query private message information.", "", __LINE__, __FILE__, $sql_tot); +} +else +{ + if( $db->sql_numrows($pm_all_status) ) + { + $row = $db->sql_fetchrow($pm_all_status); + $pm_all_total = $row['total']; + } +} + +if( !$pm_status = $db->sql_query($sql) ) +{ + message_die(GENERAL_ERROR, "Could not query private messages.", "", __LINE__, __FILE__, $sql); +} +$pm_count = $db->sql_numrows($pm_status); + +$pm_list = $db->sql_fetchrowset($pm_status); + +// // Build select box // $previous_days = array(0, 1, 7, 14, 30, 90, 180, 364); $previous_days_text = array($lang['All_Messages'], "1 " . $lang['Day'], "7 " . $lang['Days'], "2 " . $lang['Weeks'], "1 " . $lang['Month'], "3 ". $lang['Months'], "6 " . $lang['Months'], "1 " . $lang['Year']); -$select_msg_days = "<select name=\"msgdays\">"; +$select_msg_days = ""; for($i = 0; $i < count($previous_days); $i++) { - $selected = ($msg_days == $previous_days[$i]) ? " selected" : ""; + $selected = ($msg_days == $previous_days[$i]) ? " selected=\"selected\"" : ""; $select_msg_days .= "<option value=\"" . $previous_days[$i] . "\"$selected>" . $previous_days_text[$i] . "</option>"; } -$select_msg_days .= "</select>"; + +// +// Define correct icons +// +if( $folder == "inbox" ) +{ + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=reply&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_replymsg'] . "\" alt=\"" . $lang['Post_reply_pm'] . "\" border=\"0\"></a>"; + $quote_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=quote&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_quotemsg'] . "\" alt=\"" . $lang['Post_quote_pm'] . "\" border=\"0\"></a>"; + $edit_pm_img = ""; + + $l_box_name = $lang['Inbox']; +} +else if( $folder == "outbox" ) +{ + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = ""; + $quote_pm_img = ""; + $edit_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=edit&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_editmsg'] . "\" alt=\"" . $lang['Edit_pm'] . "\" border=\"0\"></a>"; + + $l_box_name = $lang['Outbox']; +} +else if( $folder == "savebox" ) +{ + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=reply&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_replymsg'] . "\" alt=\"" . $lang['Post_reply_pm'] . "\" border=\"0\"></a>"; + $quote_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=quote&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_quotemsg'] . "\" alt=\"" . $lang['Post_quote_pm'] . "\" border=\"0\"></a>"; + $edit_pm_img = ""; + + $l_box_name = $lang['Savedbox']; +} +else if( $folder == "sentbox" ) +{ + $post_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=post") . "\"><img src=\"" . $images['pm_postmsg'] . "\" alt=\"" . $lang['Post_new_pm'] . "\" border=\"0\"></a>"; + $reply_pm_img = ""; + $quote_pm_img = "<a href=\"" . append_sid("privmsg.$phpEx?mode=quote&" . POST_POST_URL . "=$privmsg_id") . "\"><img src=\"" . $images['pm_quotemsg'] . "\" alt=\"" . $lang['Post_quote_pm'] . "\" border=\"0\"></a>"; + $edit_pm_img = ""; + + $l_box_name = $lang['Sentbox']; +} + +// +// Output data for inbox status +// +if( $folder != "outbox" ) +{ + $inbox_limit_pct = round(( $pm_all_total / $board_config['max_' . $folder . '_privmsgs'] ) * 100); + $inbox_limit_img_length = round(( $pm_all_total / $board_config['max_' . $folder . '_privmsgs'] ) * $board_config['privmsg_graphic_length']); + $inbox_limit_remain = $board_config['max_' . $folder . '_privmsgs'] - $pm_all_total; + + $template->assign_block_vars("box_size_notice", array()); + + $l_box_size_status = $lang['Your'] . " " . $l_box_name . " " . $lang['is'] . " " . $inbox_limit_pct . "% " . $lang['full']; + +} // // Dump vars to template // $template->assign_vars(array( - "INBOX" => $inbox_url, - "SENTBOX" => $sentbox_url, - "OUTBOX" => $outbox_url, - "SAVEBOX" => $savebox_url, - + "BOX_NAME" => $l_box_name, + "INBOX_IMG" => $inbox_img, + "SENTBOX_IMG" => $sentbox_img, + "OUTBOX_IMG" => $outbox_img, + "SAVEBOX_IMG" => $savebox_img, + "INBOX_LINK" => $inbox_url, + "SENTBOX_LINK" => $sentbox_url, + "OUTBOX_LINK" => $outbox_url, + "SAVEBOX_LINK" => $savebox_url, + + "POST_PM_IMG" => $post_pm_img, + + "INBOX_LIMIT_IMG_WIDTH" => $inbox_limit_img_length, + "INBOX_LIMIT_PERCENT" => $inbox_limit_pct, + + "BOX_SIZE_STATUS" => $l_box_size_status, + + "L_INBOX" => $lang['Inbox'], + "L_OUTBOX" => $lang['Outbox'], + "L_SENTBOX" => $lang['Sent'], + "L_SAVEBOX" => $lang['Saved'], "L_MARK" => $lang['Mark'], "L_FLAG" => $lang['Flag'], "L_SUBJECT" => $lang['Subject'], "L_DATE" => $lang['Date'], "L_DISPLAY_MESSAGES" => $lang['Display_messages'], - "L_FROM_OR_TO" => (($folder == "inbox" || $folder == "savebox") ? $lang['From'] : $lang['To']), + "L_FROM_OR_TO" => ($folder == "inbox" || $folder == "savebox") ? $lang['From'] : $lang['To'], + "L_MARK_ALL" => $lang['Mark_all'], + "L_UNMARK_ALL" => $lang['Unmark_all'], - "S_HIDDEN_FIELDS" => "", "S_PRIVMSGS_ACTION" => append_sid("privmsg.$phpEx?folder=$folder"), + "S_HIDDEN_FIELDS" => "", "S_POST_NEW_MSG" => $post_new_mesg_url, - "S_SELECT_MSG_DAYS" => $select_msg_days, - "S_MSG_DAYS_ACTION" => append_sid("privmsg.$phpEx?folder=$folder&start=$start"), + "S_MSG_DAYS_OPTIONS" => $select_msg_days, "U_POST_NEW_TOPIC" => $post_new_topic_url) ); -// -// Get messages -// -if(!$pm_tot_status = $db->sql_query($sql_tot)) -{ - message_die(GENERAL_ERROR, "Could not query private message information.", "", __LINE__, __FILE__, $sql_tot); -} -if(!$pm_status = $db->sql_query($sql)) -{ - message_die(GENERAL_ERROR, "Could not query private messages.", "", __LINE__, __FILE__, $sql); -} -$pm_total = $db->sql_numrows($pm_tot_status); -$pm_count = $db->sql_numrows($pm_status); -$pm_list = $db->sql_fetchrowset($pm_status); // // Okay, let's build the correct folder // -if($pm_count) +if( $pm_count ) { for($i = 0; $i < $pm_count; $i++) { $privmsg_id = $pm_list[$i]['privmsgs_id']; $flag = $pm_list[$i]['privmsgs_type']; - $icon_flag = ($flag == PRIVMSGS_READ_MAIL || $flag == PRIVMSGS_SAVED_MAIL || $flag == PRIVMSGS_SENT_MAIL) ? "<img src=\"images/msg_read.gif\">" : "<img src=\"images/msg_unread.gif\">"; + $icon_flag = ($flag == PRIVMSGS_NEW_MAIL ) ? "<img src=\"" . $images['pm_unreadmsg'] . "\" alt=\"" . $lang['Unread_message'] . "\" border=\"0\">" : "<img src=\"" . $images['pm_readmsg'] . "\" alt=\"" . $lang['Read_message'] . "\" border=\"0\">"; $msg_userid = $pm_list[$i]['user_id']; - $msg_username = stripslashes($pm_list[$i]['username']); + $msg_username = $pm_list[$i]['username']; - $u_from_user_profile = append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$msg_userid"); + $u_from_user_profile = append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$msg_userid"); - $msg_subject = stripslashes($pm_list[$i]['privmsgs_subject']); - $u_subject = append_sid("privmsg.$phpEx?folder=$folder&mode=read&" . POST_POST_URL . "=$privmsg_id"); + $msg_subject = $pm_list[$i]['privmsgs_subject']; + + if( count($orig_word) ) + { + $msg_subject = preg_replace($orig_word, $replacement_word, $msg_subject); + } + + $u_subject = append_sid("privmsg.$phpEx?folder=$folder&mode=read&" . POST_POST_URL . "=$privmsg_id"); $msg_date = create_date($board_config['default_dateformat'], $pm_list[$i]['privmsgs_date'], $board_config['board_timezone']); - if($flag == PRIVMSGS_NEW_MAIL && $folder == "inbox") + if( $flag == PRIVMSGS_NEW_MAIL && $folder == "inbox" ) { $msg_subject = "<b>" . $msg_subject . "</b>"; $msg_date = "<b>" . $msg_date . "</b>"; $msg_username = "<b>" . $msg_username . "</b>"; } - $row_color = (!($i % 2)) ? "#".$theme['td_color1'] : "#".$theme['td_color2']; + $row_color = (!($i % 2)) ? $theme['td_color1'] : $theme['td_color2']; + $row_class = (!($i % 2)) ? $theme['td_class1'] : $theme['td_class2']; $template->assign_block_vars("listrow", array( + "ROW_COLOR" => "#". $row_color, + "ROW_CLASS" => $row_class, "ICON_FLAG_IMG" => $icon_flag, "FROM" => $msg_username, "SUBJECT" => $msg_subject, "DATE" => $msg_date, - "ROW_COLOR" => $row_color, - "S_DEL_CHECKBOX" => "<input type=\"checkbox\" name=\"mark[]\" value=\"$privmsg_id\">", + "S_MARK_ID" => $privmsg_id, "U_READ" => $u_subject, "U_FROM_USER_PROFILE" => $u_from_user_profile) ); } // for ... + + $template->assign_vars(array( + "PAGINATION" => generate_pagination("privmsg.$phpEx?folder=$folder", $pm_total, $board_config['topics_per_page'], $start), + "ON_PAGE" => (floor($start/$board_config['topics_per_page'])+1), + "TOTAL_PAGES" => ceil(($pm_total)/$board_config['topics_per_page']), + + "L_OF" => $lang['of'], + "L_PAGE" => $lang['Page'], + "L_GOTO_PAGE" => $lang['Goto_page']) + ); + } else { @@ -1287,16 +1832,6 @@ else $template->assign_block_vars("nomessages", array() ); } -$template->assign_vars(array( - "PAGINATION" => generate_pagination("privmsg.$phpEx?folder=$folder", $pm_total, $board_config['topics_per_page'], $start), - "ON_PAGE" => (floor($start/$board_config['topics_per_page'])+1), - "TOTAL_PAGES" => ceil(($pm_total)/$board_config['topics_per_page']), - - "L_OF" => $lang['of'], - "L_PAGE" => $lang['Page'], - "L_GOTO_PAGE" => $lang['Goto_page']) -); - $template->pparse("body"); include($phpbb_root_path . 'includes/page_tail.'.$phpEx); |
