⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pm.php

📁 Discuz功能源码(开源)
💻 PHP
字号:
<?php

/*
	[Discuz!] (C)2001-2009 Comsenz Inc.
	This is NOT a freeware, use is subject to license terms

	$Id: pm.php 17074 2008-12-05 02:35:55Z monkey $
*/

define('CURSCRIPT', 'pm');
define('NOROBOT', TRUE);

require_once './include/common.inc.php';

if(!$discuz_uid) {
	showmessage('not_loggedin', NULL, 'HALTED');
}

include_once DISCUZ_ROOT.'./uc_client/client.php';

if(isset($checknewpm)) {
	@dheader("Expires: 0");
	@dheader("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE);
	@dheader("Pragma: no-cache");
	$ucnewpm = uc_pm_checknew($discuz_uid, 1);
	if($newpm != $ucnewpm['newpm']) {
		$db->query("UPDATE {$tablepre}members SET prompt=prompt|1 WHERE uid='$discuz_uid'", 'UNBUFFERED');
	}
	setcookie('checkpm', 1, $timestamp + 30);
	dsetcookie('pmnum', $ucnewpm['newpm'], $timestamp + 30);
	include_once template('pm_checknew');
	exit;
}

$page = max($page, 1);
$action = !empty($action) ? $action : (isset($uid) || !empty($pmid) ? 'view' : '');

if(!$action) {

	$pmstatus = uc_pm_checknew($discuz_uid, 4);
	$systemnewpm = $pmstatus['newpm'] - $pmstatus['newprivatepm'];
	$filter = !empty($filter) && in_array($filter, array('newpm', 'privatepm', 'systempm', 'announcepm')) ? $filter : ($pmstatus['newpm'] ? 'newpm' : 'privatepm');
	$ucdata = uc_pm_list($discuz_uid, $page, $ppp, !isset($search) ? 'inbox' : 'searchbox', !isset($search) ? $filter : $srchtxt, 200);
	if(!empty($search) && $srchtxt !== '') {
		$filter = '';
		$srchtxtinput = htmlspecialchars(stripslashes($srchtxt));
		$srchtxtenc = rawurlencode($srchtxt);
	} else {
		$multipage = multi($ucdata['count'], $ppp, $page, 'pm.php?filter='.$filter);
	}
	$_COOKIE['checkpm'] && setcookie('checkpm', '', -86400 * 365);

	$pmlist = array();
	$today = $timestamp - ($timestamp + $timeoffset * 3600) % 86400;
	foreach($ucdata['data'] as $pm) {
		$pm['msgfromurl'] = $pm['fromappid'] && $ucapp[$pm['fromappid']]['viewprourl'] ? sprintf($ucapp[$pm['fromappid']]['viewprourl'], $pm['msgfromid']) : 'space.php?uid='.$pm['msgfromid'];
		$pm['daterange'] = 5;
		if($pm['dateline'] >= $today) {
			$pm['daterange'] = 1;
		} elseif($pm['dateline'] >= $today - 86400) {
			$pm['daterange'] = 2;
		} elseif($pm['dateline'] >= $today - 172800) {
			$pm['daterange'] = 3;
		}
		$pm['date'] = gmdate($dateformat, $pm['dateline'] + $timeoffset * 3600);
		$pm['time'] = gmdate($timeformat, $pm['dateline'] + $timeoffset * 3600);
		$pmlist[] = $pm;
	}

} elseif($action == 'viewnew') {

	$newpmnum = uc_pm_checknew($discuz_uid);
	$pmlist = array();
	if($newpmnum) {
		$num = min(5, $newpmnum);
		$morenum = max(0, $newpmnum - 5);
		$ucdata = uc_pm_list($discuz_uid, 1, $num, 'inbox', 'newpm', 0);
		$today = $timestamp - ($timestamp + $timeoffset * 3600) % 86400;
		foreach($ucdata['data'] as $pm) {
			$pm['daterange'] = 5;
			if($pm['dateline'] >= $today) {
				$pm['daterange'] = 1;
			} elseif($pm['dateline'] >= $today - 86400) {
				$pm['daterange'] = 2;
			} elseif($pm['dateline'] >= $today - 172800) {
				$pm['daterange'] = 3;
			}
			$pmlist[] = $pm;
		}
		$db->query("UPDATE {$tablepre}members SET prompt=prompt^1 WHERE uid='$discuz_uid' AND prompt=prompt|1", 'UNBUFFERED');
	}
	include template('pm_viewnew');
	exit;

} elseif($action == 'view') {

	$daterange = empty($daterange) ? 1 : $daterange;
	if(isset($uid)) {
		$ucdata = uc_pm_view($discuz_uid, '', $uid, $daterange);
		$msgfromurl = $pm['fromappid'] && $ucapp[$pm['fromappid']]['viewprourl'] ? sprintf($ucapp[$pm['fromappid']]['viewprourl'], $uid) : 'space.php?uid='.$uid;
		list(,$user) = uc_get_user($uid, 1);
	} elseif(!empty($pmid)) {
		$ucdata = uc_pm_view($discuz_uid, $pmid, 0, $daterange);
		$msgfromurl = '';
	}

	$pmlist = array();
	$pmdate = '';
	foreach($ucdata as $pm) {
		$dateline = $pm['dateline'] + $timeoffset * 3600;
		$pm['date'] = gmdate($dateformat, $dateline);
		if($pmdate != $pm['date']) {
			$lastdaterange = $pm['daterange'] = $pm['date'];
		} else {
			$pm['daterange'] = '';
		}
		$pmdate = $pm['date'];
		$pm['dateline'] = gmdate("$dateformat $timeformat", $dateline);
		$pm['new'] && $pmunread++;
		$pmlist[] = $pm;
	}

	if(!empty($export)) {
		ob_end_clean();
		dheader('Content-Encoding: none');
		dheader('Content-Type: '.(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'application/octetstream' : 'application/octet-stream'));
		dheader('Content-Disposition: attachment; filename="PM_'.$discuz_userss.'_'.$user.'_'.gmdate('ymd_Hi', $timestamp + $timeoffset * 3600).'.htm"');
		dheader('Pragma: no-cache');
		dheader('Expires: 0');
		include template('pm_archive_html');
		exit;
	}

} elseif($action == 'new') {

	if(!$allowsendpm) {
		showmessage('pm_send_disable');
	}

	$username = $subject = $message = '';
	if(!empty($uid)) {
		$username = htmlspecialchars($db->result_first("SELECT username FROM {$tablepre}members WHERE uid='$uid'", 0));
	}
	if(!empty($pmid)) {
		include_once language('misc');
		$ucdata = uc_pm_view($discuz_uid, $pmid);
		$subject = 'Fw: '.$ucdata[0]['subject'];
		$message = ($ucdata[0]['msgfromid'] ? $language['pm_from'].': '.$ucdata[0]['msgfrom'] : $lang['pm_system'])."\n".
			$language['pm_to'].': '.$discuz_userss."\n".
			$language['pm_date'].': '.gmdate("$dateformat $timeformat", $ucdata[0]['dateline'] + $timeoffset * 3600)."\n\n".
			'[quote]'.trim(preg_replace("/(\[quote])(.*)(\[\/quote])/siU", '', $ucdata[0]['message'])).'[/quote]'."\n";
	}

	if($operation == 'trade' && ($tradepid = intval($pid))) {
		include_once language('misc');
		$tradepid = intval($tradepid);
		$trade = $db->fetch_first("SELECT * FROM {$tablepre}trades WHERE pid='$tradepid'");
		if($trade) {
			$subject = htmlspecialchars($language['post_trade_pm_subject'].$trade['subject']);
			$message = '[url='.$boardurl.'viewthread.php?do=tradeinfo&tid='.$trade['tid'].'&pid='.$tradepid.']'.$trade['subject']."[/url]\n";
			$message .= $trade['costprice'] ? $language['post_trade_costprice'].': '.$trade['costprice']."\n" : '';
			$message .= $language['post_trade_price'].': '.$trade['price']."\n";
			$message .= $language['post_trade_transport_type'].': ';
			if($trade['transport'] == 1) {
				$message .= $language['post_trade_transport_seller'];
			} elseif($trade['transport'] == 2) {
				$message .= $language['post_trade_transport_buyer'];
			} elseif($trade['transport'] == 3) {
				$message .= $language['post_trade_transport_virtual'];
			} elseif($trade['transport'] == 4) {
				$message .= $language['post_trade_transport_physical'];
			}
			if($trade['transport'] == 1 or $trade['transport'] == 2 or $trade['transport'] == 4) {
				if(!empty($trade['ordinaryfee'])) {
					$message .= ', '.$language['post_trade_transport_mail'].' '.$trade['ordinaryfee'].' '.$language['payment_unit'];
				}
				if(!empty($trade['expressfee'])) {
					$message .= ', '.$language['post_trade_transport_express'].' '.$trade['expressfee'].' '.$language['payment_unit'];
				}
				if(!empty($trade['emsfee'])) {
					$message .= ', EMS '.$trade['emsfee'].' '.$language['payment_unit'];
				}
			}
			$message .= "\n".$language['post_trade_locus'].': '.$trade['locus']."\n\n";
			$message .= $language['post_trade_pm_buynum'].": \n";
			$message .= $language['post_trade_pm_wishprice'].": \n";
			$message .= $language['post_trade_pm_reason'].": \n";
			$message = htmlspecialchars($message);
		}
	} elseif($operation == 'emailfriend') {
		include_once language('misc');

		$thread = $db->fetch_first("SELECT * FROM {$tablepre}threads WHERE tid='$tid' AND displayorder>='0'");
		$fromuid = $creditspolicy['promotion_visit'] ? '&amp;fromuid='.$discuz_uid : '';
		$threadurl = "{$boardurl}viewthread.php?tid=$tid$fromuid";

		eval("\$message = \"".$language['emailfriend_message']."\";");
	}

	$buddynum = uc_friend_totalnum($discuz_uid, 3);
	$buddyarray = uc_friend_ls($discuz_uid, 1, $buddynum, $buddynum, 3);
	$uids = array();
	foreach($buddyarray as $buddy) {
		$uids[] = $buddy['friendid'];
	}
	$buddyarray = array();
	if($uids) {
		$query = $db->query("SELECT uid, username FROM {$tablepre}members WHERE uid IN (".implodeids($uids).")");
		while($buddy = $db->fetch_array($query)) {
			$buddyarray[] = $buddy;
		}
	}

	include template('pm_send');
	exit;

} elseif($action == 'send' && submitcheck('pmsubmit')) {

	if(!$allowsendpm) {
		showmessage('pm_send_disable');
	}

	if(!$adminid && $newbiespan && (!$lastpost || $timestamp - $lastpost < $newbiespan * 3600)) {
		$query = $db->query("SELECT regdate FROM {$tablepre}members WHERE uid='$discuz_uid'");
		if($timestamp - ($db->result($query, 0)) < $newbiespan * 3600) {
			showmessage('pm_newbie_span');
		}
	}

	!($exempt & 1) && checklowerlimit($creditspolicy['sendpm'], -1);

	if(!empty($uid)) {
		$msgto = intval($uid);
	} else {
		if(!empty($msgtos)) {
			$buddynum = uc_friend_totalnum($discuz_uid, 3);
			$buddyarray = uc_friend_ls($discuz_uid, 1, $buddynum, $buddynum, 3);
			$uids = array();
			foreach($buddyarray as $buddy) {
				$uids[] = $buddy['friendid'];
			}
			$msgto = $p = '';
			foreach($msgtos as $uid) {
				$msgto .= in_array($uid, $uids) ? $p.$uid : '';
				$p = ',';
			}
			if(!$msgto) {
				showmessage('pm_send_nonexistence');
			}
		} else {
			if(!($uid = $db->result_first("SELECT uid FROM {$tablepre}members WHERE username='$msgto'"))) {
				showmessage('pm_send_nonexistence');
			}
			$msgto = $uid;
		}
	}
	if($discuz_uid == $msgto) {
		showmessage('pm_send_self_ignore');
	}
	if(trim($message) === '') {
		showmessage('pm_send_empty');
	}

	include_once './forumdata/cache/cache_bbcodes.php';
	foreach($_DCACHE['smilies']['replacearray'] AS $key => $smiley) {
		$_DCACHE['smilies']['replacearray'][$key] = '[img]'.$boardurl.'images/smilies/'.$_DCACHE['smileytypes'][$_DCACHE['smilies']['typearray'][$key]]['directory'].'/'.$smiley.'[/img]';
	}
	$message = preg_replace($_DCACHE['smilies']['searcharray'], $_DCACHE['smilies']['replacearray'], $message);

	$pmid = uc_pm_send($discuz_uid, $msgto, '', $message, 1, 0, 0);
	if($pmid > 0) {
		!($exempt & 1) && updatecredits($discuz_uid, $creditspolicy['sendpm'], -1);
		if(empty($sendnew)) {
			$pm = uc_pm_viewnode($discuz_uid, 0, $pmid);
			$dateline = $pm['dateline'] + $timeoffset * 3600;
			$pm['daterange'] = gmdate($dateformat, $dateline);
			$pm['daterange'] = $pm['daterange'] != $lastdaterange ? $pm['daterange'] : '';
			$pm['dateline'] = gmdate("$dateformat $timeformat", $dateline);
			include template('header_ajax');
			include template('pm_node');
			include template('footer_ajax');
			exit;
		} else {
			showmessage('pm_send_succeed', '', 1);
			exit;
		}
	} elseif($pmid == -1) {
		showmessage('pm_send_limit1day_error');
	} elseif($pmid == -2) {
		showmessage('pm_send_floodctrl_error');
	} elseif($pmid == -3) {
		showmessage('pm_send_batnotfriend_error');
	} elseif($pmid == -4) {
		showmessage('pm_send_pmsendregdays_error');
	} else {
		showmessage('pm_send_invalid');
	}

} elseif($action == 'del') {

	$uid = !empty($uid) ? (!is_array($uid) ? array($uid) : $uid) : array();
	$pmid = !empty($pmid) ? (!is_array($pmid) ? array($pmid) : $pmid) : array();
	if($uid || $pmid) {
		if(!$readopt) {
			if($uid) {
				uc_pm_deleteuser($discuz_uid, $uid);
			}
			if($pmid) {
				uc_pm_delete($discuz_uid, 'inbox', $pmid);
			}
			showmessage('pm_delete_succeed', "pm.php?filter=$filter&page=$page");
		} else {
			uc_pm_readstatus($discuz_uid, $uid, $pmid, $readopt == 1 ? 0 : 1);
			showmessage($readopt == 1 ? 'pm_mark_read_succeed' : 'pm_mark_unread_succeed', "pm.php?filter=$filter&page=$page");
		}
	} else {
		showmessage('pm_nonexistence', "pm.php?filter=$filter&page=$page");
	}

} elseif($action == 'addblack') {

	if($formhash != FORMHASH) {
		showmessage('undefined_action', NULL, 'HALTED');
	}
	uc_pm_blackls_add($discuz_uid, $user);
	if($user != '{ALL}') {
		showmessage('pm_addblack_succeed', 'pm.php?action=viewblack');
	} else {
		showmessage('pm_addblackall_succeed', 'pm.php?action=viewblack');
	}

} elseif($action == 'delblack') {

	if($formhash != FORMHASH) {
		showmessage('undefined_action', NULL, 'HALTED');
	}
	uc_pm_blackls_delete($discuz_uid, $user);
	showmessage('pm_delblack_succeed', 'pm.php?action=viewblack');

} elseif($action == 'viewblack') {

	$blackls = explode(',', uc_pm_blackls_get($discuz_uid));
	$blackall = in_array('{ALL}', $blackls);

}

include template('pm');

?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -