<?php
/*---------------------------------------------------+
| PHP-Fusion 6 Content Management System
+----------------------------------------------------+
| Copyright © 2002 - 2005 Nick Jones
| Mantas
+----------------------------------------------------*/
require_once "maincore.php";
require_once "subheader.php";
require_once "side_left.php";
include LOCALE.LOCALESET."messages.php";

if (isset($msg_send) && !($msg_send == "" || isNum($msg_send))) fallback(FUSION_SELF);

$settings['privmsg_subject_tooltip']=1;	// use subject tooltip to show message preview
$userdata['user_pm_ban']=0; // set to 1 to ban user from pm'ing. Used if adding new field 'user_pm_ban' to to 'xxx_users' table
$itemsperpage=20; // number of messages to display per page


function builduserclassoptionlist($selected_user_class=1,$restricted=false){
	global $locale;
	$user_class_option_list = "";
	$user_class_option_list .= "<optgroup label='".$locale['442']."'>\n";
	$levels = array(101=>$locale['user1'], $locale['user2'], $locale['user3']);
	foreach ($levels as $level => $modlevel) {
		if ($level==$selected_user_class) { $sel = " selected"; } else { $sel=""; }
		if ($restricted) { $userlevel = iUSER; } else { $userlevel = max(array_keys($levels)); }
		if ($level<=$userlevel) $user_class_option_list.="<option $sel value='".$level."'>".$modlevel."</option>\n";
	}

	$groups_qry = dbquery("SELECT group_id,group_name FROM ".DB_PREFIX."user_groups");
	if (dbrows($groups_qry) != 0) {
	$user_class_option_list .= "<optgroup label='".$locale['443']."'>\n";
		while ($user_groups = dbarray($groups_qry)) {
			$sel = ($user_groups['group_id'] == $selected_user_class ? " selected" : "");
			$user_class_option_list.="<option ".$sel." value='g-".$user_groups['group_id']."'>".$user_groups['group_name']."</option>\n";				
		}
	}
	
	return $user_class_option_list;
}
function builduseroptionlist($selected_user_id=1){
	global $locale;
	$user_option_list = "";
	$levels = array(
		0 => array($locale['user3'], "103"),
		1 => array($locale['user2'], "102"),
		2 => array($locale['user1'], "101")
	);
	while(list($key, $user_level) = each($levels)) {
 		$uresult = dbquery("SELECT * FROM ".DB_PREFIX."users WHERE user_level='".$user_level['1']."' ORDER BY user_name");
		if (dbrows($uresult) > 0) {
			$user_option_list .= "<optgroup label='".$user_level['0']."'>\n";
			while ($udata = dbarray($uresult)) {
				$sel = ($udata['user_id'] == $selected_user_id ? " selected" : "");
				$user_option_list .= "<option ".$sel." value='".$udata['user_id']."'>".$udata['user_name']."</option>\n";
			}
			$user_option_list .= "</optgroup>\n";
		}
	}

	return $user_option_list;
}
function displayMessagePreview($prev_subject,$prev_message,$site_broadcast=false){
	global $locale,$settings,$userdata;
	opentable($locale['438']);
	if (isset($_POST['chk_sitebroadcast'])) {
		$prev_recipient = $locale['408'];
	} else {
		$prev_recipient = "<a href='".BASEDIR."profile.php?lookup=".$userdata['user_id']."' title='".$locale['506']."'>".$userdata['user_name']."</a>";
	}
	$prev_msgdate=strftime($settings['longdate'], time()+($settings['timeoffset']*3600));
	echo "<table cellpadding='0' cellspacing='1' width='100%' class='tbl-border'>
<tr>
<td align='right' class='tbl2' width='1%'>".$locale['406'].":</td>
<td class='tbl1'>".$prev_recipient."</td>
</tr>
<tr>
<td align='right' class='tbl2'>".$locale['407'].":</td>
<td class='tbl1'>".$prev_msgdate."</td>
</tr>
<tr>
<td align='right' class='tbl2'>".$locale['405'].":</td>
<td class='tbl1'>".$prev_subject."</td>
</tr>
<tr>
<td class='tbl1' colspan='2'>".$prev_message."</td>
</tr>
</table>\n";
	closetable();
	tablebreak();
}

