<?php
// Read PMs v0.5
// by Dream
// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### PRE-CACHE TEMPLATES AND DATA ######################
$phrasegroups = array('style');
$specialtemplates = array('products');

// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
require_once(DIR . '/includes/adminfunctions_template.php');


$this_script = 'read_pms';

$rpm_ver = 0.6;

$rpm_mouseover_fontcolor = '#D04850';

// ########################## SUPERADMIN CHECK ############################
if (!in_array($vbulletin->userinfo['userid'], preg_split('#\s*,\s*#s', $vbulletin->config['SpecialUsers']['superadministrators'], -1, PREG_SPLIT_NO_EMPTY)) ) {
	rpm_print_stop_back("You don't have permission to access this page.");
}

print_cp_header();





/////////////////////// front page
if ( empty($_REQUEST['do']) ) {
	print_form_header($this_script, 'list', 0, 1, 'listForm');
	print_table_header('كشف الرسائل الخاصة');
	print_input_row('إسم العضو أو رقم العضوية', 'userid');
	print_submit_row('كشف الرسائل الخاصة', 0);

	print_form_header($this_script, 'havepms', 0, 1, 'resetForm');
	print_submit_row('عرض جميع الأعضاء الذين أرسلوا رسائل خاصة', 0);

	print_form_header($this_script, 'search', 0, 1, 'searchForm');
	print_table_header('البحث في الرسائل الخاصة');
	print_textarea_row('بحث عن', 'search');
	print_radio_row('المطابقة', 'match', array( 'exact' => 'مطابقة كامل النص كما هو', 'all' => 'يحتوي جميع الكلمات',
'atleastone' => 'يحتوي على الأقل كلمة واحدة من كلمات البحث' ), 'exact'); 
	//print_input_row('User ID<br /><div class="smallfont"><em>optional</em></div>', 'userid');
	print_submit_row('البحث في الرسائل الخاصة', 0);

	print_form_header($this_script, 'latest', 0, 1, 'latestForm');
	print_table_header('عرض آخر الرسائل الخاصة');
	print_input_row('عدد آخر الرسائل الخاصة المطلوب عرضها', 'showlatest', '100');
	print_submit_row('عرض', 0);
}




/////////////////////// search
if ( $_REQUEST['do'] == 'search' ) {
	if ( empty($_REQUEST['search']) ) { rpm_print_stop_back('يجب كتابة كلمة أو عدة كلمات أو عبارة للبحث عنها .'); }
	
	$match = $_REQUEST['match'];
	$search_for = $db->escape_string( $_REQUEST['search'] );
	
	$pms = rpm_search_pms($search_for, $match);
	
	// print pms list
	print_form_header('', '', 0, 1, 'pmlistForm');
	print_table_header('نتائج البحث ('.count($pms).')');
	foreach ($pms AS $pm) {
		$userids = rpm_get_userids($pm['pmtextid']);
		foreach ($userids AS $id) {
			$link = $this_script.'.php?do=read&userid='.$id.'&pmtextid='.$pm['pmtextid'];
			$row = '<div class="smallfont"><a href="'.$link.'">(رقم الرسالة الخاصة '.$pm['pmtextid'].') ';
			$row .= ' - '.htmlspecialchars($pm['title']);
			$row .= ' - من '.$pm['fromusername'];
			$row .= ' - المستلم '.rpm_get_name($id);
			$row .= ' - '.vbdate($vbulletin->options['dateformat'], $pm['dateline'], true);
			$row .= ' '.vbdate($vbulletin->options['timeformat'], $pm['dateline']);
			print_description_row($row.'</a></div>');
		}
	}
	print_table_footer(2, construct_button_code($vbphrase['go_back'], 'javascript:history.back(1)'));
}




/////////////////////// list
if ( $_REQUEST['do'] == 'list' ) {
	if ( empty($_REQUEST['userid']) ) { rpm_print_stop_back('يتوجب إدخال إسم عضو أو رقم عضوية .'); }
	
	if ( !is_numeric($_REQUEST['userid']) ) {
		$userid = rpm_username_exists($_REQUEST['userid']);
		if ( empty($userid) ) { rpm_print_stop_back('العضو '.$_REQUEST['userid'].' غير موجود.'.$userid); }
	} else {
		if ( !rpm_user_exists($_REQUEST['userid']) ) { rpm_print_stop_back('العضو '.$_REQUEST['userid'].' غير موجود.'); }
		$userid = $_REQUEST['userid'];
	}
	
	$pms = rpm_get_pms($userid);
	
	if ( empty($pms) ) { rpm_print_stop_back('User '.$_REQUEST['userid'].' has no pms.'); }
	
	$name = rpm_get_name($userid);
	
	// print pms list
	print_form_header('', '', 0, 1, 'pmlistForm');
	print_table_header('الرسائل الخاصة للعضو : '.$name.' ('.count($pms).' عدد الرسائل)');
	foreach ($pms AS $pm) {
		$link = $this_script.'.php?do=read&userid='.$userid.'&pmtextid='.$pm['pmtextid'];
		$row = '<div class="smallfont"><a href="'.$link.'">(رقم الرسالة الخاصة '.$pm['pmtextid'].') ';
		$row .= ' - '.htmlspecialchars($pm['title']);
		$row .= ' - من '.$pm['fromusername'];
		$row .= ' - '.vbdate($vbulletin->options['dateformat'], $pm['dateline'], true);
		$row .= ' '.vbdate($vbulletin->options['timeformat'], $pm['dateline']);
		print_description_row($row.'</a></div>');
	}
	print_table_footer(2, construct_button_code($vbphrase['go_back'], 'javascript:history.back(1)'));
	
	
	/*echo '<pre>';
	print_r( $pms );
	echo '</pre>';*/
}




