HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/bs.kntsleep.com/system/admin/home/home.class.php
<?php
/*
 * Copyright (c) Huyin Information Technology Co., Ltd. All Rights Reserved.
 * BOSSCMS Content Management System (https://www.bosscms.net/)
 */
defined('IS_OK') or exit('Access Forbidden');

into::basic_class('admin');

// b o s s c m s
class home extends admin
{
	public function init()
	{
		global $G;
		$data['shortcut'] = json::decode($G['config']['shortcut']);
		foreach($data['shortcut'] as $k=>$v){
			$link = explode('&',$v['link']);
			$data['shortcut'][$k]['name'] = $v['name'];
			$data['shortcut'][$k]['url'] = url::mpf($link[0], $link[1]?$link[1]:$link[0], $link[2]?$link[2]:'init');
		}
		$data['realtime'] = json::decode($G['config']['realtime_data']);
		echo $this->theme('home/home',$data);
	}

	public function swh()
	{
		global $G;
		$data = array();
		switch($G['get']['tab']){
			case 'groups':
				$groups = page::group_all(8, null, null, null, 'pages', "*", "weight=-1");
				foreach($groups['list'] as $k=>$v){
					$data['groups'][$k]['time'] = date('m/d',$v['mtime']);
					$data['groups'][$k]['url'] = $v['url'];
					$data['groups'][$k]['title'] = $v['name'];
				}
				break;
			case 'comment':
				$comment = page::comment_pages(null, 8, null, null, null, 'pages', '*', "examine=0", null);
				foreach($comment['list'] as $k=>$v){
					$data['comment'][$k]['time'] = date('m/d',$v['ctime']);
					$data['comment'][$k]['url'] = $v['url'];
					$data['comment'][$k]['title'] = $v['content'];
				}
				break;
		}
		echo json::encode($data);
	}

	public function sun()
	{
		global $G;
		$today = strtotime(date('Y-m-d',TIME).' 00:00:00');
		$yesterday = strtotime(date('Y-m-d',strtotime('-1 day',TIME)).' 00:00:00');
		$data = array();
		switch($G['get']['more']){
			case 'group':
				$group = $group_today = $group_audit = 0;
				foreach($G['pass']['type'] as $k=>$v){
					if(preg_match('/^(2|3|4|5)\d?$/',$v)){
						$group += mysql::total($k,"recycle=0");
						$group_today += mysql::total($k,"ctime>={$today} AND recycle=0");
						$group_audit += mysql::total($k,"weight=-1 AND recycle=0");
					}
				}
				$data['group'] = $group;
				$data['group_today'] = $group_today;
				$data['group_audit'] = $group_audit;
				break;
			case 'comment':
				$data['comment'] = mysql::total('comment');
				$data['comment_today'] = mysql::total('comment',"ctime>={$today}");
				$data['comment_yesterday'] = mysql::total('comment',"ctime<{$today} AND ctime>={$yesterday}");
				break;
			case 'feedback':
				$data['feedback'] = mysql::total('feedback');
				$data['feedback_today'] = mysql::total('feedback',"ctime>={$today}");
				$data['feedback_yesterday'] = mysql::total('feedback',"ctime<{$today} AND ctime>={$yesterday}");
				break;
			case 'member':
				$data['member'] = mysql::total('member');
				$data['member_today'] = mysql::total('member',"ctime>={$today}");
				$data['member_yesterday'] = mysql::total('member',"ctime<{$today} AND ctime>={$yesterday}");
				$data['member_audit'] = mysql::total('member',"open<=0");
				break;
			case 'sale':
				$data['sale'] = setDefault(arrExist(mysql::select_one('SUM(price) AS price','orders',"state>0"),'price'),0);
				$data['sale_today'] = setDefault(arrExist(mysql::select_one('SUM(price) AS price','orders',"ctime>={$today} AND state>0"),'price'),0);
				$data['sale_yesterday'] = setDefault(arrExist(mysql::select_one('SUM(price) AS price','orders',"ctime<{$today} AND ctime>={$yesterday} AND state>0"),'price'),0);
				if($G['config']['shop_open']){
					$data['sale'] += setDefault(arrExist(mysql::select_one('SUM(amount) AS amount','shop_orders',"state>0"),'amount'),0);
					$data['sale_today'] += setDefault(arrExist(mysql::select_one('SUM(amount) AS amount','shop_orders',"ctime>={$today} AND state>0"),'amount'),0);
					$data['sale_yesterday'] += setDefault(arrExist(mysql::select_one('SUM(amount) AS amount','shop_orders',"ctime<{$today} AND ctime>={$yesterday} AND state>0"),'amount'),0);
				}
				break;
			case 'orders':
				$data['orders'] = mysql::total('orders',"1");
				$data['orders_today'] = mysql::total('orders',"ctime>={$today}");
				$data['orders_state0'] = mysql::total('orders',"state=0");
				$data['orders_state1'] = mysql::total('orders',"state=1");
				if($G['config']['shop_open']){
					$data['orders'] += mysql::total('shop_orders',"state>=0");
					$data['orders_today'] += mysql::total('shop_orders',"ctime>={$today} AND state>=0");
					$data['orders_state0'] += mysql::total('shop_orders',"state=0");
					$data['orders_state1'] += mysql::total('shop_orders',"state=1");
				}
				break;
		}
		echo json::encode($data);
	}
	