$msg_folders = array("inbox" => 0, "sentbox" => 1, "savebox" => 2, "options" => 3);

$folder_status = array(
	array("<b>","</b>","","","","","",""),
	array("","","<b>","</b>","","","",""),
	array("","","","","<b>","</b>","",""),
	array("","","","","","","<b>","</b>")
);

// Save user options
if (isset($saveoptions)) {
	$pm_email_notify = isNum($_POST['pm_email_notify']) ? $_POST['pm_email_notify'] : "0";
	$pm_save_sent = isNum($_POST['pm_save_sent']) ? $_POST['pm_save_sent'] : "0";
	if ($_POST['update_type']=="new") {
		dbquery("INSERT INTO ".$db_prefix."messages_options VALUES ('".$userdata['user_id']."', '$pm_email_notify', '$pm_save_sent', '0', '0', '0')");

	} else {
		dbquery("UPDATE ".$db_prefix."messages_options SET pm_email_notify='$pm_email_notify', pm_save_sent='$pm_save_sent' WHERE user_id='".$userdata['user_id']."'");
	}
	$message = $locale['624'];
}

if (!isset($folder)) $folder="inbox";
if (!array_key_exists($folder,$msg_folders)) $folder="inbox";
$folder_stat=$folder_status[$msg_folders[$folder]];
$result_where_message_folder="message_folder=".$msg_folders[$folder];
if (isset($msg_view)) {
	if (!isNum($msg_view)) fallback("messages.php");
	$result_where_message_id="message_id=".$msg_view;
} elseif (isset($msg_reply)) {
	if (!isNum($msg_reply)) fallback("messages.php");
	$result_where_message_id="message_id=".$msg_reply;
} elseif (isset($_POST['reply_preview'])) {
	if (!isNum($msg_reply_preview)) fallback("messages.php");
	$result_where_message_id="message_id=".$msg_reply_preview;
	$msg_reply = $msg_reply_preview;
} elseif (isset($msg_setread)) {
	if (!isNum($msg_setread)) fallback("messages.php");
	$result_where_message_id="message_id=".$msg_setread;
} elseif (isset($msg_setunread)) {
	if (!isNum($msg_setunread)) fallback("messages.php");
	$result_where_message_id="message_id=".$msg_setunread;
} elseif (isset($msg_save)) {
	if (!isNum($msg_save)) fallback("messages.php");
	$result_where_message_id="message_id=".$msg_save;
	$cnt_messages = '1';
} elseif (isset($msg_unsave)) {
	if (!isNum($msg_unsave)) fallback("messages.php");
	$result_where_message_id="message_id=".$msg_unsave;
	$cnt_messages = '1';
} elseif (isset($msg_delete)) {
	if (!isNum($msg_delete)) fallback("messages.php");
	$result_where_message_id="message_id=".$msg_delete;
} elseif (isset($chk_mark)) {
	if (is_array($chk_mark) && count($chk_mark) > 1) {
		// Count how many elements (messages) in array
		$cnt_messages = count($chk_mark);
		foreach ($chk_mark as $thisnum) { if (!isNum($thisnum)) { fallback("messages.php"); } }
		$result_where_message_id = "message_id IN(".implode(',',$chk_mark).")";
	} else {
		$cnt_messages = '1';
		$result_where_message_id = "message_id=".(isNum($chk_mark[0]) ? $chk_mark[0] : "0");
	}
}

$result_where_message_to="message_to=".$userdata['user_id']; // a double check to make sure the script only operates on the current users messages

$sender_id = (isset($_POST['chk_sitebroadcast']) ? 0 : $userdata['user_id']);