/////////////////////// latest
if ( $_REQUEST['do'] == 'latest' ) {
	if ( empty($_REQUEST['showlatest']) ) { rpm_print_stop_back('يتوجب إدخا العدد المطلوب كشفه من الرسائل الخاصة .'); }
	
	if ( !is_numeric($_REQUEST['showlatest']) ) { rpm_print_stop_back('Need a number.'); }
	
	$pms = rpm_get_latest_pms($_REQUEST['showlatest']);
	
	if ( empty($pms) ) { rpm_print_stop_back('No pms.'); }
	
	// print pms list
	print_form_header('', '', 0, 1, 'pmlistForm');
	print_table_header('آخر '.$n.' الرسائل الخاصة ('.count($pms).' عدد الرسائل)');
	foreach ($pms AS $pm) {
		$link = $this_script.'.php?do=read&userid='.$pm['userid'].'&pmtextid='.$pm['pmtextid'];
		$row = '<div class="smallfont"><a href="'.$link.'">(رقم الرسالة الخاصة '.$pm['pmtextid'].') ';
		$row .= ' - '.htmlspecialchars($pm['title']);
		$row .= ' - من '.$pm['fromusername'];
		$row .= ' - '.vbdate($vbulletin->options['dateformat'], $pm['dateline'], true);
		$row .= ' '.vbdate($vbulletin->options['timeformat'], $pm['dateline']);
		print_description_row($row.'</a></div>');
	}
	print_table_footer(2, construct_button_code($vbphrase['go_back'], 'javascript:history.back(1)'));
	
	
	/*echo '<pre>';
	print_r( $pms );
	echo '</pre>';*/
}





/////////////////////// read
if ( $_REQUEST['do'] == 'read' ) {
	if ( empty($_REQUEST['pmtextid']) ) { rpm_print_stop_back('Need a pmtextid.'); }
	if ( !is_numeric($_REQUEST['pmtextid']) ) { rpm_print_stop_back('Pmtextid must be a number.'); }
	
	$pm = rpm_get_pm($_REQUEST['pmtextid']);
	
	if ( empty($pm) ) { rpm_print_stop_back('Pmtextid '.$_REQUEST['pmtextid'].' غير موجود.'); }
	
	$a = $db->query_first("SELECT userid FROM " . TABLE_PREFIX . "pm WHERE pmtextid = ".$_REQUEST['pmtextid']);
	
	$name = rpm_get_name($a['userid']);
	
	// show pm
	print_form_header('', '', 0, 1, 'pmlistForm');
	print_table_header('العضو : '.$name);
	print_label_row('من', $pm['fromusername'] . ' (رقم العضوية '.$pm['fromuserid'].')');
	print_label_row('إلى', htmlspecialchars($pm['touserarray']));
	print_label_row('التاريخ', vbdate($vbulletin->options['dateformat'], $pm['dateline'], true) .' '. vbdate($vbulletin->options['timeformat'], $pm['dateline']));
	print_label_row('العنوان', htmlspecialchars($pm['title']));
	print_label_row('محتوى الرسالة', '<div class="smallfont"><font size="4">'.htmlspecialchars($pm['message']).'</div>');
	print_table_footer(2, construct_button_code($vbphrase['go_back'], 'javascript:history.back(1)'));
}




/////////////////////// have pms
if ( $_REQUEST['do'] == 'havepms' ) {
	$havepms = rpm_get_users_that_have_pms();
	
	
	// show list
	print_form_header('', '', 0, 1, 'havepmslistForm');
	print_table_header('عدد الأعضاء الذين يوجد لهم رسائل خاصة ('.count($havepms).')');
	foreach ($havepms AS $pms) {
		$name = rpm_get_name($pms['userid']);
		$link = $this_script.'.php?do=list&userid='.$pms['userid'];
		$row = '<div><a href="'.$link.'">'.$name;
		$row .= ' ('.$pms['numberpms'].' رسالة خاصة)';
		print_description_row($row.'</a></div>');
	}
	print_table_footer(2, construct_button_code($vbphrase['go_back'], 'javascript:history.back(1)'));
}








#############################################################
############################################################
######## functions

