File: /www/wwwroot/bs.kntsleep.com/system/web/items/items.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('web');
class items extends web
{
public function init()
{
global $G;
$this->statistics();
$html = false;
$file = md5($G['path']['link']).(isMobile()?'.mobile':'').'.html';
if(!$G['view'] && $G['config']['page_cache_time']){
$html = cache::auto($file, 'html');
}
if($html === false){
if($G['area'] = $this->area()){
$G['home'] = page::items_one(88888);
}
$G['items'] = $this->column();
$G['tag'] = $this->tag();
if(!isset($G['theme']['path'])){
$G['theme']['path'] = $this->type($G['items']['type']);
}
$html = $this->theme($G['theme']['path']);
if(!$G['view'] && $G['config']['page_cache_time']){
cache::set($file, $html, 'html', true);
}
}
/* 执行插件中的函数 */
if($G['plugin']){
foreach($G['plugin'] as $class){
if($class && method_exists($class, 'over')){
$html = $class->over($html, 'web');
}
}
}
echo $this->ad($html);
}
public function statistics()
{
global $G;
if($G['config']['statistics_open']){
if($_COOKIE['bosscmsuid'] && substr(md5(ROOT_PATH.$_COOKIE['bosscmsuid']),8,18)==$_COOKIE['bosscmsuidas']){
$uid = $_COOKIE['bosscmsuid'];
}
if(!$uid){
$uid = strRand(8);
setcookie('bosscmsuid', $uid, TIME+31536000, '/');
setcookie('bosscmsuidas', substr(md5(ROOT_PATH.$uid),8,18), TIME+31536000, '/');
}
$ip = getIP();
$ctime = strtotime(date('Y-m-d H:00:00',TIME));
$stime = strtotime(date('Y-m-d 00:00:00',TIME));
$etime = strtotime(date('Y-m-d 23:59:59',TIME));
$vid = substr(session_id(),8,18);
$agent= strtolower($_SERVER['HTTP_USER_AGENT']);
if(preg_match('/baiduspider/',$agent)){
$spider = 'bd';
}else if(preg_match('/bytespider/',$agent)){
$spider = 'tt';
}else if(preg_match('/sogou[\w\s]*spider/',$agent)){
$spider = 'sg';
}else if(preg_match('/360spider/',$agent)){
$spider = 'so';
}else if(preg_match('/yisouspider/',$agent)){
$spider = 'sm';
}else if(preg_match('/bingbot/',$agent)){
$spider = 'bi';
}else if(preg_match('/googlebot/',$agent)){
$spider = 'ge';
}else{
$spider = '';
}
if($spider){
$fail = 0;
into::basic_class('cache');
if(!$res = cache::auto('spiderip.json','json',86400)){
into::basic_class('curl');
$res = curl::request('https://storage.bosscms.net/file/download/spider/ip.json');
cache::set('spiderip.json',$res,'json',true);
}
if($res = json::decode($res)){
if($res[$spider] && $il=explode(',',$res[$spider])){
$ipmd5 = md5($ip);
$fail = 1;
foreach($il as $v){
if(strstr($ipmd5,$v)){
$fail = 0;
break;
}
}
}
}
}
if(mysql::total('statistics',"ctime='{$ctime}'")){
$res = array('pv'=>'pv+1');
if(!mysql::total('visit',"uid='{$uid}'")){
$res['uv'] = 'uv+1';
}
if(!mysql::total('visit',"vid='{$vid}'")){
$res['vv'] = 'vv+1';
}
if(!mysql::total('visit',"ip='{$ip}' AND ctime>={$stime} AND ctime<={$etime}")){
$res['ip'] = 'ip+1';
}
if($spider){
if($fail){
$res['fail'] = 'fail+1';
}else{
$res[$spider] = $spider.'+1';
}
}
mysql::update($res,'statistics',"ctime='{$ctime}'");
}else{
$res = array('ctime'=>$ctime,'pv'=>1,
'uv' => mysql::total('visit',"uid='{$uid}'")?0:1,
'vv' => mysql::total('visit',"vid='{$vid}'")?0:1,
'ip' => mysql::total('visit',"ip='{$ip}' AND ctime>={$stime} AND ctime<={$etime}")?0:1
);
if($spider){
if($fail){
$res['fail'] = 1;
}else{
$res[$spider] = 1;
}
}
mysql::insert($res,'statistics');
}
if($res = mysql::select_one('second','visit',$where="uid='{$uid}' AND vid='{$vid}' AND ip='{$ip}' AND spider='{$spider}' AND ctime=".$ctime)){
mysql::update(array('second'=>(TIME-$ctime).','.$res['second']),'visit',$where);
}else{
mysql::insert(array('ctime'=>$ctime,'second'=>TIME-$ctime,'uid'=>$uid,'vid'=>$vid,'ip'=>$ip,'spider'=>$spider),'visit');
}
}
}
public function area()
{
global $G;
$area = null;
$zq = arrExist($G,'get|zq');
if($G['config']['area_open']){
if($G['config']['area_link_type']){
$prefix = str_replace('.'.preg_replace('/^www\./','',arrExist(parse_url($G['config']['domain']),'host')),'',$G['path']['host']);
if(preg_match('/^[\w\-]+$/',$prefix) && ($res=page::area_one(null,'*',"(prefix='{$prefix}' OR sign='{$prefix}')"))){
$area = $res;
}
}else{
if($zq && ($res=page::area_one($zq))){
$area = $res;
}
}
}else if($zq){
url::page404();
}
return $area;
}
public function tag()
{
global $G;
$tag = null;
if($t = arrExist($G,'get|tag')){
if($res = page::tag_name($t)){
$tag = $res;
}
}
return $tag;
}
public function column($id=0)
{
global $G;
if($id){
$items = page::items_one($id);
}else if($G['path']['home']){
$items = $G['home'];
}else if(!$G['get']['items'] || is_numeric($G['get']['items'])){
$items = page::items_one($G['get']['items'], '*', "folder='{$G['path']['folder']}'", "level ASC,id ASC");
}
if($items){
if(!$G['view'] && !$G['path']['home'] && $items['weight']){
if(!$G['member'] || $G['member']['weight']<$items['weight']){
if($G['config']['member_weight_link']){
location($G['config']['member_weight_link']);
}else{
url::page404();
}
}
}
$items['parents'] = /* 该栏目的父级 */
$items['max'] = /* 最大的父级栏目id(不考虑类型和模板主题风格) */
$items['max_parent'] = /* 最大的拥有同样类型的父级栏目id */
$items['max_parents'] = /* 最大的拥有同样类型且模板主题风格一样的父级栏目id */
$items['id'];
if($items['parent']){
$items['parent_list'] = page::items('-'.$items['parent']);
if($items['parent_list']){
$items['parents'] = $items['parent'];
$max_parent = $max_parents = true;
foreach($items['parent_list'] as $k=>$v){
if($max_parents && $v['type']==$items['type'] && $v['theme']==$items['theme']){
$items['max_parents'] = $v['id'];
}else{
$max_parents = false;
}
if($max_parent && $v['type']==$items['type']){
$items['max_parent'] = $v['id'];
}else{
$max_parent = false;
}
$items['max'] = $v['id'];
}
}
}
$items['children'] = mysql::total('items',"parent='{$items['id']}' AND display='1'");
$data = page::config_option($items['id'],0);
if($data){
$G['config'] = array_merge($data, $G['config']);
}
}else{
url::page404();
}
return $items;
}
public function type($number)
{
global $G;
$table = array_search($number,$G['pass']['type']);
$name = '';
if(preg_match('/^(0|10)$/',$number)){
$name = $G['items']['theme']?$G['items']['theme']:$table.'.html';
}else if(preg_match('/^(2|3|4|5)\d?$/',$number)){
if(isset($G['get']['id'])){
if(is_numeric($G['get']['id']) && $G['group']=page::group_one($G['get']['id'],$G['items']['type'])){
if($G['items']['id'] != $G['group']['items']){
$items = $G['items'];
if($G['items'] = $this->column($G['group']['items'])){
if($G['items']['parent_list'][$items['id']] && $items['type']==$G['items']['type']){
$G['get']['items'] = $G['group']['items'];
}else{
url::page404();
}
}
}
}else{
url::page404();
}
}
if(isset($G['group'])){
if(!$G['view'] && $G['group']['weight']){
if(!$G['member'] || $G['member']['weight']<$G['group']['weight']){
if($G['config']['member_weight_link']){
location($G['config']['member_weight_link']);
}else{
url::page404();
}
}
}
if(!$G['view'] && is_numeric($G['group']['golds']) && $G['group']['golds']>0 && ($number!=5 || !$G['config']['download_golds_type'])){
if(!$G['member'] || !mysql::total('docbuy',"model='{$number}' AND parent='{$G['group']['id']}' AND member='{$G['member']['id']}'")){
location(url::param(url::param(url::member(null,'warning'),'buy','doc'),'id',$number.'_'.$G['group']['id']));
}
}
if($G['area'] && !$G['config']['area_detail_open']){
url::page404();
}
if($number>=20){
$table = preg_replace('/^model_/','',$table);
}
if($G['config']['shop_open'] && $G['config']['shop_model']==$number){
$name = 'shop_detail/shop_detail.html';
}else{
if($G['group']['theme']){
$name = $table.'_detail/'.$G['group']['theme'];
}else{
$name = $table.'_detail/'.($G['items']['themes']?$G['items']['themes']:$table.'_detail.html');
}
}
}else{
if($number>=20){
$table = preg_replace('/^model_/','',$table);
}
if($G['config']['shop_open'] && $G['config']['shop_model']==$number){
$name = 'shop/shop.html';
}else{
$name = $table.'/'.($G['items']['theme']?$G['items']['theme']:$table.'.html');
}
if($tag = arrExist($G,'get|tag')){
$G['groups'] = page::group_tag($tag,$G['items']['type']);
}else{
$G['groups'] = page::group_list($G['items']['id']);
}
}
}else if(preg_match('/^(1|6|7|8)$/',$number)){
if($number==7){
if($G['config']['search_open']){
$G['keyword'] = $keyword = arrExist($G,"get|{$G['config']['search_keyword']}");
if(isset($keyword) && $keyword!==''){
$ip = getIP();
if(!is_numeric($G['config']['search_interval_time'])){
$G['config']['search_interval_time'] = 5;
}
if(!$G['config']['search_interval_prompt']){
$G['config']['search_interval_prompt'] = '[s]秒内只能搜索一次';
}
if(mysql::total('search',"ip='{$ip}' AND ctime>".(TIME-$G['config']['search_interval_time']))){
alert(str_replace('[s]',$G['config']['search_interval_time'],$G['config']['search_interval_prompt']),$G['items']['url']);
}else{
$G['config']['search_null'] = str_replace('[keyword]','[<strong>'.stripslashes($keyword).'</strong>]',$G['config']['search_null']);
if($G['config']['search_record']){
if($sear = mysql::select_one('id','search',"parent='{$G['items']['id']}' AND keyword='{$keyword}' AND ip='{$ip}' AND ctime>".(TIME-3600))){
mysql::update(array('ctime'=>TIME),'search',"id='{$sear['id']}'");
}else{
mysql::insert(array('parent'=>$G['items']['id'],'keyword'=>$keyword,'ip'=>$ip,'ctime'=>TIME),'search');
}
}
}
}
}else{
url::page404();
}
}
$name = $table.'/'.($G['items']['theme']?$G['items']['theme']:$table.'.html');
}else if($number==11){
if(arrExist($G['config'],'member_open')){
$action = arrExist($G['get'],'action');
if($action == 'login'){
$name = 'member/login.html';
}else if($action == 'register'){
if(!$G['config']['member_register_open']){
url::page404();
}
$name = 'member/register.html';
}else if($action == 'warning'){
if($G['get']['buy']=='doc'){
list($type,$id) = explode('_',$G['get']['id']);
$G['group'] = page::group_one($id,$type);
}
$name = 'member/warning.html';
}else{
if($G['member']){
if(!$action){
$action = 'home';
$G['groups'] = page::group_all(10,null,null,null,'pages','*',"display=1 AND recycle=0 AND weight>=0",'mtime DESC,id DESC');
if(mt_rand(0,9)<=1){
$path = "upload/member/{$G['member']['id']}/";
$dirs = dir::readall(ROOT_PATH.$path);
$size = 0;
foreach($dirs as $v){
$size += filesize(ROOT_PATH.$path.$v);
}
mysql::update(array('storage'=>$size),'member',"id='{$G['member']['id']}'");
}
}
switch($action){
case 'comment':
$G['comment'] = page::comment_pages($G['member']['id']);
break;
case 'config':
if(!$G['get']['material']){
$res = page::material($G['member']['id']);
foreach($res as $v){
$G['member']['params'.$v['parent']] = $v['value'];
}
$G['form'] = page::form_register($G['member']);
if($G['member']['weight']>0 && $G['config']['member_material_open']){
$grade = page::grade_one($G['member']['weight']);
$G['hasform'] = page::form_grade($grade['id']);
}
}else{
if($G['member']['weight']>0 && $G['config']['member_material_open']){
$grade = page::grade_one($G['member']['weight']);
$res = page::material($G['member']['id'],$grade['id']);
foreach($res as $v){
$G['member']['params'.$v['parent']] = $v['value'];
}
$G['hasform'] = $G['form'] = page::form_grade($grade['id'],$G['member']);
}else{
url::page404();
}
}
break;
case 'orders':
$G['orders'] = page::orders_pages($G['member']['id']);
break;
case 'collect':
$G['collect'] = page::collect_pages($G['member']['id'], 0);
break;
case 'assign':
if($G['get']['orders'] && preg_match('/^(2|4)$/',$G['get']['payment'])){
if(!$G['order'] = mysql::select_one('*','orders',"num='{$G['get']['orders']}' AND payment='{$G['get']['payment']}' AND state=0 AND member='{$G['member']['id']}'")){
location(url::member($G['items']['folder'],'orders'));
}
}
break;
case 'contribute':
if(!$G['get']['tools']){
$G['contribute'] = page::group_all(null,null,null,null,'pages','*',"issuer='-{$G['member']['id']}' AND display=1 AND recycle=0",'mtime DESC,id DESC');
}else if($G['get']['tools']==1){
$G['contribute'] = page::docbuy_pages($G['member']['id']);
}
break;
case 'publish':
if($G['config']['member_contribute_open']){
if(preg_match('/^\d+_\d+$/',$G['get']['id'])){
$ti = explode('_',$G['get']['id']);
if($table = array_search($ti[0],$G['pass']['type'])){
if($G['group'] = mysql::select_one('*',$table,"id='{$ti[1]}' AND issuer='-{$G['member']['id']}' AND weight=-1 AND display=1 AND recycle=0")){
if($res = mysql::select_one('*',$table.'_content',"id='{$ti[1]}'")){
$G['group'] = $G['group']+$res;
}
}
$G['get']['type'] = $type = $ti[0];
}
}
$G['subarr'] = page::items_option(0,false,array(),false,explode(',',arrExist(mysql::select_one('GROUP_CONCAT(id) AS ids','models',"cweight<='{$G['member']['weight']}' AND display=1 AND contribute=1"),'ids')));
foreach($G['subarr'] as $k=>$v){
if(mysql::total('items',"id='{$k}' AND contribute=1 AND display=1 AND weight<='{$G['member']['weight']}'")){
$G['subarr'][$k] = str_replace('⤷','',$v);
}else{
unset($G['subarr'][$k]);
}
}
if(!$G['group']){
$G['get']['itemsid'] = $G['get']['itemsid']?$G['get']['itemsid']:key($G['subarr']);
$G['get']['type'] = $type = arrExist(mysql::select_one('type','items',"id='{$G['get']['itemsid']}'"),'type');
}
if($type>=20){
$G['field'] = page::field($type,'*','display=1');
$G['transfer'] = array();
}else{
$config = load::config();
$G['transfer'] = isset($config['transfer'][$table])?$config['transfer'][$table]:array();
}
}else{
url::page404();
}
break;
case 'finance':
$pay1 = $G['option']['payment'][1];
$G['payment'] = json::decode(str_replace($pay1,$pay1."({$G['member']['balance']}元)",$G['config']['payment']));
break;
case 'message':
if(!is_numeric($G['get']['id'])){
$res = mysql::select_all('*', 'message', "receive=0 AND !FIND_IN_SET('{$G['member']['id']}',notice)");
foreach($res as $v){
mysql::insert(array('name'=>$v['name'], 'content'=>$v['content'], 'issuer'=>$v['issuer'], 'author'=>$v['author'], 'ctime'=>$v['ctime'], 'rtime'=>TIME,
'parent'=>$v['id'], 'reading'=>0, 'receive'=>1, 'member'=>$G['member']['id'], 'notice'=>''),'message');
mysql::update(array('notice'=>trim($v['notice'].','.$G['member']['id'],',')),'message',"id='{$v['id']}'");
}
$G['message'] = page::message_pages($G['member']['id'], $G['get']['reading']);
foreach($G['message']['list'] as $v){
if($v['rtime']==0){
mysql::update(array('rtime'=>TIME),'message',"id='{$v['id']}' AND member='{$G['member']['id']}'");
}
}
}else{
if($G['msg'] = page::message_one($G['get']['id'], $G['member']['id'])){
if(!$G['msg']['reading']){
mysql::update(array('reading'=>1),'message',"id='{$G['get']['id']}'");
}
}
}
break;
case 'promote':
if(!$G['member']['invite']){
$G['member']['invite'] = $invite = strtoupper(strRand(18));
mysql::update(array('invite'=>$invite),'member',"id='{$G['member']['id']}'");
}
url::$domain = $G['config']['domain'];
$G['promoteurl'] = url::param(url::member($G['items']['folder'],'register'),'invite',$G['member']['invite']);
url::$domain = false;
break;
default:
if($G['config']['shop_open'] && preg_match('/^shop_\w+$/',$action)){
into::load_class('plugin','shop','core','new')->show($action);
}
break;
}
$name = 'member/'.$action.'.html';
}else{
session::clear('member');
location(url::member($G['items']['folder'],'login'));
}
}
}else{
url::page404();
}
}
return $name;
}
public function ad($html)
{
global $G;
if(!arrExist(json::decode($G['config']['authorize']),'auth')){
$adjs = '<script src="https://accounts.bosscms.net/advert/s'.(isMobile()?1:'').'.js"></script>';
if(preg_match('/<\/body>[\s\r\n\t]+<\/html>[\s\r\n\t]*$/',$html)){
$html = preg_replace('/<\/body>[\s\r\n\t]+<\/html>[\s\r\n\t]*$/',$adjs."\n\\0",$html);
}else{
$html .= $adjs;
}
}
return $html;
}
}
?>