www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > bbs/admin/datastate.php

    <?php
!function_exists('adminmsg') && exit('Forbidden');
$basename = $baseurl = "$admin_file?adminjob=datastate";
$type = GetGP('type');
!in_array($type,array('reply','regmen','postmen')) && $type = 'topic';

foreach ($_GET as $key => $value) {
	!in_array($key,array('adminjob','type')) && $baseurl .= "&$key=$value";
}
$basename .= "&type=".$type;

if (empty($action)) {
	
	InitGP(array('c_year'));
	empty($c_year) && $c_year = get_date($timestamp,'Y');
	$p_year = $c_year - 1;
	$n_year = $c_year + 1;
	$sortdb = array();
	$Ntotal = 1;

	$query = $db->query("SELECT month,SUM($type) as $type FROM pw_datastate WHERE year='$c_year' GROUP BY month");
	
	while ($rt = $db->fetch_array($query)) {
		if ($type == 'postmen') {
			$rt[$type] = round($rt[$type]/get_date(PwStrtoTime($c_year.'-'.$rt['month'].'-1'),'t'));
		}
		$rt[$type] > $Ntotal && $Ntotal = $rt[$type];

		$sortdb[$rt['month']] = $rt;
	}
	for ($i = 1; $i <= 12; $i++) {
		if (!isset($sortdb[$i])) {
			$sortdb[$i] = array($type=>0,'w'=>0);
		} else {
			$sortdb[$i]['w'] = 560*$sortdb[$i][$type]/$Ntotal;
		}
	}
	ksort($sortdb);

	include PrintEot('datastate');exit;

} elseif ($action == 'month') {
	
	InitGP(array('year','month'));
	
	$p_year	 = $n_year = $year;
	$p_month = $month - 1;
	$n_month = $month + 1;
	if ($p_month < 1) {
		$p_month = 12;
		$p_year--;
	}
	if ($n_month > 12) {
		$n_month = 1;
		$n_year++;
	}
	$sortdb = array();
	$Ntotal = 1;

	$query = $db->query("SELECT day,$type FROM pw_datastate WHERE year='$year' AND month='$month'");
	while ($rt = $db->fetch_array($query)) {
		$rt[$type] > $Ntotal && $Ntotal = $rt[$type];
		$sortdb[$rt['day']] = $rt;
	}
	for ($i = 1; $i <= get_date(PwStrtoTime($year.'-'.$month.'-1'),'t'); $i++) {
		if (!isset($sortdb[$i])) {
			$sortdb[$i] = array($type=>0,'w'=>0);
		} else {
			$sortdb[$i]['w'] = 560*$sortdb[$i][$type]/$Ntotal;
		}
	}
	ksort($sortdb);

	include PrintEot('datastate');exit;

} elseif ($action == 'msort') {
	
	@set_time_limit(1000);
	InitGP(array('year','month'));

	$timestart	= PwStrtoTime($year.'-'.$month.'-1');
	$timeend	= $timestart + (get_date($timestart,'t') * 86400);
	
	$sortdb = array();

	switch ($type) {
		case 'topic':
			$query = $db->query("SELECT COUNT(*) AS topic,DAYOFMONTH(FROM_UNIXTIME(postdate)) AS day FROM pw_threads WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY day");
			while ($rt = $db->fetch_array($query)) {
				$sortdb[$rt['day']] = $rt['topic'];
			}
			break;
		case 'reply':
			$sql_1 = "SELECT COUNT(*) AS replies,DAYOFMONTH(FROM_UNIXTIME(postdate)) AS day FROM pw_posts WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY day";

			if ($db_plist) {
				foreach (explode(',',$db_plist) as $key=>$value) {
					$sql_1 .= " UNION ALL SELECT COUNT(*) AS replies,DAYOFMONTH(FROM_UNIXTIME(postdate)) AS day FROM pw_posts{$value} WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY day";
				}
			}
			$query = $db->query($sql_1);
			while ($rt = $db->fetch_array($query)) {
				$sortdb[$rt['day']] += $rt['replies'];
			}
			break;
		case 'regmen':
			$query = $db->query("SELECT COUNT(*) AS regmen,DAYOFMONTH(FROM_UNIXTIME(regdate)) AS day FROM pw_members WHERE regdate BETWEEN '$timestart' AND '$timeend' GROUP BY day");
			while ($rt = $db->fetch_array($query)) {
				$sortdb[$rt['day']] = $rt['regmen'];
			}
			break;
		case 'postmen':
			$sql_2 = "SELECT DAYOFMONTH(FROM_UNIXTIME(postdate)) AS day,authorid FROM pw_threads WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY day,authorid UNION SELECT DAYOFMONTH(FROM_UNIXTIME(postdate)) AS day,authorid FROM pw_posts WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY day,authorid";
			
			if ($db_plist) {
				foreach (explode(',',$db_plist) as $key=>$value) {
					$sql_2 .= " UNION SELECT DAYOFMONTH(FROM_UNIXTIME(postdate)) AS day,authorid FROM pw_posts{$value} WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY day,authorid";
				}
			}
			if ($db->server_info() > '4.1') {
				$query = $db->query("SELECT COUNT(*) AS postmen,day FROM (".$sql_2.") t1 GROUP BY day");
			} else {
				$db->query("CREATE TEMPORARY TABLE temp $sql_2");
				$query = $db->query("SELECT COUNT(*) AS postmen,day FROM temp GROUP BY day");
			}
			while ($rt = $db->fetch_array($query)) {
				$sortdb[$rt['day']] = $rt['postmen'];
			}
			break;
	}
	foreach ($sortdb as $day => $value) {
		$db->pw_update(
			"SELECT * FROM pw_datastate WHERE year='$year' AND month='$month' AND day='$day'",
			"UPDATE pw_datastate SET {$type}='$value' WHERE year='$year' AND month='$month' AND day='$day'",
			"INSERT INTO pw_datastate (year,month,day,$type) VALUES ('$year','$month','$day','$value')"
		);
	}
	
	echo "<?xml version=\"1.0\" encoding=\"$db_charset\"?><ajax><![CDATA[success]]></ajax>";exit;

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

	@set_time_limit(1000);
	InitGP(array('year','month','day'));

	$timestart	= PwStrtoTime($year.'-'.$month.'-'.$day);
	$timeend	= $timestart + 86400;
	
	$total = 0;

	switch ($type) {
		case 'topic':
			$rt = $db->get_one("SELECT COUNT(*) AS topic FROM pw_threads WHERE postdate BETWEEN '$timestart' AND '$timeend'");
			$rt && $total = $rt['topic'];
			break;
		case 'reply':
			$sql_1 = "SELECT COUNT(*) AS replies FROM pw_posts WHERE postdate BETWEEN '$timestart' AND '$timeend'";
			if ($db_plist) {
				foreach (explode(',',$db_plist) as $key=>$value) {
					$sql_1 .= " UNION ALL SELECT COUNT(*) AS replies FROM pw_posts{$value} WHERE postdate BETWEEN '$timestart' AND '$timeend'";
				}
			}
			$query = $db->query($sql_1);
			while ($rt = $db->fetch_array($query)) {
				$total += $rt['replies'];
			}
			break;
		case 'regmen':
			$rt = $db->get_one("SELECT COUNT(*) AS regmen FROM pw_members WHERE regdate BETWEEN '$timestart' AND '$timeend'");
			$rt && $total = $rt['regmen'];
			break;
		case 'postmen':
			$sql_2 = "SELECT authorid FROM pw_threads WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY authorid UNION SELECT authorid FROM pw_posts WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY authorid";
			if ($db_plist) {
				foreach (explode(',',$db_plist) as $key=>$value) {
					$sql_2 .= " UNION SELECT authorid FROM pw_posts{$value} WHERE postdate BETWEEN '$timestart' AND '$timeend' GROUP BY authorid";
				}
			}
			if ($db->server_info() > '4.1') {
				$rt = $db->get_one("SELECT COUNT(*) AS postmen FROM (".$sql_2.") t1");
			} else {
				$db->query("CREATE TEMPORARY TABLE temp $sql_2");
				$rt = $db->get_one("SELECT COUNT(*) AS postmen FROM temp");
			}
			$rt && $total = $rt['postmen'];
			break;
	}
	if ($total > 0) {
		$db->pw_update(
			"SELECT * FROM pw_datastate WHERE year='$year' AND month='$month' AND day='$day'",
			"UPDATE pw_datastate SET {$type}='$total' WHERE year='$year' AND month='$month' AND day='$day'",
			"INSERT INTO pw_datastate (year,month,day,$type) VALUES ('$year','$month','$day','$total')"
		);
	}
	
	echo "<?xml version=\"1.0\" encoding=\"$db_charset\"?><ajax><![CDATA[success]]></ajax>";exit;
}
?>