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

    <?php
!function_exists('adminmsg') && exit('Forbidden');

require_once(R_P.'require/xml.php');
require_once(R_P.'require/posthost.php');
$xml = new XML();
$xml->setEncode('UTF-8');
$ystatsUrl = 'http://v3.tongji.cn.yahoo.com/export/phpwind';
$basename = "$admin_file?adminjob=ystats&type=other";
!$type && $type = 'draw';
!$action && $action = 'config';
if($type == 'other'){
	$step = GetGP('step');
	if($action == 'config'){
		if($step == 2){
			$config = GetGP('config');
			$config['ystats_ifopen'] = $config['ystats_ifopen'] ? 1 : 0;
			$config['ystats_style']  = intval($config['ystats_style']);
			if(empty($db_ystats_unit_id) && empty($db_ystats_key)){
				//雅虎统计激活
				$ystats = array();
				$response = PostHost("$ystatsUrl/reg.html?type=1");
				$response = chunkdecode($response);
				$xml->setXMLData($response);
				if(!$xml->isXMLFile()){
					adminmsg('ystat_xmldata_error');
				}
				$xml->parse();
				$result = XML::getChild($xml->getXMLRoot());
				foreach ($result as $tag){
					$tagname = XML::getTagName($tag);
					$ystats[$tagname] = XML::getData($tag);
				}
				if($ystats['status'] != '0'){
					adminmsg($ystats['info']);
				}else{
					$db_ystats_unit_id = $config['ystats_unit_id'] = $ystats['unit_id'];
					$db_ystats_key = $config['ystats_key'] = $ystats['key'];
				}
			}
			//雅虎统计选项
			$ystats = array();
			$request = $ystatsUrl.'/reg.html?type=2&key='.$db_ystats_key.'&unit_id='.$db_ystats_unit_id.'&open='.$config['ystats_ifopen'].'&style='.$config['ystats_style'];
			$response = PostHost($request);
			$response = chunkdecode($response);
			$xml->setXMLData($response);
			if(!$xml->isXMLFile()){
				adminmsg('ystat_xmldata_error');
			}
			$xml->parse();
			$result = XML::getChild($xml->getXMLRoot());
			foreach ($result as $tag){
				$tagname = XML::getTagName($tag);
				$ystats[$tagname] = XML::getData($tag);
			}
			if($ystats['status'] != '0'){
				adminmsg($ystats['info']);
			}

			foreach ($config as $key=>$value){
				$db->pw_update(
					"SELECT db_name FROM pw_config WHERE db_name='db_{$key}'",
					"UPDATE pw_config SET db_value='$value' WHERE db_name='db_{$key}'",
					"INSERT INTO pw_config(db_name,db_value) VALUES ('db_{$key}','$value')"
				);
			}
			updatecache_c();
			adminmsg('operate_success');
		}else{
			empty($db_ystats_style) && $db_ystats_style = 1;
			$db_ystats_ifopen!='0' && $db_ystats_ifopen = 1;
			ifcheck($db_ystats_ifopen,'ystats_ifopen');
			${'ystats_style_'.$db_ystats_style} = 'CHECKED';
			include PrintEot('ystats');exit;
		}
	}elseif($action == 'report'){
		if(empty($db_ystats_unit_id) && empty($db_ystats_key)){
			adminmsg('ystat_active_account');
		}
		InitGP(array('view','year','month'));
		$pwDate['now']		= $timestamp+28800;//北京时间
		$pwDate['hours']	= gmdate('G',$pwDate['now']);//当天小时数
		$pwDate['mday']		= gmdate('j',$pwDate['now']);//当月天数
		$pwDate['wday']		= gmdate('w',$pwDate['now']);
		$pwDate['wday']		== 0 && $pwDate['wday'] = 7;//星期:1-7
		$pwDate['ttime']	= (floor($pwDate['now']/3600)-$pwDate['hours'])*3600;//当天开始时间,时间戳
		$pwDate['mtime']	= $pwDate['ttime']-($pwDate['mday']-1)*86400;//当月开始时间,时间戳
		$pwDate['wtime']	= $pwDate['ttime']-($pwDate['wday']-1)*86400;//当周开始时间(星期一为第一天),时间戳
		$pwDate['lwtime']	= $pwDate['wtime']-604800;
		$pwDate['lasttime'] = $pwDate['now']-2505600;
		$pwDate['year']		= gmdate('Y',$pwDate['now']);
		$pwDate['month']	= gmdate('m',$pwDate['now']);
		$pwDate['md5time']	= mktime(date('H',$timestamp),0,0,date('m',$timestamp),date('d',$timestamp),date('Y',$timestamp));
		$edate = '';
		switch ($view){
			case 'colligate':
				$sdate = gmdate('Y-m-d',$pwDate['lasttime']);
				break;
			case 'thisweek':
				$sdate = gmdate('Y-m-d',$pwDate['wtime']);
				break;
			case 'lastweek':
				$sdate = gmdate('Y-m-d',$pwDate['lwtime']);
				$edate = gmdate('Y-m-d',$pwDate['wtime']-86400);
				break;
			case 'thismonth':
				$sdate = gmdate('Y-m-d',$pwDate['mtime']);
				break;
			case 'last30':
				$sdate = gmdate('Y-m-d',$pwDate['lasttime']);
				break;
			case 'other':
				if(!is_numeric($month) || !is_numeric($year)|| $year<2007 || $year>$pwDate['year'] || $month<1 || $month>12){
					adminmsg('ystat_date_error');
				}
				$sdate = gmdate('Y-m-d',strtotime($year.'-'.$month.'-1'));
				$edate = gmdate('Y-m-d',strtotime($year.'-'.$month.'-'.gmdate('t',strtotime($sdate))));
				if(strtotime($sdate)>$pwDate['now']){
					adminmsg('ystat_date_error');
				}
				strtotime($edate)>$pwDate['now'] && $edate = '';
				break;
			default:
				$view = 'colligate';
				$sdate = gmdate('Y-m-d',$pwDate['lasttime']);
		}
		!$year && $year = $pwDate['year'];
		!$month && $month = $pwDate['month'];
		${'year_'.$year} = 'SELECTED';
		${'month_'.$month} = 'SELECTED';
		${$view} = 'CHECKED';

		$ystats = array();
		$verify = md5($db_ystats_key.$db_ystats_unit_id.$pwDate['md5time']);
		$request = $ystatsUrl.'/report.html?key='.$db_ystats_key.'&unit_id='.$db_ystats_unit_id.'&s='.$verify.'&date1='.$sdate.'&date2='.$edate;
		$response = PostHost($request);
		$response = chunkdecode($response);
		$xml->setXMLData($response);
		if(!$xml->isXMLFile()){
			adminmsg('ystat_xmldata_error');
		}
		$xml->parse();
		$result = XML::getChild($xml->getXMLRoot());
		foreach ($result as $tag) {
			$tagname = XML::getTagName($tag);
			if ($tagname == 'status' || $tagname == 'info') {
				$ystats[$tagname] = XML::getData($tag);
			} elseif ($tagname == 'date_list'){
				$datelist = array();
				$datelist = XML::getChild($tag);
				foreach ($datelist as $list){
					$listkey = XML::getProperty($list,'value');
					$listkey = strtotime($listkey);
					$ystats['date_list'][$listkey] = XML::getAttribute($list);
				}
			} else {
				$ystats[$tagname] = XML::getAttribute($tag);
			}
		}
		if($ystats['status'] != '0'){
			adminmsg($ystats['info']);
		}
		empty($edate) && $edate = gmdate('Y-m-d',$pwDate['now']);
		$stime = strtotime($sdate);
		$etime = strtotime($edate);
		$flashvars['pv'] = array();
		$flashvars['uv'] = array();
		$flashvars['ip'] = array();
		$flashvars['date'] = array();
		$flashvars['maxvalue'] = 0;
		$sum_pv = 0;
		$sum_uv = 0;
		$sum_ip = 0;
		$total = intval(($etime-$stime)/86400);
		for ($i=0;$i<=$total;$i++){
			$flashvars['date'][$i] = $total>7 && $i%5 ? '' : gmdate('Y-m-d',$stime);
			if ($ystats['date_list'][$stime]) {
				$flashvars['maxvalue']<$ystats['date_list'][$stime]['pv'] && $flashvars['maxvalue'] = $ystats['date_list'][$stime]['pv'];
				$flashvars['maxvalue']<$ystats['date_list'][$stime]['uv'] && $flashvars['maxvalue'] = $ystats['date_list'][$stime]['uv'];
				$flashvars['pv'][$i] = $ystats['date_list'][$stime]['pv'];
				$flashvars['uv'][$i] = $ystats['date_list'][$stime]['uv'];
				$flashvars['ip'][$i] = $ystats['date_list'][$stime]['ip'];
				$sum_pv += $ystats['date_list'][$stime]['pv'];
				$sum_uv += $ystats['date_list'][$stime]['uv'];
				$sum_ip += $ystats['date_list'][$stime]['ip'];
			} else {
				$flashvars['pv'][$i] = '0';
				$flashvars['uv'][$i] = '0';
				$flashvars['ip'][$i] = '0';
			}
			$stime += 86400;
		}
		if($ystats['date_list']){
			$flashvars['maxvalue'] = ceil(($flashvars['maxvalue']+1)/10)*10;
			$flashvars['pv'] = implode(',',$flashvars['pv']);
			$flashvars['uv'] = implode(',',$flashvars['uv']);
			$flashvars['ip'] = implode(',',$flashvars['ip']);
			$flashvars['date'] = implode(',',$flashvars['date']);
			$flashvars = "&title=,5,&
&y_ticks=2,10,10&
&y_legend=Open Flash Chart,10,0xD2D2D2&
&y_min=0&
&bg_colour=#FFFFFF&
&x_labels=$flashvars[date]&
&values=$flashvars[pv]&
&values_2=$flashvars[uv]&
&values_3=$flashvars[ip]&
&line_dot=2,0xFF6600,PV,12,4&
&line_dot_2=2,0x04D215,UV,12,4&
&line_dot_3=2,0x0D8ECF,IP,12,4&
&y_max=$flashvars[maxvalue]&
";
		}else{
			$flashvars = '';
		}
		writeover(D_P.'data/bbscache/ystat.php',"<?php\n\$flashvars = \"$flashvars\";\n?>");
		krsort($ystats['date_list']);
		include PrintEot('ystats');exit;
	}elseif($action == 'bind'){
		if($db_ystats_ymail){
			adminmsg('ystat_ymail_error');
		}
		if($step==2){
			$ystats_ymail = GetGP('ystats_ymail','P');
			if(empty($ystats_ymail) || !ereg("^[a-zA-Z][a-zA-Z0-9_]{3,31}\@(yahoo\.com\.cn|yahoo\.cn)$",$ystats_ymail)){
				adminmsg('ystat_ymail_format');
			}
			$ystats = array();
			$request = $ystatsUrl.'/reg.html?type=3&key='.$db_ystats_key.'&unit_id='.$db_ystats_unit_id.'&ymail='.$ystats_ymail;
			$response = PostHost($request);
			$response = chunkdecode($response);
			$xml->setXMLData($response);
			if(!$xml->isXMLFile()){
				adminmsg('ystat_xmldata_error');
			}
			$xml->parse();
			$result = XML::getChild($xml->getXMLRoot());
			foreach ($result as $tag){
				$tagname = XML::getTagName($tag);
				$ystats[$tagname] = XML::getData($tag);
			}
			if($ystats['status'] != '0'){
				adminmsg($ystats['info']);
			}
			$db->pw_update(
				"SELECT db_name FROM pw_config WHERE db_name='db_ystats_ymail'",
				"UPDATE pw_config SET db_value='$ystats_ymail' WHERE db_name='db_ystats_ymail'",
				"INSERT INTO pw_config(db_name,db_value) VALUES ('db_ystats_ymail','$ystats_ymail')"
			);
			updatecache_c();
			adminmsg('operate_success');
		}else{
			include PrintEot('ystats');exit;
		}
	}elseif($action == 'reactivate'){
		$db->update("UPDATE pw_config SET db_value='' WHERE db_name IN('db_ystats_ymail','db_ystats_ifopen','db_ystats_style','db_ystats_unit_id','db_ystats_key')");
		updatecache_c();
		adminmsg('operate_success');
	}
}elseif($type == 'draw'){
	header("Cache-Control: no-cache, must-revalidate");
	@include_once(D_P.'data/bbscache/ystat.php');
	echo $flashvars;exit;
}

function chunkdecode($data){
	$tmp = '';
	$slen = strpos($data,"\r\n");
	$length = (int)hexdec(substr($data,0,$slen+1));
	while($length > 0) {
		$data = substr($data,$slen+2);
	    $tmp .= substr($data,0,$length);
	    $data = substr($data,$length);
		$slen = strpos($data,"\r\n");
		$length = (int)hexdec(substr($data,0,$slen+1));
	}
	return trim($tmp);
}
?>