	public function develop()
	{
		global $G;
		header('content-type:application/json;charset=utf-8');
		into::basic_class('curl');
		$file = ROOT_PATH.'cache/json/bosscms_develop.json';
		if(is_file($file)){
			$res = file_get_contents($file);
		}else{
			$res = curl::request('https://api.bosscms.net/rest/develop/?version='.$G['config']['version']);
			dir::create($file, $res);
		}
		echo $res;
	}
	
	public function more()
	{
		global $G;
		$data = array(
			'group' => array(
				'name' => '所有文档',
				'display' => 1
			),
			'comment' => array(
				'name' => '所有评论',
				'display' => 1
			),
			'feedback' => array(
				'name' => '所有留言',
				'display' => 1
			),
			'member' => array(
				'name' => '会员总数',
				'display' => 1
			),
			'sale' => array(
				'name' => '销售总额',
				'display' => 1
			),
			'orders' => array(
				'name' => '订单总数',
				'display' => 1
			)
		);
		if($realtime = json::decode($G['config']['realtime_data'])){
			foreach($realtime as $k=>$v){
				$realtime[$k] = $data[$k];
				$realtime[$k]['display'] = $v;
			}
			$data = $realtime;
		}
		echo $this->theme('home/more',$data);
	}
	
	public function madd()
	{
		global $G;
		if($G['post']['id']){
			$data = array();
			foreach($G['post']['id'] as $v){
				$data[$v] = $G['post']['realtime'][$v]['display']*1;
			}
			mysql::select_set(array('name'=>'realtime_data','value'=>json::enfilter($data),'parent'=>'0','type'=>'1','lang'=>'0'),'config',array('value'));
			alert('操作成功', url::mpf('home','home','more',array('id'=>null,'success'=>'ok')));
		}
		alert('没有提交信息');
	}

