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/basic/class/page.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');

class page
{
	public static function config($id, $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(isset($id)){
			$where = "id='{$id}' AND {$where}";
		}
		if(!isset($order)){
			$order = "id ASC";
		}
		$data = mysql::select_all($select, 'config', $where, $order);
		return $data;
	}
	
	public static function config_option($parent=0, $type=0)
	{
		global $G;
		$data = array();
		$where = 1;
		if(isset($parent)){
			$where = "parent='{$parent}' AND {$where}";
		}
		if(isset($type)){
			$where = "type='{$type}' AND {$where}";
		}
		$result = self::config(null, 'id,name,value', "{$where} AND (lang='{$G['language']['id']}' OR lang=0)");
		$data = arrOption($result);
		if(isset($data['admin_foot'])){
			$data['admin_foot'] = str_replace('[TIME]',date('Y',TIME),$data['admin_foot']);
		}
		if($G['path']['type']=='web'){
			$chars = array(
				'beian',
				'miit_beian',
				'foot',
				'state_content',
				'consult_content',
				'area_insert',
				'area_foot_insert'
			);
			foreach($result as $v){
				if(in_array($v['name'], $chars)){
					$data[$v['name']] = delHtmlspecial($v['value']);
				}
			}
			if(isset($data['logo'])){
				$data['logo_pc'] = $data['logo'];
				if(isMobile()){
					$data['logo'] = $data['logo_mobile'];
				}
			}
		}
		return $data;
	}
	
	
	public static function group($items, $type=null, $select='*', $where=null, $order=null, $limit=null)
	{
		if($sql = self::group_sql($items, $type, $select, $where, $order, $limit)){
			return mysql::select($sql);
		}else{
			return array();
		}
	}

	public static function group_sql($items, $type=null, $select='*', $where=null, $order=null, $limit=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if($items){
			$items_list = $items;
			if(is_array($items)){
				$items_list = implode(',',$items);
				$items = array_shift($items);
			}
			if(!$type){
				if($arr = mysql::select_one('type','items',"id='{$items}'")){
					$type = $arr['type'];
				}
			}
			if(is_numeric($type)){
				$table = array_search($type,$G['pass']['type']);
				$itsql = $items_list;
				$res = self::items($items,null,'id');
				foreach($res as $v){
					$itsql .= ','.$v['id'];
				}
				if(strstr($itsql,',')){
					$where .= " AND items IN ({$itsql})";
				}else{
					$where .= " AND items={$itsql}";
				}
			}
		}else if(is_numeric($type)){
			$table = array_search($type,$G['pass']['type']);
		}
		if(!$table || !preg_match('/^(2|3|4|5)\d?$/',$type)){
		    return false;
		}
		if(!isset($order)){
			$order = "top DESC, sort DESC, mtime DESC, id ASC";
		}
		if($tops = mysql::select_all('*','top','etime<='.TIME)){
			foreach($tops as $v){
				mysql::delete('top',"id='{$v['id']}'");
				mysql::update(array('top'=>0),array_search($v['model'],$G['pass']['type']),"id='{$v['parent']}' AND lang=lang");
			}
		}
		return "SELECT {$select} FROM {$G['mysql']['prefix']}{$table} WHERE {$where} AND recycle=0 ORDER BY {$order}".($limit?" LIMIT {$limit}":'');
	}
	
	public static function group_both($id, $items, $type=null, $number=1, $select='*', $where=null, $order=null, $limit=null)
	{
		global $G;
		$data = array();
		$data['prev'] = array();
		$data['next'] = array();
		if($number<=0){
			return $data;
		}
		if(!$where){
			$where = 1;
		}
		$where = "display=1 AND weight>=0 AND {$where}";
		if(!$type){
			$arr = mysql::select_one('type','items',"id='{$items}'");
			$type = $arr['type'];
		}
		if($G['config']['both_type']){
			$parent_items = self::items(-$items);
			foreach($parent_items as $v){
				if($v['type'] == $type){
					$items = $v['id'];
				}else{
					break;
				}
			}
		}
		mysql::query('SET @i=0, @n=0');
		$res = mysql::select('SELECT id,@n AS n,i FROM ('.self::group_sql($items, $type, "id,(@i:=@i+1) AS i,(CASE id WHEN {$id} THEN @n:=@i ELSE null END) AS m", $where, $order).') AS t WHERE i>@n-'.($number+1).' LIMIT '.($number*2+1));
		foreach($res as $v){
			if($v['n'] > $v['i']){
				$data['prev'][] = self::group_one($v['id'], $type, $select);
			}else if($v['n'] < $v['i']){
				if($number){
					$data['next'][] = self::group_one($v['id'], $type, $select);
					$number--;
				}
			}
		}
		return $data;
	}
	
	public static function group_pages($items, $type=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if(arrExist($G['get'],'search') == 'param'){
			$sql = '';
			preg_match_all("/(?:\?|&)(\w+,\d+)=/", str_replace($name,'',$G['path']['link']), $match);
			if($match[1]){
				foreach($match[1] as $v){
					if(isset($G['get'][$v])){
						$jn = $G['get'][$v]?strFilter(preg_replace('/^\[(.+)\]$/','\\1',json::encode(array(delFilter($G['get'][$v]))))):'';
						$res = mysql::select_all('parent','theme',"name='{$v}' AND ( value='{$G['get'][$v]}' OR LOCATE('{$jn}',value) ) ");
						$s = array();
						foreach($res as $r){
							$s[] = $r['parent'];
						}
						$sql .= " AND id IN (".implode(',',$s).")";
					}
				}
			}
			if($sql){
				$where .= $sql;
			}
		}
		if($items){
			$itemsarr = mysql::select_one('folder,type','items',"id='{$items}'");
			$folder = $itemsarr['folder'];
			$type = $itemsarr['type'];
		}else if(!$type){
			return array();
		}
		$table = array_search($type,$G['pass']['type']);
		if(!$table || !preg_match('/^(2|3|4|5)\d?$/',$type)){
			return array();
		}
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = is_numeric($G['config'][$table.'_number'])?$G['config'][$table.'_number']:20;
		}
		$data['list'] = self::group($items, $type, "SQL_CALC_FOUND_ROWS *", $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);