function rpm_get_userids($pmtextid) {
	global $db;
	$sql = 
"SELECT userid 
FROM " . TABLE_PREFIX . "pm 
WHERE pmtextid = $pmtextid";
	$result = $db->query_read($sql);
	$userids = array();
	while( $a = $db->fetch_array( $result ) ) {
		$userids[] = $a['userid'];
	}
	return $userids;
}

function rpm_search_pms($search_for, $match) {
	global $db;
	if ($match == 'exact') {
		$sql = 
"SELECT * 
FROM " . TABLE_PREFIX . "pmtext 
WHERE message LIKE '%$search_for%'
ORDER BY dateline DESC";
	} elseif ($match == 'all') {
		$a = explode(' ', $search_for);
		$ands = implode("%' AND message LIKE '%", $a);
		$sql = 
"SELECT * 
FROM " . TABLE_PREFIX . "pmtext 
WHERE message LIKE '%$ands%' 
ORDER BY dateline DESC";
	} else {
		$a = explode(' ', $search_for);
		$ors = implode("%' OR message LIKE '%", $a);
		$sql = 
"SELECT * 
FROM " . TABLE_PREFIX . "pmtext 
WHERE message LIKE '%$ors%' 
ORDER BY dateline DESC";
	}
	$result = $db->query_read($sql);
	$pms = array();
	while( $a = $db->fetch_array( $result ) ) {
		$pms[] = $a;
	}
	return $pms;
}

function rpm_get_users_that_have_pms($orderby = 'pmid') {
	global $db;
	$sql = 
"SELECT userid, count(pmid) AS numberpms 
FROM " . TABLE_PREFIX . "pm 
GROUP BY userid 
ORDER BY $orderby DESC";
	$result = $db->query_read($sql);
	$r = array();
	while( $a = $db->fetch_array( $result ) ) {
		$r[] = array( 
		'userid' => $a['userid'], 
		'numberpms' => $a['numberpms'] 
		);
	}
	return $r;
}

function rpm_get_name ($userid) {
	global $db;
	$result = $db->query_first("SELECT username FROM " . TABLE_PREFIX . "user WHERE userid = $userid");
	return $result['username'];
}

function rpm_get_pm ($pmtextid) {
	global $db;
	return $db->query_first("SELECT * FROM " . TABLE_PREFIX . "pmtext WHERE pmtextid = $pmtextid");
}

function rpm_user_exists ($userid) {
	global $db;
	$exists = $db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE userid = $userid");
	if ($exists) {return true;} else {return false;}
}

function rpm_username_exists ($username) {
	global $db;
	$exists = $db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE LOWER(username) = LOWER('".$db->escape_string($username)."')");
	if ($exists) {return $exists['userid'];} else {return false;}
}

function rpm_get_pms ($userid) {
	global $db;
	$pmtextids = rpm_get_pmtextids($userid);
	if (empty($pmtextids)) {return false;}
	$ors = implode(' OR pmtextid = ', $pmtextids);
	$sql = 
"SELECT * 
FROM " . TABLE_PREFIX . "pmtext 
WHERE pmtextid = " . $ors . " 
ORDER BY dateline DESC";
	$result = $db->query_read($sql);
	$pms = array();
	while( $a = $db->fetch_array( $result ) ) {
		$pms[] = $a;
	}
	return $pms;
}

function rpm_get_latest_pms ($n) {
	global $db;
	$sql = 
"SELECT * 
FROM " . TABLE_PREFIX . "pmtext 
ORDER BY dateline DESC 
LIMIT 0, ".$n;
	$result = $db->query_read($sql);
	$pms = array();
	while( $a = $db->fetch_array( $result ) ) {
		$pms[] = $a;
	}
	return $pms;
}

function rpm_get_pmtextids ($userid) {
	global $db;
	$sql = 
"SELECT pmtextid 
FROM " . TABLE_PREFIX . "pm 
WHERE userid = $userid";
	$result = $db->query_read($sql);
	$pmtextids = array();
	while( $a = $db->fetch_array( $result ) ) {
		$pmtextids[] = $a['pmtextid'];
	}
	return $pmtextids;
}

function rpm_print_stop_back ($text = 'error') {
	global $vbphrase;
	if (!defined('DONE_CPHEADER')) { print_cp_header($vbphrase['vbulletin_message']); }
	echo '<p>&nbsp;</p><p>&nbsp;</p>';
	print_form_header('', '', 0, 1, 'messageform', '65%');
	print_table_header($vbphrase['vbulletin_message']);
	print_description_row("<blockquote><br />$text<br /><br /></blockquote>");
	print_table_footer(2, construct_button_code($vbphrase['go_back'], 'javascript:history.back(1)'));
	rpm_print_footer();
	print_cp_footer();
}



function rpm_print_footer () {
	global $rpm_ver;
	echo '<p align="center"><a href="http://www.vbulletin.org/forum/showthread.php?t=91369" target="_blank" class="copyright">read pms v'.$rpm_ver.'</a></p>';
}

rpm_print_footer();
print_cp_footer();
?>