	public function echarts()
	{
		global $G;
		if(is_numeric($G['config']['statistics_visit_day']) && $G['config']['statistics_visit_day']>0){
			mysql::delete('visit',"ctime<".(TIME-$G['config']['statistics_visit_day']*3600*24));
		}
		if(!$duration = $G['get']['duration']){
			$duration = 'today';
		}
		switch($G['get']['statistics']){
			case 'statistics':
				$arr['s'] = preg_match('/^(pv|uv|ip|vv)$/',$G['get']['uipv'])?$G['get']['uipv']:'pv';
				if(preg_match('/^(today|yesterday)$/',$duration)){
					$series = array(
						array('name'=>$duration=='today'?'今天':'昨天','color'=>'#1880fe','data'=>array(),'total'=>0),
						array('name'=>$duration=='today'?'昨天':'前天','color'=>'#aad0ff','data'=>array(),'total'=>0)
					);
				}else{
					$series = array(
						array('name'=>arrExist(array('pv'=>'浏览量','uv'=>'访客量','ip'=>'IP数','vv'=>'流量'),$arr['s']),'color'=>'#1880fe','data'=>array(),'total'=>0)
					);
				}
				break;
			case 'employ':
				$series = array(
					array('name'=>'百度','color'=>'#2932e1','data'=>array(),'total'=>0),
					array('name'=>'头条','color'=>'#f04142','data'=>array(),'total'=>0),
					array('name'=>'搜狗','color'=>'#ff5403','data'=>array(),'total'=>0),
					array('name'=>'360','color'=>'#0fb264','data'=>array(),'total'=>0),
					array('name'=>'神马','color'=>'#f08300','data'=>array(),'total'=>0),
					array('name'=>'Bing','color'=>'#00aeef','data'=>array(),'total'=>0),
					array('name'=>'Google','color'=>'#fbbc05','data'=>array(),'total'=>0)
				);
				if($G['get']['spider'] == 'fail'){
					$series = array_merge(
						array(
							array('name'=>'总蜘蛛','color'=>'#000','data'=>array(),'total'=>0),
							array('name'=>'假蜘蛛','color'=>'#000','data'=>array(),'total'=>0)
						),
						$series
					);
				}
				break;
			case 'orders':
				$series = array(
					array('name'=>'订单数','color'=>'#1880fe','data'=>array(),'total'=>0),
					array('name'=>'订单金额','color'=>'#22bf68','data'=>array(),'total'=>0)
				);
				break;
			case 'member':
				$series = array(
					array('name'=>'注册会员','color'=>'#1880fe','data'=>array(),'total'=>0),
					array('name'=>'登陆会员','color'=>'#01D9E4','data'=>array(),'total'=>0),
					array('name'=>'待审会员','color'=>'#58A3FE','data'=>array(),'total'=>0),
					array('name'=>'邀请会员','color'=>'#7BB6FE','data'=>array(),'total'=>0)
				);
				break;
		}
		switch($duration){
			case 'today':
				for($i=0; $i<24; $i++){
					$res = $this->estype(
						($i>=10?'':'0').$i.':00',
						strtotime(date("Y/m/d {$i}:00:00",TIME)),
						strtotime(date("Y/m/d {$i}:59:59",TIME)),
						$arr
					);
					foreach($res as $k=>$v){
						$series[$k]['data'][] = $v;
						$series[$k]['total'] = ($series[$k]['total']*100+$v[1]*100)/100;
					}
				}
				break;
			case 'yesterday':
				for($i=0; $i<24; $i++){
					$res = $this->estype(
						($i>=10?'':'0').$i.':00',
						strtotime(date("Y/m/d {$i}:00:00",strtotime('-1 day',TIME))),
						strtotime(date("Y/m/d {$i}:59:59",strtotime('-1 day',TIME))),
						$arr
					);
					foreach($res as $k=>$v){
						$series[$k]['data'][] = $v;
						$series[$k]['total'] = ($series[$k]['total']*100+$v[1]*100)/100;
					}
				}
				break;
			case '7day':
				for($i=6; $i>=0; $i--){
					$day = strtotime("-{$i} day",TIME);
					$res = $this->estype(
						date('Y/m/d',$day),
						strtotime(date('Y/m/d 00:00:00',$day)),
						strtotime(date('Y/m/d 23:59:59',$day)),
						$arr
					);
					foreach($res as $k=>$v){
						$series[$k]['data'][] = $v;
						$series[$k]['total'] = ($series[$k]['total']*100+$v[1]*100)/100;
					}
				}
				break;
			case '30day':
				for($i=29; $i>=0; $i--){
					$day = strtotime("-{$i} day",TIME);
					$res = $this->estype(
						date('Y/m/d',$day),
						strtotime(date('Y/m/d 00:00:00',$day)),
						strtotime(date('Y/m/d 23:59:59',$day)),
						$arr
					);
					foreach($res as $k=>$v){
						$series[$k]['data'][] = $v;
						$series[$k]['total'] = ($series[$k]['total']*100+$v[1]*100)/100;
					}
				}
				break;
			case 'toweek':
				$week = setDefault(date('w',TIME)*1,7)-1;
				for($i=$week; $i>=0; $i--){
					$day = strtotime("-{$i} day",TIME);
					$res = $this->estype(
						date('Y/m/d',$day),
						strtotime(date('Y/m/d 00:00:00',$day)),
						strtotime(date('Y/m/d 23:59:59',$day)),
						$arr
					);
					foreach($res as $k=>$v){
						$series[$k]['data'][] = $v;
						$series[$k]['total'] = ($series[$k]['total']*100+$v[1]*100)/100;
					}
				}
				break;
			case 'tomonth':
				$month = date('d',TIME)*1-1;
				for($i=$month; $i>=0; $i--){
					$day = strtotime("-{$i} day",TIME);
					$res = $this->estype(
						date('Y/m/d',$day),
						strtotime(date('Y/m/d 00:00:00',$day)),
						strtotime(date('Y/m/d 23:59:59',$day)),
						$arr
					);
					foreach($res as $k=>$v){
						$series[$k]['data'][] = $v;
						$series[$k]['total'] = ($series[$k]['total']*100+$v[1]*100)/100;
					}
				}
				break;
			case 'toyear':
				$year = floor((TIME-strtotime(date('Y/1/1 00:00:00',TIME)))/86400);
				for($i=$year; $i>=0; $i--){
					$day = strtotime("-{$i} day",TIME);
					$res = $this->estype(
						date('Y/m/d',$day),
						strtotime(date('Y/m/d 00:00:00',$day)),
						strtotime(date('Y/m/d 23:59:59',$day)),
						$arr
					);
					foreach($res as $k=>$v){
						$series[$k]['data'][] = $v;
						$series[$k]['total'] = ($series[$k]['total']*100+$v[1]*100)/100;
					}
				}
				break;
			case 'nday':
				if(preg_match('/\d{4}\/\d{2}\/\d{2}/',$G['get']['setime']) || preg_match('/\d{4}\/\d{2}\/\d{2}\s~\s\d{4}\/\d{2}\/\d{2}/',$G['get']['setime'])){
					if(strstr($G['get']['setime'],' ~ ')){
						$se = explode(' ~ ',$G['get']['setime']);
						$start = strtotime($se[0].' 00:00:00');
						$end = strtotime($se[1].' 23:59:59');
					}else{
						$start = strtotime($G['get']['setime'].' 00:00:00');
						$end = strtotime($G['get']['setime'].' 23:59:59');
					}
					if($start < $end){
						$day = $start;
						while($day < $end){
							$res = $this->estype(
								date('Y/m/d',$day),
								strtotime(date('Y/m/d 00:00:00',$day)),
								strtotime(date('Y/m/d 23:59:59',$day)),
								$arr
							);
							foreach($res as $k=>$v){
								$series[$k]['data'][] = $v;
								$series[$k]['total'] = ($series[$k]['total']*100+$v[1]*100)/100;
							}
							$day = strtotime("+1 day",$day);
						}
					}
				}
				break;
			default:
				return ;
		}
		header('Content-type: application/json');
		echo $this->esjson($max, $series);
	}
	
