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);
}
}
?>