		if(preg_match('/"^(2|3|4|5)\d$"/',$type)){
			$field = self::field($type);
		}
		$width = $G['config']["{$table}_thumbnail_width"]?$G['config']["{$table}_thumbnail_width"]:300;
		$height = $G['config']["{$table}_thumbnail_height"]?$G['config']["{$table}_thumbnail_height"]:300;
		$complex = array();
		if($data['list']){
			if(strstr($select,'*')){
				$selcon = $selshop = '*';
			}else{
				$selcon = $selshop = 'id';
				$selarr = explode(',',$select);
				foreach($selarr as $v){
					$tv = trim($v);
					if($G['database'][$table.'_content'][$tv]){
						$selcon .= ($selcon?',':'').$v;
					}else if($G['config']['shop_open'] && $G['config']['shop_model']==$type && $G['database']['shop'][$tv]){
						$selshop .= ($selshop?',':'').$v;
					}
				}
			}
			if($selcon!='id'){
				$conarr = arrOptions(mysql::select_all($selcon,$table.'_content','id IN ('.implode(',',arrOption($data['list'],'id','id')).')'));
			}
			if($selshop!='id' && $G['config']['shop_open'] && $G['config']['shop_model']==$type){
				$shoparr = arrOptions(mysql::select_all($selshop,'shop','id IN ('.implode(',',arrOption($data['list'],'id','id')).')'));
			}
			foreach($data['list'] as $k=>$v){

				if($conarr[$v['id']]){
					$data['list'][$k] = $v = $v+$conarr[$v['id']];
				}
				if($shoparr[$v['id']]){
					$data['list'][$k] = $v = $v+$shoparr[$v['id']];
				}
				$data['list'][$k]['width'] = $width;
				$data['list'][$k]['height'] = $height;
				if(!isset($folder) || is_array($items) || $items!=$v['items']){
					$r = mysql::select_one('folder','items',"id='{$v['items']}'");
					$folder = $r['folder'];
				}
				$data['list'][$k]['type'] = $type;
				$data['list'][$k]['folder'] = $folder;
				$data['list'][$k]['url'] = url::group($folder, $v);
				$data['list'][$k]['target'] = $v['target']?'target="_blank"':'';
				if(preg_match('/^(2|3|4|5)$/',$type)){
					$data['list'][$k]['content'] = delHtmlspecial($v['content']);
					if(isset($v['container'])){
						$data['list'][$k]['container'] = delHtmlspecial($v['container']);
					}
				}else{
					foreach($field as $f){
						if($f['style']==2){
							$data['list'][$k][$f['name']] = delHtmlspecial($v[$f['name']]);
						}
					}
				}
				if($type==5){
					if(!$v['size']){
						$data['list'][$k]['size'] = 0;
					}
					$dfiles = json::decode($v['dfiles']);
					if($v['file'] && $G['config']['download_mirror_open'] && $mirror=json::decode($G['config']['download_mirror_dfiles'])){
						foreach($mirror as $k2=>$v2){
							$dfiles[] = array(
								'file' => url::upload($v['file'],$v2['file']),
								'down' => $v2['down']
							);
						}
						if(!$G['config']['download_mirror_local']){
							$data['list'][$k]['file'] = $v['file'] = '';
						}
					}
					$data['list'][$k]['dfiles'] = $dfiles;
					if($G['config']['download_linktype']){
						if($v['file']){
							$data['list'][$k]['file'] = url::download($v['id'],$v['file']);
						}
						foreach($dfiles as $k2=>$v2){
							$dfiles[$k2]['file'] = url::download($v['id'],$v2['file']);
						}
						$data['list'][$k]['dfiles'] = $dfiles;
					}
				}
				if($type!=2 && preg_match('/^(2|3|4|5)\d?$/',$type)){
					if($res = value::get(null,$v['id'],$type,null,false)){
						foreach($res as $n=>$p){
							$data['list'][$k][$n] = preg_match('/^\[".+"\]$/',$p)?implode(',',json::decode($p)):$p;	
						}
						if(preg_match('/^params,(\d+)$/',$n)){
							if(!isset($complex[$v['id']])){
								$complex[$v['id']] = self::complex_list($type, $v['items'], null, 'params');
							}
							foreach($complex[$v['id']] as $c){
								$c['value'] = $data['list'][$k]['params,'.$c['id']];
								$data['list'][$k]['complex'][] = $c;
							}
						}
					}
	
				}
			}
		}
		return $data;
	}

	public static function group_all($rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = 20;
		}
		if(!isset($order)){
			$order = "top DESC, sort DESC, mtime DESC, id ASC";
		}
		$sql = array();
		$field = preg_replace('/(,?\s*id)?\s+(DESC|ASC)/i','',$order);
		foreach($G['database']['news'] as $k=>$v){
			if(preg_match("/\W{$k}\W/"," {$where} ") && !strstr($field,$k)){
				$field .= ','.$k;
			}
		}
		foreach($G['pass']['type'] as $k=>$v){
			if(preg_match('/^(2|3|4|5)\d?$/',$v)){
				$sql[] = "SELECT id,{$field},{$v} AS type FROM ".$G['mysql']['prefix'].$k." WHERE recycle=0 AND lang={$G['language']['id']}";
			}
		}
		if($tops = mysql::select_all('*','top','etime<='.TIME)){
			foreach($tops as $v){
				mysql::delete('top',"id='{$v['id']}'");
				mysql::update(array('top'=>0),array_search($v['model'],$G['pass']['type']),"id='{$v['parent']}' AND lang=lang");
			}
		}
		$data['list'] = mysql::select("SELECT SQL_CALC_FOUND_ROWS * FROM (".implode(' UNION ALL ',$sql).") AS t WHERE {$where} ORDER BY {$order} LIMIT ".(($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		$arr = array();
		foreach($data['list'] as $v){
			$arr[$v['type']][] = $v['id'];
		}
		foreach($arr as $k=>$v){
			$table = array_search($k,$G['pass']['type']);
			$list = arrOptions(mysql::select_all($select,$table.'_content','id IN ('.implode(',',$v).')'),'id');
			$res = mysql::select_all('*',$table,'id IN ('.implode(',',$v).')');
			$arr[$k] = array();
			foreach($res as $v2){
				$v2 = $v2+array('type'=>$k);
				$li = $list[$v2['id']];
				$arr[$k][$v2['id']] = $li?$v2+$li:$v2;
			}
		}
		foreach($data['list'] as $k=>$v){
			$data['list'][$k] = $v = $arr[$v['type']][$v['id']];
			if(!$folder = $G['items_list'][$v['items']]){
				$folder = $G['items_list'][$v['items']] = arrExist(mysql::select_one('folder','items',"id='{$v['items']}'"),'folder');
			}
			$data['list'][$k]['url'] = url::group($folder,$v);
		}
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, null, null, 'pages');
		return $data;
	}
	
	public static function group_list($items=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(!isset($items)){
			$items = $G['items']['id'];
		}
		if(!isset($url) && $G['config']['rewrite_open']){
			$itemsarr = mysql::select_one('*','items',"id='{$items}'");
			$url = url::items($itemsarr,null,null,null,false);
		}
		$where = "display=1 AND weight>=0 AND {$where}";
		$data = self::group_pages($items, null, $rows, $pages, $btns, $url, $name, $select, $where, $order);
		if(isset($G['area']) && preg_match('/"(3|4)"/',$G['config']['area_name_type'])){
			foreach($data['list'] as $k=>$v){
				if($v['name'] && preg_match('/"3"/',$G['config']['area_name_type'])){
					$data['list'][$k]['name'] = $G['area']['name'].$v['name'];
				}
				if($v['text'] && preg_match('/"4"/',$G['config']['area_name_type'])){
					$data['list'][$k]['text'] = $G['area']['name'].$v['text'];
				}
			}
		}
		return $data;
	}

	public static function group_tag($tag=null, $type=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(!isset($tag)){
			$tag = $G['get']['tag'];
		}
		$res = self::tag_name($tag,'parent');	
		if(!isset($type)){
			$type = $G['items']['type'];
		}
		if(!isset($url) && $G['config']['rewrite_open']){
			$itemsarr = mysql::select_one('folder','items',"type='{$type}'",'sort DESC, id ASC');
			$url = url::tag($itemsarr['folder'],array('name'=>$tag),null,null,null,false);
		}
		$where = "FIND_IN_SET(id,'{$res['parent']}') AND display=1 AND weight>=0 AND {$where}";
		$data = self::group_pages(null, $type, $rows, $pages, $btns, $url, $name, $select, $where, $order);
		if(isset($G['area']) && preg_match('/"(3|4)"/',$G['config']['area_name_type'])){
			foreach($data['list'] as $k=>$v){
				if($v['name'] && preg_match('/"3"/',$G['config']['area_name_type'])){
					$data['list'][$k]['name'] = $G['area']['name'].$v['name'];
				}
				if($v['text'] && preg_match('/"4"/',$G['config']['area_name_type'])){
					$data['list'][$k]['text'] = $G['area']['name'].$v['text'];
				}
			}
		}
		return $data;
	}
	
	public static function group_type($type, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(!isset($url) && $G['config']['rewrite_open']){
			$itemsarr = mysql::select_one('folder','items',"type='{$type}'",'sort DESC, id ASC');
			$url = url::items($itemsarr,null,null,null,false);
		}
		$where = "display=1 AND weight>=0 AND {$where}";
		$data = self::group_pages(null, $type, $rows, $pages, $btns, $url, $name, $select, $where, $order);
		if(isset($G['area']) && preg_match('/"(3|4)"/',$G['config']['area_name_type'])){
			foreach($data['list'] as $k=>$v){
				if($v['name'] && preg_match('/"3"/',$G['config']['area_name_type'])){
					$data['list'][$k]['name'] = $G['area']['name'].$v['name'];
				}
				if($v['text'] && preg_match('/"4"/',$G['config']['area_name_type'])){
					$data['list'][$k]['text'] = $G['area']['name'].$v['text'];
				}
			}
		}
		return $data;
	}

	public static function group_one($id, $type, $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		$table = array_search($type,$G['pass']['type']);
		if(!$table || !preg_match('/^(2|3|4|5)\d?$/',$type)){
			return array();
		}
		if(is_numeric($id)){
			$where = "id='{$id}' AND {$where}";
		}
		$where = "display=1 AND recycle=0 AND {$where}";
		if(!$G['view']){
			$where = "(weight>=0 OR issuer='-{$G['member']['id']}') AND {$where}";
		}
		if(!isset($order)){
			$order = "top DESC, sort DESC, mtime DESC, id ASC";
		}
		$data = mysql::select_one('*', $table, $where, $order);
		$data['width'] = $G['config']["{$table}_thumbnail_width"];
		$data['height'] = $G['config']["{$table}_thumbnail_height"];
		if(isset($data['id'])){
			if($res = mysql::select_one($select, $table.'_content', "id='{$data['id']}'")){
				$data = $data+$res;
			}
			if($G['config']['shop_open'] && $G['config']['shop_model']==$type && $res=mysql::select_one($select, 'shop', "id='{$data['id']}'")){
				$data = $data+$res;
				if($G['items']['type']==$type){
					$manifest = array();
					$res = mysql::select_all('*','shop_manifest',"parent='{$data['id']}'");
					foreach($res as $v){
						$manifest[$v['specname']] = array(
							'saleimg' => cache::thumbnail($v['saleimg']?$v['saleimg']:$data['image'],$data['width'],$data['height']),
							'saleprice' => $v['saleprice'],
							'initprice' => $v['initprice'],
							'stocks' => $v['stocks'],
							'codes' => $v['codes']
						);
					}
					$data['manifest'] = json::encode($manifest);
					$data['coupon'] = mysql::select_all('*','shop_coupon',TIME.'>stime AND etime>'.TIME.' AND quantity>0 AND display=1 AND bounds>0');
				}
			}
			if($type==3){
				for($i=0; $i<$G['config']['product_content_number']; $i++){
					$k=$i?$i:'';
					if($k){
						$data['content'.$k] = delHtmlspecial($data['content'.$k]);
					}
					$data['contents'][$i] = array(
						'title' => $G['config']['product_content_title'.$k],
						'content' => delHtmlspecial($data['content'.$k])
					);
				}
			}else if($type==5){
				if(!$data['size']){
					$data['size'] = 0;
				}
				$dfiles = json::decode($data['dfiles']);
				if($data['file'] && $G['config']['download_mirror_open'] && $mirror=json::decode($G['config']['download_mirror_dfiles'])){
					foreach($mirror as $k=>$v){
						$dfiles[] = array(
							'file' => url::upload($data['file'],$v['file']),
							'down' => $v['down']
						);
					}
					if(!$G['config']['download_mirror_local']){
						$data['file'] = '';
					}
				}
				$data['dfiles'] = $dfiles;
				if($G['config']['download_linktype']){
					if($data['file']){
						$data['file'] = url::download($data['id'],$data['file']);
					}
					foreach($dfiles as $k=>$v){
						$dfiles[$k]['file'] = url::download($data['id'],$v['file']);
					}
					$data['dfiles'] = $dfiles;
				}
			}
			if($type!=2){
				if($res = value::get(null,$data['id'],$type,null,false)){
					foreach($res as $k=>$v){
						$data[$k] = preg_match('/^\[".+"\]$/',$v)?implode(',',json::decode($v)):$v;
					}
					if(preg_match('/^params,(\d+)$/',$k)){
						$comp = self::complex_list($type, $data['items'], null, 'params');
						foreach($comp as $c){
							$c['value'] = $data['params,'.$c['id']];
							$data['complex'][] = $c;
						}
					}
				}
			}
		}
		$res = mysql::select_one('folder','items',"id='{$data['items']}'");
		if($images = arrExist($data,'images')){
			$data['imgs'] = json::decode($images);
		}else{
			if($image = arrExist($data,'image')){
				$data['imgs'][0] = $image;
			}else{
				$data['imgs'] = array();
			}
		}
		$data['tag'] = self::tag_list($type, $id);
		$data['folder'] = $res['folder'];
		$data['url'] = url::group($res['folder'], $data);
		$data['target'] = $data['target']?'target="_blank"':'';
		$data['type'] = $type;
		$data['collect'] = $G['member']['id']&&mysql::total('collect',"type=0 AND model='{$type}' AND parent='{$id}' AND member='{$G['member']['id']}'")?1:0;
		if(preg_match('/^(2|3|4|5)$/',$type)){
			$data['content'] = delHtmlspecial($data['content']);	
			if(isset($data['container'])){
				$data['container'] = delHtmlspecial($data['container']);
			}
		}else{
			$field = self::field($type);
			foreach($field as $v){
				if($v['style']==2){
					$data[$v['name']] = delHtmlspecial($data[$v['name']]);
				}
			}
		}
		if(isset($G['area']) && preg_match('/"(3|4|5)"/',$G['config']['area_name_type'])){
			if(preg_match('/"3"/',$G['config']['area_name_type'])){
				if($data['name']){
					$data['name'] = $G['area']['name'].$data['name'];
				}
			}
			if(preg_match('/"4"/',$G['config']['area_name_type'])){
				if($data['text']){
					$data['text'] = $G['area']['name'].$data['text'];
				}
			}
			if(preg_match('/"5"/',$G['config']['area_name_type'])){
				if(preg_match('/^(2|3|4|5)$/',$type)){
					$data['content'] = RepHtmlStr($data['content'],$G['area']['name']);
					if($type==3){
						$data['content1'] = RepHtmlStr($data['content1'],$G['area']['name']);
						$data['content2'] = RepHtmlStr($data['content2'],$G['area']['name']);
						$data['content3'] = RepHtmlStr($data['content3'],$G['area']['name']);
						$data['content4'] = RepHtmlStr($data['content4'],$G['area']['name']);
					}
				}else if($field){
					foreach($field as $v){
						if($v['style']==2){
							$data[$v['name']] = RepHtmlStr($data[$v['name']],$G['area']['name']);
						}
					}
				}
			}
		}
		return $data;
	}

	
	public static function tag_lists($type=null, $parent=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		if(!isset($rows)){
			$rows = is_numeric($G['config']['tag_number'])?$G['config']['tag_number']:100;
		}
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		$data['list'] = self::tag_list($type, $parent, 'SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		if(!isset($url) && $G['config']['rewrite_open']){
			$itemsarr = mysql::select_one('*','items',"id='{$G['items']['id']}'");
			$url = url::items($itemsarr,null,null,null,false);
		}
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}

	public static function tag_list($type=null, $parent=null, $select='*', $where=null, $order=null, $limit=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		$folder = array();
		if(isset($type)){
			$res = mysql::select_one('folder','items',"type='{$type}'",'sort DESC, id ASC');
			$folder[$type] = $res['folder'];
		}else{
			foreach(array(2,3,4,5) as $v){
				$res = mysql::select_one('folder','items',"type='{$v}'",'sort DESC, id ASC');
				$folder[$v] = $res['folder'];
			}
		}
		$data = self::tag($type, $parent, $select, $where, $order, $limit);
		foreach($data as $k=>$v){
			$data[$k]['url'] = url::tag($folder[$v['type']], $v);
		}
		return $data;
	}
	
	public static function tag_name($name, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(is_numeric($name)){
			$data = self::tag_one($name, $select, $where, $order);
		}else{
			$where = "name='{$name}' AND {$where}";
			$data = self::tag_one(null, $select, $where, $order);
		}
		return $data;
	}
	
	public static function tag_one($id=null, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(isset($id)){
			$where = "id='{$id}'";
		}
		if(!isset($order)){
			$order = "id ASC";
		}
		$data = mysql::select_one($select, 'tag', $where, $order);
		return $data;
	}
	
	public static function tag_pages($type=null, $parent=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($rows)){
			$rows = 20;
		}
		$res = self::tag($type, $parent, 'COUNT(*) AS _total', $where);
		$data['total'] = $res[0]['_total'];
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		$pages = $data['pages'][$name];
		$start = ($pages-1) * $rows;
		$data['list'] = self::tag($type, $parent, $select, $where, $order, "{$start},{$rows}");
		return $data;
	}
	
	public static function tag($type, $parent, $select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if(isset($type)){
			$where = "type='{$type}' AND {$where}";
		}
		if(isset($parent)){
			$where = "FIND_IN_SET('{$parent}',parent) AND {$where}";
		}
		if(!isset($order)){
			$order = "id ASC";
		}
		$data = mysql::select_all($select, 'tag', $where, $order, $limit);
		return $data;
	}
	
	
	public static function models($select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "id ASC";
		}
		$data = mysql::select_all($select, 'models', $where, $order);
		return $data;
	}
	
	public static function models_list($model=false, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if($model){
			$where = "id>=20 AND {$where}";
		}
		$where = "display=1 AND {$where}";
		$data = self::models($select, $where, $order);
		return $data;
	}
	
	public static function field($parent=null, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(isset($parent)){
			$where = "parent='{$parent}' AND {$where}";
		}
		if(!isset($order)){
			$order = "sort DESC,id ASC";
		}
		$data = mysql::select_all($select, 'field', $where, $order);
		return $data;
	}

	public static function member_one($id=null, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(isset($id)){
			$where = "id='{$id}'";
		}
		if(!isset($order)){
			$order = "id ASC";
		}
		$data = mysql::select_one($select, 'member', $where, $order);
		return $data;
	}
	
	public static function member_pages($rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($rows)){
			$rows = 20;
		}
		$res = self::member('COUNT(*) AS _total', $where);
		$data['total'] = $res[0]['_total'];
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		$pages = $data['pages'][$name];
		$start = ($pages-1) * $rows;
		$data['list'] = self::member($select, $where, $order, "{$start},{$rows}");
		return $data;
	}
	
	public static function member($select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "ctime DESC,id DESC";
		}
		$data = mysql::select_all($select, 'member', $where, $order, $limit);
		return $data;
	}

	public static function grade_one($weight, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		$where = "weight<='{$weight}' AND open=1 AND {$where}";
		if(!isset($order)){
			$order = "weight DESC,id DESC";
		}
		$data = mysql::select_one($select, 'grade', $where, $order);
		return $data;
	}
	
	public static function grade_list($select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		$where = "open=1 AND {$where}";
		$data = self::grade($select, $where, $order);
		return $data;
	}

	public static function grade($select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "weight ASC,id ASC";
		}
		$data = mysql::select_all($select, 'grade', $where, $order);
		return $data;
	}

	public static function ranks_one($points, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		$where = "points<='{$points}' AND open=1 AND {$where}";
		if(!isset($order)){
			$order = "points DESC,id DESC";
		}
		$data = mysql::select_one($select, 'ranks', $where, $order);
		return $data;
	}

	public static function ranks($select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "points ASC,id ASC";
		}
		$data = mysql::select_all($select, 'ranks', $where, $order);
		return $data;
	}

	public static function docbuy_pages($member=null, $type=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = 20;
		}
		$data['list'] = self::docbuy($member, $type, 'SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		foreach($data['list'] as $k=>$v){
			$data['list'][$k]['group'] = self::group_one($v['parent'],$v['model']);
		}
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}
	public static function docbuy($member=null, $type=null, $select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if($member){
			$where = "member='{$member}' AND {$where}";
		}
		if($type){
			$where = "type='{$type}' AND {$where}";
		}
		if(!isset($order)){
			$order = "ctime DESC,id DESC";
		}
		$data = mysql::select_all($select, 'docbuy', $where, $order, $limit);
		return $data;
	}

	public static function collect_pages($member=null, $type=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = 20;
		}
		$data['list'] = self::collect($member, $type, 'SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		foreach($data['list'] as $k=>$v){
			$data['list'][$k]['group'] = self::group_one($v['parent'],$v['model']);
		}
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}
	public static function collect($member=null, $type=null, $select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if($member){
			$where = "member='{$member}' AND {$where}";
		}
		if($type){
			$where = "type='{$type}' AND {$where}";
		}
		if(!isset($order)){
			$order = "ctime DESC,id DESC";
		}
		$data = mysql::select_all($select, 'collect', $where, $order, $limit);
		return $data;
	}

	public static function message_one($id, $member=null, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		$where = "id='{$id}' AND {$where}";
		if(is_numeric($member)){
			$where = "member='{$member}' AND {$where}";
		}
		if(!isset($order)){
			$order = "ctime DESC,id DESC";
		}
		$data = mysql::select_one($select, 'message', $where, $order);
		return $data;
	}
	public static function message_pages($member=null, $reading=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = 20;
		}
		$data['list'] = self::message($member, $reading, 'SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}
	public static function message($member=null, $reading=null, $select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if(is_numeric($member)){
			$where = "member='{$member}' AND {$where}";
			if(is_numeric($reading)){
				$where = "reading='{$reading}' AND {$where}";
			}
		}
		if(!isset($order)){
			$order = "id DESC";
		}
		$data = mysql::select_all($select, 'message', $where, $order, $limit);
		return $data;
	}

	public static function orders_pages($member=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		if($expire = $G['config']['member_orders_expire']){
			mysql::delete('orders',TIME.'-ctime>'.($expire*3600).' AND state=0');
		}
		$data = array();
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = 20;
		}
		$data['list'] = self::orders($member, 'SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}
	public static function orders($member=null, $select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if(is_numeric($member)){
			$where = "member='{$member}' AND {$where}";
		}
		if(!isset($order)){
			$order = "ctime DESC,id DESC";
		}
		$data = mysql::select_all($select, 'orders', $where, $order, $limit);
		return $data;
	}

	public static function comment_list($gid, $model, $parent=0, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		$where = "gid='{$gid}' AND model='{$model}' AND parent='{$parent}' AND examine=1 AND {$where}";
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = is_numeric($G['config']['member_comment_number'])?$G['config']['member_comment_number']:5;
		}
		$data['list'] = self::comment(null, 'SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		$remain = $data['total']-$rows*$pages;
		$data['remain'] = $remain>=0?$remain:0;
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		$list = array();
		foreach($data['list'] as $k=>$v){
			$list[$v['id']] = $v;
			if(!$G['man'][$v['member']]){
				$G['man'][$v['member']] = mysql::select_one('alias,username,avatar','member',"id='{$v['member']}'");
			}
			$man = $G['man'][$v['member']];
			$data['list'][$k]['name'] = $man['alias']?$man['alias']:$man['username'];
			$data['list'][$k]['image'] = url::upload($man['avatar']);
			$data['list'][$k]['islike'] = $G['member']&&preg_match('/(^|,)'.$G['member']['id'].'(,|$)/',$v['heart'])?1:0;
			$data['list'][$k]['like'] = $v['heart']?substr_count($v['heart'],',')+1:0;
			if($v['superior'] && $v['parent']!=$v['superior']){
				if(!$sup = $list[$v['superior']]){
					$sup = mysql::select_one('*','comment',"id='{$v['superior']}'");
				}
				if($sup){
					$data['list'][$k]['supanonymity'] = $sup['anonymity'];
					$data['list'][$k]['supmember'] = $sup['member'];
					$data['list'][$k]['supcontent'] = $sup['content'];
					if(!$G['man'][$sup['member']]){
						$G['man'][$sup['member']] = mysql::select_one('alias,username,avatar','member',"id='{$v['member']}'");
					}
					$super = $G['man'][$sup['member']];
					$data['list'][$k]['supname'] = $super['alias']?$super['alias']:$super['username'];
				}
			}
		}
		return $data;
	}
	public static function comment_pages($member=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = 20;
		}
		$data['list'] = self::comment($member, 'SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		foreach($data['list'] as $k=>$v){
			if($res = page::group_one($v['gid'],$v['model'])){
				$data['list'][$k]['name'] = $res['name'];
				$data['list'][$k]['items'] = $res['items'];
				$data['list'][$k]['url'] = $res['url'];
			}
		}
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}
	public static function comment($member=null, $select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if(is_numeric($member)){
			$where = "member='{$member}' AND {$where}";
		}
		if(!isset($order)){
			$order = "ctime DESC,id DESC";
		}
		$data = mysql::select_all($select, 'comment', $where, $order, $limit);
		return $data;
	}

	public static function package_list($type=null, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		$where = "open=1 AND {$where}";
		$data = self::package($type, $select, $where, $order);
		return $data;
	}
	public static function package($type=null, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(isset($type)){
			$where = "type='{$type}' AND {$where}";
		}
		if(!isset($order)){
			$order = "sort DESC, id DESC";
		}
		$data = mysql::select_all($select, 'package', $where, $order);
		return $data;
	}
	

	public static function plugin_list($select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		$where = "display=1 AND {$where}";
		$data = self::plugin($select, $where, $order);
		foreach($data as $k=>$v){
            $data[$k]['target'] = $v['target']?' target="_blank"':'';
		}
		return $data;
	}
    
	public static function plugin($select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "sort DESC, id ASC";
		}
		$data = mysql::select_all($select, 'plugin', $where, $order);
		return $data;
	}
	
	
	public static function area_one($sign, $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(isset($sign)){
			$where = "sign='{$sign}' AND {$where}";
		}
		if(!isset($order)){
			$order = "id ASC";
		}
		$where = "display=1 AND {$where}";
		$data = mysql::select_one($select, 'area', $where, $order);
		if($data['id']){
			$data['content'] = delHtmlspecial($data['content']);
		}
		return $data;
	}
	
	public static function area_pages($items=null, $parent=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($rows)){
			$rows = 100;
		}
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		$data['list'] = self::area($parent, 'SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}
	
	public static function area_list($items, $parent=null, $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		$where = "display=1 AND {$where}";
		$data = self::area($parent, $select, $where, $order);
		$it = self::items_one($items);
		foreach($data as $k=>$v){
			if($G['group']){
				$data[$k]['url'] = url::group($it['folder'],$G['group'],null,null,$v);
			}else{
				$data[$k]['url'] = url::items($it,null,null,$v);
			}
		}
		return $data;
	}
 
	public static function area($parent=null, $select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if(isset($parent)){
			$where = "parent='{$parent}' AND {$where}";
		}
		if(!isset($order)){
			$order = "id ASC";
		}
		$data = mysql::select_all($select, 'area', $where, $order, $limit);
		return $data;
	}

	
	public static function language_one($id, $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(is_numeric($id)){
			$where = "id='{$id}' AND {$where}";
		}
		$where = "display=1 AND {$where}";
		$data = mysql::select_one($select, 'language', $where, $order);
		$data['url'] = url::home($data['id']);
		$data['target'] = $data['target']?' target="_blank"':'';
		return $data;
	}
	
	public static function language_list($select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		$where = "display=1 AND {$where}";
		$data = self::language($select, $where, $order);
		foreach($data as $k=>$v){
			$data[$k]['url'] = url::home($v['id']);
            $data[$k]['target'] = $v['target']?' target="_blank"':'';
		}
		return $data;
	}

	public static function language($select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "sort DESC, id ASC";
		}
		$data = mysql::select_all($select, 'language', $where, $order);
		return $data;
	}
	
	
	public static function banner_list($items=null, $type=null, $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(!isset($type)){
			$type = $G['items']['type'];
		}
		if(!isset($items)){
			$items = $G['items']['id'];
		}
		$screen = isMobile()?1:0;
		$where = "((type!='' AND LOCATE('\"{$type}\"',type)>0) OR (items!='' AND LOCATE('\"{$items}\"',items)>0)) AND screen='{$screen}' AND display=1 AND {$where}";
		$data = self::banner($select, $where, $order);
		foreach($data as $k=>$v){
			$data[$k]['content'] = delHtmlspecial($v['content']);
            $data[$k]['target'] = $v['target']?' target="_blank"':'';
		}
		return $data;
	}
	public static function banner_pages($rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = 20;
		}
		$data['list'] = self::banner('SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}
	public static function banner($select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "sort DESC, id ASC";
		}
		$data = mysql::select_all($select, 'banner', $where, $order, $limit);
		return $data;
	}
	
	
	public static function link_list($items=null, $type=null, $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(isset($type)){
			$where .= " AND type='{$type}' ";
		}
		if(is_numeric($G['area']['id'])){
			$where .= " AND area='{$G['area']['id']}' ";
		}else{
			if(!$items){
				$items = $G['items']['id'];
			}
			$where .= " AND LOCATE('\"{$items}\"',items)>0 AND area=0 ";
		}
		$where = "display=1 AND {$where}";
		$data = self::link($select, $where, $order);
		foreach($data as $k=>$v){
            $data[$k]['nofollow'] = $v['nofollow']?' rel="nofollow"':'';
            $data[$k]['target'] = $v['target']?' target="_blank"':'';
		}
		return $data;
	}
	public static function link_pages($rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = 20;
		}
		$data['list'] = self::link('SQL_CALC_FOUND_ROWS '.$select, $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}
	public static function link($select='*', $where=null, $order=null, $limit=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "sort DESC, id ASC";
		}
		$data = mysql::select_all($select, 'link', $where, $order, $limit);
		return $data;
	}

	
	/* B O S S C M S */
	public static function consult_list($select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		$where = "display=1 AND {$where}";
		$data = self::consult($select, $where, $order);
		return $data;
	}
	
	public static function consult($select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "sort DESC, id ASC";
		}
		$data = mysql::select_all($select, 'consult', $where, $order);
		return $data;
	}
	
	
	
	public static function menu_list($select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		$where = "display=1 AND {$where}";
		$data = self::menu($select, $where, $order);
		foreach($data as $k=>$v){
            $data[$k]['target'] = $v['target']?' target="_blank"':'';
		}
		return $data;
	}
	
	public static function menu($select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = "sort DESC, id ASC";
		}
		$data = mysql::select_all($select, 'menu', $where, $order);
		return $data;
	}


	public static function layers_series($core, $series='', $parent=0, $level=1)
	{
		$data = array();
		if($series){
			$list = self::layers($core, $series, $parent);
			foreach($list as $key=>$val){
				$val['level'] = $level;
				$data[] = $val;
				$result = theme::series_list($core, 88, $series);
				foreach($result as $k=>$v){
					$v['level'] = $level+1;
					$v['id'] = $k;
					$v['series'] = $series;
					$data[] = $v;
					$res = self::layers_series($core, $k, $val['id'], $v['level']+1);
					$data = array_merge($data, $res);
				}
			}
		}else{
			$result = theme::series_list($core, 88, $series);
			foreach($result as $k=>$v){
				$v['level'] = $level;
				$v['id'] = $k;
				$v['series'] = $series;
				$data[] = $v;
				$res = self::layers_series($core, $k, $parent, $v['level']+1);
				$data = array_merge($data, $res);
			}
		}
		return $data;
	}
	
	public static function layers_list($core, $series=1, $parent=0, $select='*', $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		$where = "display=1 AND {$where}";
		$data = self::layers($core, $series, $parent, $select, $where, $order);
		foreach($data as $k=>$v){
			$value = value::get($core, $v['id'], 88, $series);
			foreach($value as $name=>$info){
				$data[$k][$name] = $info;
			}
			if(isset($G['area']) && $data[$k]['name'] && preg_match('/"6"/',$G['config']['area_name_type'])){
				$data[$k]['name'] = $G['area']['name'].$data[$k]['name'];
			}
		}
		return $data;
	}
	
	public static function layers($core, $series=1, $parent=0, $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		$where = "parent='{$parent}' AND core='{$core}' AND series='{$series}' AND {$where}";
		if(!isset($order)){
			$order = "sort DESC, id ASC";
		}
		$data = mysql::select_all($select, 'layers', $where, $order);
		return $data;
	}
	

    public static function complex($extent, $items, $core, $name, $parent=0)
	{
		global $G;
		/* BOSS—CMS */
		if(preg_match('/^(2|3|4|5)$/',$extent)){
			$sql = "FIND_IN_SET(items,'{$items}";
			$res = self::items(-$items, null, 'id', "type='{$extent}'");
			foreach($res as $v){
				$sql .= ','.$v['id'];
			}
			$sql .= "')";
		}else{
			$sql = "items='{$items}'";
		}
		$where = "extent='{$extent}' AND core='{$core}' AND name='{$name}' AND parent='{$parent}' AND {$sql}";
		$order = 'sort ASC, id ASC';
		$data = mysql::select_all('*', 'complex', $where, $order);
		return $data;
	}

    public static function complex_list($extent, $items, $core, $name, $parent=0)
	{
		global $G;		
		$data = self::complex($extent, $items, $core, $name, $parent);
		return $data;
	}

	public static function complex_one($id=null, $select='*', $where=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(isset($id)){
			$where = "id='{$id}' AND {$where}";
		}
		$data = mysql::select_one($select, 'complex', $where);
		return $data;
	}


    public static function form($id, $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if(isset($id)){
			$where = "type=0 AND parent='{$id}' AND {$where}";
		}
		if(!isset($order)){
			$order = 'sort ASC, id ASC';
		}
		$result = mysql::select_all('*', 'form', $where, $order);
		foreach($result as $k=>$v){
			$data[$k] = $v;
			$data[$k]['form'] = ctrl::form($v['style'],'params'.$v['id'],$v['param'],$v['must'],$v['prompt']);
		}
		return $data;
	}

    public static function form_register($value=array(), $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if(!isset($order)){
			$order = 'sort ASC, id ASC';
		}
		$result = mysql::select_all('*', 'form', "type=1 AND {$where}", $order);
		foreach($result as $k=>$v){
			$data[$k] = $v;
			$data[$k]['form'] = ctrl::form($v['style'],'params'.$v['id'],$v['param'],$v['must'],$v['prompt'],$value?$value['params'.$v['id']]:'');
		}
		return $data;
	}

    public static function form_grade($id, $value=array(), $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if(isset($id)){
			$where = "type=2 AND parent='{$id}' AND {$where}";
		}
		if(!isset($order)){
			$order = 'sort ASC, id ASC';
		}
		$result = mysql::select_all('*', 'form', $where, $order);
		foreach($result as $k=>$v){
			$data[$k] = $v;
			$data[$k]['form'] = ctrl::form($v['style'],'params'.$v['id'],$v['param'],$v['must'],$v['prompt'],$value?$value['params'.$v['id']]:'');
		}
		return $data;
	}

    public static function material($member, $grade=0, $where=null, $order=null)
	{
		global $G;
		if(!$where){
			$where = 1;
		}
		if(isset($member)){
			$where = "member='{$member}' AND {$where}";
		}
		if(isset($grade)){
			$where = "grade='{$grade}' AND {$where}";
		}
		if(!isset($order)){
			$order = 'id ASC';
		}
		return mysql::select_all('*', 'material', $where, $order);
	}


	public static function feedback($items, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if($items){
			$where = "parent='{$items}' AND {$where}";
		}
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($rows)){
			$rows = $G['config']['feedback_number'];
		}
		if(!isset($order)){
			$order = 'ctime DESC, id ASC';
		}
		$data['list'] = mysql::select_all('SQL_CALC_FOUND_ROWS '.$select, 'feedback', $where, $order, (($pages-1)*$rows).','.$rows);
		foreach($data['list'] as $k=>$v){
			$param = json::decode($v['param']);
			foreach($param as $k2=>$v2){
				$param[$k2] = is_array($v2)?implode(', ',$v2):$v2;
			}
			$data['list'][$k]['param'] = $param;
		}
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		if(!isset($url) && $G['path']['type']=='web' && $G['config']['rewrite_open']){
			$itemsarr = mysql::select_one('*','items',"id='{$items}'");
			$url = url::items($itemsarr,null,null,null,false);
		}
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}

	public static function feedback_list($items, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		if(!$where){
			$where = 1;
		}
		$res = mysql::select_one('value','config',"name='feedback_display' AND parent='{$items}'");
		$where = $res['value']?"display=1 AND {$where}":' 0 ';
		return self::feedback($items, $rows, $pages, $btns, $url, $name, $select, $where, $order);
	}
	
	
	
	public static function search_group($items, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if($items){
			$where = "parent='{$items}' AND {$where}";
		}
		if(!isset($rows)){
			$rows = 20;
		}
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($order)){
			$order = "ctime DESC, id ASC";
		}
		$data['list'] = mysql::select("SELECT SQL_CALC_FOUND_ROWS SUBSTRING_INDEX(SUBSTRING_INDEX(c,'&',1),'&',-1) AS id,SUBSTRING_INDEX(SUBSTRING_INDEX(c,'&',2),'&',-1) AS parent,keyword,SUBSTRING_INDEX(SUBSTRING_INDEX(c,'&',3),'&',-1) AS ip,SUBSTRING_INDEX(SUBSTRING_INDEX(c,'&',4),'&',-1) AS ctime,SUBSTRING_INDEX(SUBSTRING_INDEX(c,'&',5),'&',-1) AS lang,total FROM (SELECT keyword,MAX(ctime) AS ctime,GROUP_CONCAT(id,'&',parent,'&',ip,'&',ctime,'&',lang ORDER BY ctime DESC SEPARATOR '&') AS c,COUNT(*) AS total FROM {$G['mysql']['prefix']}search WHERE {$where} GROUP BY keyword) AS t ORDER BY {$order} LIMIT ".(($pages-1)*$rows).','.$rows."");
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}

	public static function search($items, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if($items){
			$where = "parent='{$items}' AND {$where}";
		}
		if(!isset($rows)){
			$rows = 20;
		}
		if(!isset($pages)){
			$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
		}
		if(!isset($order)){
			$order = "ctime DESC, id ASC";
		}
		$data['list'] = mysql::select_all('SQL_CALC_FOUND_ROWS '.$select, 'search', $where, $order, (($pages-1)*$rows).','.$rows);
		$data['total'] = arrExist(mysql::select('SELECT FOUND_ROWS() AS _total'),'0|_total');
		into::basic_class('pages');
		$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
		return $data;
	}

	public static function search_keyword($items, $keyword, $rows=null, $pages=null, $btns=null, $url=null, $name='pages', $select='*', $where=null, $order=null)
	{
		global $G;
		$data = array();
		if(!$where){
			$where = 1;
		}
		if($keyword){
			$where = "keyword='{$keyword}' AND {$where}";
		}
		return self::search($items, $rows, $pages, $btns, $url, $name, $select, $where, $order);
	}
	
	public static function search_list($items=null, $keyword=null, $rows=null, $pages=null, $btns=null, $url=null, $name='pages')
	{
		global $G;
		$data = array();
		if(!isset($items)){
			$items = $G['items']['id'];
		}
		$config = self::config_option($items,0);
		if(!isset($keyword)){
			$keyword = arrExist($G,"get|{$config['search_keyword']}");
		}
		if($keyword!=='' && arrExist($config,'search_open') && $search_items=json::decode($config['search_items'])){
			$sql = $tp = $fo = $imt = array();
			$its = mysql::select_all('*','items',"FIND_IN_SET(id,'".implode(',',$search_items)."')",'type ASC,id ASC');
			foreach($its as $v){
				$fo[$v['id']] = $v;
				$tp[$v['type']][] = $v['id'];
			}
			foreach($tp as $k=>$v){
				if($k==1){
					$sql[] = "SELECT id,name AS title,9999999999 AS time,image,content AS text,type,0 AS items FROM {$G['mysql']['prefix']}items WHERE FIND_IN_SET(id,'".implode(',',$v)."') AND display=1 AND lang='{$G['language']['id']}' AND (name LIKE '%{$keyword}%' OR text LIKE '%{$keyword}%' OR content LIKE '%{$keyword}%')";
				}else if(preg_match('/^(2|3|4|5)\d?$/',$k) && $table=array_search($k,$G['pass']['type'])){
					$write = "SELECT id,name AS title,ctime AS time,'' AS image,'' AS text,{$k} AS type,items FROM {$G['mysql']['prefix']}{$table} WHERE FIND_IN_SET(items,'".implode(',',$v)."') AND display=1 AND recycle=0 AND lang='{$G['language']['id']}' AND name LIKE '%{$keyword}%'";
					if($mds = mysql::select_one('search','models',"id='{$k}'")){
						if($sch = json::decode($mds['search'])){
							if($sch['column']!=array('name') || $sch['image'] || $sch['text']){
								if($sch['column']!=array('name')){
									$where = '(';
									foreach($sch['column'] as $k2=>$v2){
										$where .= ($k2?' OR':'')." t".($v2=='name'?1:2).".{$v2} LIKE '%{$keyword}%'";
									}
									$where .= ')';
									$write = "SELECT t1.id,t1.name AS title,t1.ctime AS time,'' AS image,'' AS text,{$k} AS type,t1.items FROM {$G['mysql']['prefix']}{$table} AS t1 INNER JOIN {$G['mysql']['prefix']}{$table}_content AS t2 ON t1.id=t2.id AND FIND_IN_SET(t1.items,'".implode(',',$v)."') AND t1.display=1 AND t1.recycle=0 AND t1.lang='{$G['language']['id']}' AND {$where}";
								}
								if($sch['image']){
									$imt[$k]['image'] = $sch['image'];
								}
								if($sch['text']){
									$imt[$k]['text'] = $sch['text'];
								}
							}
						}
					}
					$sql[] = $write;
				}
			}
			if(!isset($pages)){
				$pages = is_numeric($G['get']['pages'])&&$G['get']['pages']>0?ceil($G['get']['pages']):1;
			}
			if(!isset($rows)){
				$rows = is_numeric($G['config']['search_number'])?$G['config']['search_number']:20;
			}
			$data['list'] = mysql::select('SELECT SQL_CALC_FOUND_ROWS * FROM ('.implode(' UNION ALL ',$sql).') AS t ORDER BY time DESC LIMIT '.(($pages-1)*$rows).','.$rows);
			$res = mysql::select('SELECT FOUND_ROWS() AS _total');
			$data['total'] = $res[0]['_total'];
			into::basic_class('pages');
			$data['pages'] = pages::btns(ceil($data['total']/$rows), $pages, $btns, $url, $name);
			foreach($data['list'] as $k=>$v){
				if($imt[$v['type']]['image'] || $imt[$v['type']]['text']){
					$r = mysql::select_one('*',array_search($v['type'],$G['pass']['type']).'_content',"id='{$v['id']}'");
					$v['image'] = $r[$imt[$v['type']]['image']];
					$v['text'] = $r[$imt[$v['type']]['text']];
					$data['list'][$k] = $v = $v+$r;
				}
				$data['list'][$k]['time'] = $v['type']==1?0:$v['time'];
				$data['list'][$k]['url'] = $v['type']==1?url::items($fo[$v['id']]):url::group($fo[$v['items']]['folder'],$v);
				$data['list'][$k]['text'] = delHtmlspecial($v['text']);
			}
		}
		return $data;
	}
	
	
	public static function search_param($items)
	{
		global $G;
		$data = array();
		$arr = mysql::select_one('type','items',"id='{$items}'");
		$result = self::complex_list($arr['type'], $items, null, 'params');
		foreach($result as $v){
			if($v['style']==3 || $v['style']==4 || $v['style']==5){
				$name = $v['name'].','.$v['id'];
				$data[$name]['title'] = $v['title'];
				preg_match("/\w+,\d+=/", str_replace($name,'',$G['path']['link']), $match);
				$data[$name]['list'][] = array(
					'url' =>  url::param(url::param(null, 'search',  $match[0]?'param':null), $name, null),
					'title' => $G['config']['all'],
					'active' => isset($G['get'][$name])?false:true,
					'all' => true
				);
				$rgb = false;
				$param = json::decode($v['param']);
				foreach($param as $k=>$m){
					preg_match('/^rgb[a]*\([\d,\s]*+\)[;]*$/', $m, $match);
					if($match[0]){
						$rgb = true;
					}
					$data[$name]['list'][] = array(
						'url' =>  url::param(url::param(null,'search','param'), $name, $m),
						'title' => $m,
						'rgb' => $match[0]?true:false,
						'active' => arrExist($G['get'],$name)==$m?true:false,
						'all' => false
					);
				}
				$data[$name]['rgb'] = $rgb;
			}
		}
		return $data;
	}
	
	
	public static function items_one($id=0, $select='*', $where=true, $order=null)
	{
		global $G;
		$items = arrExist($G,'items|id');
		if($id == 88888){
			$data = array(
				'id' => $id,
				'name' => $G['config']['home'],
				'type' => 0,
				'theme' => 'home.html',
				'parent' => 0,
				'display' => 1,
				'target' => '',
				'text' => '',
				'level' => 1,
				'static' => '',
				'children' => 0,
				'url' => url::home(),
				'on' => $G['path']['home']?'on':''
			);
		}else{
			$sql = $id?"id='{$id}'":"1";
			$data = isset($G['items'])&&is_numeric($items)&&$id==$items?$G['items']:(mysql::select_one($select, 'items', "{$sql} AND display=1 AND {$where}", $order));
		}
		if($data && $id!=88888){
			$data['on'] = $id==$items?'on':'';
			$data['url'] = url::items($data);
			$data['children'] = mysql::total('items', "parent='{$data['id']}' AND display=1");
			$data['target'] = ($data['target']?'target="_blank"':'').($data['nofollow']?' rel="nofollow"':'');
			$data['content'] = delHtmlspecial($data['content']);
			if(isset($data['container'])){
				$data['container'] = delHtmlspecial($data['container']);
			}
		}
		if($data && isset($G['area'])){
			if($data['name'] && preg_match('/"0"/',$G['config']['area_name_type'])){
				$data['name'] = $G['area']['name'].$data['name'];
			}
			if($data['text'] && preg_match('/"1"/',$G['config']['area_name_type'])){
				$data['text'] = $G['area']['name'].$data['text'];
			}
			if($data['content'] && preg_match('/"2"/',$G['config']['area_name_type'])){
				$data['content'] = RepHtmlStr($data['content'],$G['area']['name']);
			}
		}
		return $data;
	}
	
	public static function items_head()
	{
		return self::items_list(null, 0, '*', "head=1");
	}
	
	public static function items_foot()
	{
		return self::items_list(null, 0, '*', "foot=1");
	}

	public static function items_list($id=0, $loop=0, $select='*', $where=true, $order=null)
	{
		global $G;
		$nowid = arrExist($G,'items|id');
		$parents = array();
		if(isset($G['items']['parent_list'])){
			foreach($G['items']['parent_list'] as $k=>$v){
				$parents[] = $v['id'];
			}
		}
		$data = self::items($id, $loop, $select, "display=1 AND {$where}", $order);
		if($id < 0){
			$data = array_reverse($data);
		}
		foreach($data as $k=>$v){
			$data[$k]['on'] = $v['id']==$nowid?'on':($parents&&in_array($v['id'],$parents)?'on pn':'');
			$data[$k]['url'] = url::items($v);
			$data[$k]['children'] = mysql::total('items', "parent='{$v['id']}' AND display=1");
			$data[$k]['target'] = ($v['target']?'target="_blank"':'').($v['nofollow']?' rel="nofollow"':'');			
			$data[$k]['content'] = delHtmlspecial($v['content']);
			if(isset($v['container'])){
				$data[$k]['container'] = delHtmlspecial($v['container']);
			}
			if(isset($G['area']) && preg_match('/"(0|1)"/',$G['config']['area_name_type'])){
				if($v['name'] && preg_match('/"0"/',$G['config']['area_name_type'])){
					$data[$k]['name'] = $G['area']['name'].$v['name'];
				}
				if($v['text'] && preg_match('/"1"/',$G['config']['area_name_type'])){
					$data[$k]['text'] = $G['area']['name'].$v['text'];
				}
			}
		}
		return $data;
	}
	
	public static function items_option($id=0, $top=false, $over=array(), $home=false, $type=null)
	{
		global $G;
		$data = array();
		if($top){
			$data[0] = $top;
		}
		$where = ' 1';
		if($over){
			$over = implode(',',$over);
			$where .= " AND !FIND_IN_SET(parent,'{$over}') AND !FIND_IN_SET(id,'{$over}')";
		}
		if($home){
			$data[88888] = $G['config']['home'];
		}
		$subset = self::items($id, null, 'id,level,name,parent,type', $where);
		if($subset){
			foreach($subset as $v){
				if(!$type || (is_array($type)?in_array($v['type'],$type):preg_match('/^'.$type.'$/',$v['type']))){ 
					$r = '';
					for($i=($top?1:2); $i<=$v['level']; $i++){
						if($i==$v['level']) $r.='<font>&nbsp;&nbsp;&#10551;&nbsp;</font>'; else $r.='<font>&emsp;&nbsp;</font>';
					}
					$data[$v['id']] = $r.$v['name'];
				}
			}
		}
		return $data;
	}
	
	public static function items($parent=0, $loop=null, $select='*', $where=true, $order=null)
	{
		/* BOSS_CMS */
		$data = array();
		if(isset($parent) && is_numeric($parent)){
			if($parent<0){
				$set = " id='".abs($parent)."' AND ";
			}else{
				$set = " parent='{$parent}' AND ";
			}
		}
		if(!strstr($select,'parent')){
			$select .= ',parent,id';
		}
		if(is_numeric($loop)){
			$loop = $loop-1;
		}
		if(!isset($order)){
			$order = 'sort DESC, id ASC';
		}
		if($result = mysql::select_all($select, 'items', $set.$where, $order)){
			foreach($result as $val){
				$data[$val['id']] = $val;
				if((!isset($loop) || $loop>=0) && ($parent>=0 || ($parent<0&&$val['parent'])) && $res=self::items($parent<0?-$val['parent']:$val['id'], $loop, $select, $where, $order)){
					foreach($res as $v){
						$data[$v['id']] = $v;
					}
				}
			}
			return $data;
		}
		return array();
	}
}
?>