if (isset($_POST['send_preview']) || isset($_POST['reply_preview'])) {
	if(isset($_POST['chk_showsig'])) $checked_sig=" checked";
	if(isset($_POST['chk_disablesmileys'])) $checked_smileys=" checked";
	if(isset($_POST['chk_sendtoall'])) $checked_sendtoall=" checked";
	if(isset($_POST['chk_sitebroadcast'])) $checked_sitebroadcast=" checked";
	$prev_subject=stripinput($_POST['subject']);
	$prev_message=stripinput($_POST['message']);
	if ($checked_sig) $prev_message = $prev_message."\n\n".$userdata['user_sig'];
	if (!$checked_smileys) $prev_message = parsesmileys($prev_message);
	$prev_message = nl2br(parseubb($prev_message));
	// $msg_send = $msg_to;
}
if(iGUEST){ // not logged in - display "iMEMBERs only"
	opentable($locale['400']);
	echo "<div align='center'><br>".$locale['483']."<br><br></div>\n";
} elseif ($userdata['user_pm_ban'] == "1"){ // user is banned from pm'ing
	opentable($locale['400']);
	echo "<div align='center'><br>".$locale['484']."<br><br></div>\n";
} elseif (isset($_POST['btn_cancel'])) { // handle cancel button
	redirect(FUSION_SELF."?folder=".$folder);
} elseif (isset($_POST['btn_setread']) || isset($msg_setread)) { // set message as read
	dbquery("UPDATE ".$db_prefix."messages SET message_read=1 WHERE ".$result_where_message_id." AND ".$result_where_message_to);
	redirect(FUSION_SELF."?folder=".$folder);
} elseif (isset($_POST['btn_setunread']) || isset($msg_setunread)) { // set message as un-read
	dbquery("UPDATE ".$db_prefix."messages SET message_read=0 WHERE ".$result_where_message_id." AND ".$result_where_message_to);
	redirect(FUSION_SELF."?folder=".$folder);
} elseif (isset($_POST['btn_save']) || isset($msg_save)) { // move message to 'savebox' folder
	// Count how many messages in archive/savebox
	$cnt_savebox_qry = dbquery("SELECT COUNT(message_id) cnt_savebox FROM ".$db_prefix."messages WHERE message_to='".$userdata['user_id']."' AND message_folder='2' GROUP BY message_to");
	if (dbrows($cnt_savebox_qry) != 0) { $cnt_savebox = dbresult($cnt_savebox_qry,0); }
	// Get limit
	$limit_savebox = dbresult(dbquery("SELECT pm_savebox FROM ".$db_prefix."messages_options WHERE user_id='0'"),0);
	// Check if current + new messages is > limit
	if ($limit_savebox != '0' && ($cnt_messages + $cnt_savebox) > $limit_savebox) { $error = $locale['629']; }
	if (isset($error)) {
		opentable($locale['627']);
		echo "<div align='center'><br>".$error."<br><br></div>";
	} else {
		$result = dbquery("UPDATE ".$db_prefix."messages SET message_folder=2 WHERE ".$result_where_message_id." AND ".$result_where_message_to);
		redirect(FUSION_SELF."?folder=".$folder);
	}
} elseif (isset($_POST['btn_unsave']) || isset($msg_unsave)){ // move message to 'inbox' folder
	// Count how many messages in inbox
	$cnt_inbox_qry = dbquery("SELECT COUNT(message_id) cnt_inbox FROM ".$db_prefix."messages WHERE message_to='".$userdata['user_id']."' AND message_folder='0' GROUP BY message_to");
	if (dbrows($cnt_inbox_qry) != 0) { $cnt_inbox = dbresult($cnt_inbox_qry,0); }
	// Get limit
	$limit_inbox=dbresult(dbquery("SELECT pm_inbox FROM ".$db_prefix."messages_options WHERE user_id='0'"),0);
	// Check if current + new messages is > limit
	if ( $limit_inbox != '0' && ($cnt_messages + $cnt_inbox) > $limit_inbox) { $error = $locale['629']; }
	
	if (isset($error)) {
		opentable($locale['627']);
		echo "<div align='center'><br>".$error."<br><br></div>";
	} else {
		dbquery("UPDATE ".$db_prefix."messages SET message_folder=0 WHERE ".$result_where_message_id." AND ".$result_where_message_to);
		redirect(FUSION_SELF."?folder=".$folder);
	}
} elseif (isset($_POST['btn_delete']) || isset($msg_delete)) { // delete message
	if (!isset($msg_delete) && !isset($chk_mark)) fallback("messages.php");
	$result = dbquery("DELETE FROM ".$db_prefix."messages WHERE ".$result_where_message_id." AND ".$result_where_message_to);
	redirect(FUSION_SELF."?folder=".$folder);
} elseif (isset($msg_view)) { // view message
$result=dbquery(
		"SELECT tm.*, user_id, user_name, user_avatar FROM ".$db_prefix."messages tm LEFT JOIN ".$db_prefix."users ".
		"ON message_from=user_id WHERE ".$result_where_message_id." AND ".$result_where_message_to
	);
	if (dbrows($result) == "1"){
		$data=dbarray($result);
		if (!$data['user_avatar']) { $data['user_avatar'] = 'noimage.gif'; } 
		$avatar = $data['user_avatar'];
		$subject = $data['message_subject'];
		$message = parseubb(nl2br($data['message_message']));
		if ($data['message_smileys']=="y") $message=parsesmileys($message);
		$msgdate = strftime($settings['longdate'], $data['message_datestamp']+($settings['timeoffset']*3600));
		if ($data['message_read'] == 0) {
			$result=dbquery("UPDATE ".$db_prefix."messages SET message_read='1' WHERE ".$result_where_message_id." AND ".$result_where_message_to);
		}
		$msg_fld_name = array_search($data['message_folder'],$msg_folders);
		opentable($locale['431']." (".$msg_fld_name.")");
		echo "<table cellpadding='0' cellspacing='1' width='100%' class='tbl-border'>
<tr>
<td align='right' class='tbl2' width='1%'>".($data['message_folder']==1?$locale['421']:$locale['406']).":</td>
<td class='tbl1'>";
		if ($data['message_from'] == 0) {
			echo $locale['408'];
		} else {
			echo "<a href='".BASEDIR."profile.php?lookup=".$data['user_id']."' title='".$locale['506']."'><span class='linkimg img'><img src='".BASEDIR."images/avatars/".$avatar."'><br><b>".$data['user_name']."</b></a>";
		}
		echo "</td>
</tr>
<tr>
<td align='right' class='tbl2'>".($data['message_folder']==1?$locale['426']:$locale['407']).":</td><td class='tbl1'>".$msgdate."</td>
</tr>
<tr>
<td align='right' class='tbl2'>".$locale['405'].":</td>
<td class='tbl1'>".$subject."</td>
</tr>
<tr>
<td class='tbl1' colspan='2'>".$message."</td>
</tr>
</table>
<table border='0' cellpadding='0' cellspacing='0' width='100%'>
<tr>
<td class='tbl'><input type='button' class='button' value='".$locale['432']."' onclick=\"location.href='".FUSION_SELF."?folder=".$msg_fld_name."'\"></td>
<td align='right' class='tbl'>\n";
		if ($data['message_folder'] != "1" && $data['user_id'] != "0") {
			echo "<input type='button' class='button' value='".$locale['433']."' onclick=\"location.href='".FUSION_SELF."?msg_reply=".$msg_view."'\"> ";
		}
		if ($data['message_folder']== "2") {
			echo "<input type='button' class='button' value='".$locale['413']."' onclick=\"location.href='".FUSION_SELF."?folder=".$msg_fld_name."&msg_unsave=".$msg_view."'\"> ";
		} else {
			echo "<input type='button' class='button' value='".$locale['412']."' onclick=\"location.href='".FUSION_SELF."?folder=".$msg_fld_name."&msg_save=".$msg_view."'\"> ";
		}
		echo "<input type='button' class='button' value='".$locale['415']."' onclick=\"location.href='".FUSION_SELF."?folder=".$msg_fld_name."&msg_setunread=".$msg_view."'\">
<input type='button' class='button' value='".$locale['416']."' onclick=\"location.href='".FUSION_SELF."?folder=".$msg_fld_name."&msg_delete=".$msg_view."'\">
</td>
</tr>
</table>\n";
	} else {
opentable($locale['480']);
		echo "<div align='center'><br>".$locale['481']."<br><br></div>\n";
	}
} elseif (isset($msg_send)||isset($_POST['send_preview'])){ // write message
	if ($msg_send <> "" && (((int)$msg_send) == $msg_send)){
		$type = "user";
		$uresult=dbquery("SELECT user_name, user_avatar FROM ".$db_prefix."users WHERE user_id='".$msg_send."'");
		$rows=dbrows($uresult);
		if ($rows == 1) $data=dbarray($uresult);
		if (!$data['user_avatar']) { $data['user_avatar'] = 'noimage.gif'; } 
		$avatar = $data['user_avatar'];
	} else {
		$rows = 1;
	}
	if ($rows == 1){
		if (isset($_POST['send_preview'])) displayMessagePreview($prev_subject,$prev_message);
		opentable($locale['420']);
		echo "<script type='text/javascript'>function ValidateForm(frm){if((frm.subject.value=='')||(frm.message.value=='')){alert('".$locale['486']."');return false;}else return true;}</script>
<form name='inputform' method='post' action='".FUSION_SELF."' onSubmit=\"return ValidateForm(this)\">
<input type='hidden' name='folder' value='".$folder."'>
<table cellpadding='0' cellspacing='1' width='100%' class='tbl-border'>
<tr>
<td align='right' width='1%' class='tbl2' style='white-space:nowrap'>".$locale['421'].":</td>
<td class='tbl1'>";
		if (($msg_send <> "") && !isset($prev_message)) {
			echo "<a href='".BASEDIR."profile.php?lookup=".$msg_send."' title='".$locale['506']."'><span class='linkimg img'><img src='".BASEDIR."images/avatars/".$avatar."'><br><b>".$data['user_name']."</b></a><input type='hidden' name='msg_to' value='".$msg_send."'>";
		} else {
			echo "<select name='msg_to' class='textbox'>\n".builduseroptionlist((isset($msg_to) ? $msg_to : 1))."</select>";
			if(iSUPERADMIN){
				if (!isset($msg_to_class)) $msg_to_class = 1;
				echo "<input name='chk_sendtoall' type='checkbox' ".(isset($checked_sendtoall)?"selected":"")." onclick=\"javascript:msg_to.disabled=chk_sendtoall.checked;msg_to.value='';msg_to_class.disabled=!chk_sendtoall.checked;\">".$locale['434'].":
				<select name='msg_to_class' ".(isset($checked_sendtoall)?'':'disabled')." class='textbox'>".builduserclassoptionlist($msg_to_class,true)."</select>";
			}
		}
	 
		echo "</td>
</tr>
<tr>
<td align='right' class='tbl2' class='tbl2' style='white-space:nowrap'>".$locale['405'].":</td>
<td class='tbl1'><input type='text' name='subject' value=\"".(isset($subject) ? stripslashes($subject) : "")."\" maxlength='32' class='textbox' style='width:400px;'></td>
</tr>
<tr>
<td align='right' class='tbl2' valign='top' style='white-space:nowrap'>".$locale['422'].":</td>
<td class='tbl1'><textarea name='message' cols='80' rows='15' class='textbox'>".(isset($message) ? stripslashes($message) : "")."</textarea></td>
</tr>
<tr>
<td align='right' class='tbl2' valign='top'></td>
<td class='tbl1'>
<input type='button' value='b' class='button' style='font-weight:bold;width:25px;' onClick=\"addText('message', '[b]', '[/b]');\">
<input type='button' value='i' class='button' style='font-style:italic;width:25px;' onClick=\"addText('message', '[i]', '[/i]');\">
<input type='button' value='u' class='button' style='text-decoration:underline;width:25px;' onClick=\"addText('message', '[u]', '[/u]');\">
<input type='button' value='url' class='button' style='width:30px;' onClick=\"addText('message', '[url]', '[/url]');\">
<input type='button' value='mail' class='button' style='width:35px;' onClick=\"addText('message', '[mail]', '[/mail]');\">
<input type='button' value='img' class='button' style='width:30px;' onClick=\"addText('message', '[img]', '[/img]');\">
<input type='button' value='center' class='button' style='width:45px;' onClick=\"addText('message', '[center]', '[/center]');\">
<input type='button' value='small' class='button' style='width:40px;' onClick=\"addText('message', '[small]', '[/small]');\">
<input type='button' value='code' class='button' style='width:40px;' onClick=\"addText('message', '[code]', '