	public function estype($ct, $starttime, $endtime, $arr=array()){
		global $G;
		switch($G['get']['statistics']){
			case 'statistics':
				$data[0] = array($ct, setDefault(arrExist(mysql::select_one('SUM('.$arr['s'].') AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0));
				if(!$G['get']['duration'] || preg_match('/^(today|yesterday)$/',$G['get']['duration'])){
					$data[1] = array($ct, setDefault(arrExist(mysql::select_one('SUM('.$arr['s'].') AS _total','statistics',"ctime>={$starttime}-86400 AND ctime<={$endtime}-86400"),'_total'),0));
				}
				return $data;
			case 'employ':
				$data = array(
					array($ct, setDefault(arrExist(mysql::select_one('SUM(bd) AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0)),
					array($ct, setDefault(arrExist(mysql::select_one('SUM(tt) AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0)),
					array($ct, setDefault(arrExist(mysql::select_one('SUM(sg) AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0)),
					array($ct, setDefault(arrExist(mysql::select_one('SUM(so) AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0)),
					array($ct, setDefault(arrExist(mysql::select_one('SUM(sm) AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0)),
					array($ct, setDefault(arrExist(mysql::select_one('SUM(bi) AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0)),
					array($ct, setDefault(arrExist(mysql::select_one('SUM(ge) AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0))
				);
				if($G['get']['spider'] == 'fail'){
					$data = array_merge(
						array(
							array($ct, $data[0][1] + $data[1][1] + $data[2][1] + $data[3][1] + $data[4][1] + $data[5][1] + $data[6][1]),
							array($ct, setDefault(arrExist(mysql::select_one('SUM(fail) AS _total','statistics',"ctime>={$starttime} AND ctime<={$endtime}"),'_total'),0))
						),
						$data
					);
				}
				return $data;
			case 'orders':
				return array(
					array($ct, mysql::total('orders',"ctime>={$starttime} AND ctime<={$endtime}")),
					array($ct, setDefault(arrExist(mysql::select_one('SUM(price) AS price','orders',"ctime>={$starttime} AND ctime<={$endtime}"),'price'),0))
				);
			case 'member':
				return array(
					array($ct, mysql::total('member',"ctime>={$starttime} AND ctime<={$endtime}")),
					array($ct, mysql::total('member',"ltime>={$starttime} AND ltime<={$endtime}")),
					array($ct, mysql::total('member',"ctime>={$starttime} AND ctime<={$endtime} AND open<=0")),
					array($ct, mysql::total('member',"ctime>={$starttime} AND ctime<={$endtime} AND invite!=''"))
				);
		}
	}
	
	public function esjson($max, $series){
		global $G;
		$json = array(
			'tooltip' => array(
				'trigger' => 'axis',
				'textStyle' => array(
					'fontWeight' => 'normal'
				)
			),
			'legend' => array(
				'top' => $G['get']['statistics']=='statistics'&&count($series)==1?-88:8,
				'textStyle' => array(
					'fontSize' => $G['get']['sub']?14:12
				)
			),
			'grid' => array(
				'left' => 48,
				'top' => $G['get']['sub']?88:58,
				'right' => 38,
				'bottom' => 28
			),
			'xAxis' => array(
				'type' => 'category',
				'boundaryGap' => false
			),
			'yAxis' => array(
				'type' => 'value',
				'min' => 0
			),
			'graphic' => array(
				array(
					'type' => 'text',
					'silent' => true,
					'left' => 'center',
					'top' => '88',
					'z' => 88,
					'style' => array(
						'fill' => '#e8e8e8',
						'text' => $G['path']['host'],
						'fontSize' => 18
					)
				)
			)
		);
		foreach($series as $v){
			if($G['get']['spider']=='fail'){
				$v['data'] = array_reverse($v['data']);
			}
			$json['legend']['data'][] = $v['name'];
			$json['series'][] = array(
				'name' => $v['name'],
				'type' => 'line',
				'yAxisIndex' => 0,
				'color' => $v['color'],
				'lineStyle' => array(
					'width' => 1
				),
				'areaStyle' => array(
					'color' => $v['color'].'68'
				),
				'smooth' => true,
				'data' => $v['data'],
				'total' => $v['total']
			);
		}
		return json::encode($json);
	}
}
?>