www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/parse.fun.php

    <?
@set_time_limit(0);
load_cache('btags,channels,cotypes,fchannels,fcatalogs,commus,currencys,permissions,votes,vcps,mchannels,dbsources,vcatalogs,acatalogs,aaltypes,freeinfos');
load_cache('utags,ctags,ptags,rtags,catalogs,cnodes,mtpls,altypes,sptpls',$sid);
cache_merge($channels,'channels',$sid);
cache_merge($btags,'btags',$sid);
include_once M_ROOT."./include/list.cls.php";
include_once M_ROOT."./include/ncache.cls.php";
include_once M_ROOT."./include/cparse.fun.php";
include_once M_ROOT."./include/parse/general.php";
if(empty($ncache)) $ncache = new cls_ncache();
function nreplace(&$content,$mode='b',&$sarr){
	$tmode = $mode == 'b' ? '' : $mode;
	$content = $tmode ? preg_replace("/\{".$tmode."\\$(.+?)\s+(.*?)\{\/".$tmode."\\$\\1\}/ies",$mode."tagval('\\1','\\2',\$sarr)",$content) : preg_replace("/\{\\$(.+?)\}/ies","btagval('\\1',\$sarr)",$content);
}

function load_parsefunc($tclass=''){
	if(in_array($tclass,array('archives','arcscount',))){
		include_once M_ROOT.'./include/parse/archives.php';
	}elseif(in_array($tclass,array('members','memscount',))){
		include_once M_ROOT.'./include/parse/members.php';
	}elseif(in_array($tclass,array('sarchives','farchives','freeurl','outinfos','commus','alarchives','cnode','archive','farchive','nownav','albumnav','votes','userinfos','context','acontext','mpnav','relates','odeal','arcfee','date','functions'))){
		include_once M_ROOT.'./include/parse/'.$tclass.'.php';
	}elseif(in_array($tclass,array('image','file','media','flash','images','files','medias','flashs','follow'))){
		include_once M_ROOT.'./include/parse/attachment.php';
	}
}
function utagval($tname,$tstr,&$sarr){
	global $debugtag,$templatedir;
	$utag = fetch_tag_arr($tname,stripslashes($tstr));
	if(empty($utag) || empty($utag['tclass'])) return $debugtag ? "{u \$$tname$tstr{/u \$$tname}" : '';
	load_parsefunc($utag['tclass']);
	if($utag['tclass'] == 'function'){
		@include_once M_ROOT."./template/$templatedir/function/utags.fun.php";
		$result = '';
		$template = $utag['template'];
		nreplace($template,'b',$sarr);
		nreplace($template,'u',$sarr);
		$result = @eval($template);
	}elseif($utag['tclass'] == 'date'){
		$result = time_format($utag,$sarr);
	}elseif($utag['tclass'] == 'odeal'){
		$result = odealtxt($utag,$sarr);
	}elseif($utag['tclass'] == 'image'){
		$result = imagebox($utag,$sarr);
	}elseif(in_array($utag['tclass'],array('file','media','flash'))){
		$result = singlebox($utag,$sarr);
	}elseif(in_array($utag['tclass'],array('images','files','medias','flashs','arcfee'))){
		$m_list = new cls_list;
		$result = $m_list->parse($tname,$utag,$sarr,'u');
		unset($m_list);
	}elseif($utag['tclass'] == 'follow'){
		$result = follow_url($utag,$sarr);
	}
	return $result;
}
function jstagval($tname,&$ctag,&$temparr){
	global $cms_abs,$sid;
	$param_suffix = empty($sid) ? '' : "&sid=$sid";
	$jsfile = $cms_abs."js.php?tname=$tname$param_suffix";
	foreach($ctag as $k => $v) $jsfile .= '&tag['.$k.']='.rawurlencode($v);
	foreach($temparr as $k => $v) $jsfile .= '&data['.$k.']='.rawurlencode($v);
	return "<script type=\"text/javascript\" src=\"$jsfile\"></script>";
}
function ctagval($tname,$tstr,&$temparr){
	global $debugtag;
	$ctag = fetch_tag_arr($tname,stripslashes($tstr));
	if(empty($ctag) || empty($ctag['tclass'])) return $debugtag ? "{c \$$tname$tstr{/c \$$tname}" : '';
	if(!empty($ctag['js'])) return jstagval($tname,$ctag,$temparr);
	load_parsefunc($ctag['tclass']);
	if(in_array($ctag['tclass'],array('archives','sarchives','farchives','alarchives','searchs',
	'outinfos','catalogs','scatalogs','vote','votes','mcatalogs','commus','relates','members',
	'keywords','channels','mchannels','subsites','functions'))){
		$m_list = new cls_list;
		$result = $m_list->parse($tname,$ctag,$temparr,'c');
		unset($m_list);
	}elseif($ctag['tclass'] == 'nownav'){
		$result = fetchnavs($ctag,$temparr);
	}elseif($ctag['tclass'] == 'cnode'){
		$result = onecnode($ctag,$temparr);
	}elseif($ctag['tclass'] == 'context'){
		$result = context($ctag,$temparr);
	}elseif($ctag['tclass'] == 'acontext'){
		$result = acontext($ctag,$temparr);
	}elseif($ctag['tclass'] == 'userinfos'){
		$result = userinfos($ctag,$temparr);
	}elseif($ctag['tclass'] == 'archive'){
		$result = one_archive($ctag,$temparr);
	}elseif($ctag['tclass'] == 'farchive'){
		$result = one_farchive($ctag,$temparr);
	}elseif($ctag['tclass'] == 'freeurl'){
		$result = freeurl($ctag,$temparr);
	}elseif($ctag['tclass'] == 'mnownav'){
		$result = mfetchnavs($ctag,$temparr);
	}elseif($ctag['tclass'] == 'arcscount'){
		global $db;
		$result = 0;
		if($sqlstr = arc_sqlstr($ctag,$temparr,'c',1)) $result = $db->result_one($sqlstr);
	}elseif($ctag['tclass'] == 'memscount'){
		global $db;
		$result = 0;
		if($sqlstr = mem_sqlstr($ctag,$temparr,'c',1)) $result = $db->result_one($sqlstr);
	}
	return $result;
}
function fetch_tag_arr($tname,&$tstr){
	$arr = array();
	if(preg_match("/^\s*(.+?)\/\]\s*\}/is",$tstr,$matches)){
		if($str = $matches[0]){
			if(preg_match_all("/\[\s*(.+?)\s*\=\s*(.*?)\s*\/\]/is",$str, $matches)){
				foreach($matches[1] as $k => $v) $arr[$v] = $matches[2][$k];
			}
		}
		$tstr = preg_replace("/^\s*(.+?)\/\]\s*\}/is",'',$tstr);
	}
	$arr['template'] = $tstr;
	unset($matches);
	return $arr;
}
function ptagval($tname,$tstr,&$temparr){
	global $debugtag;
	$ptag = fetch_tag_arr($tname,stripslashes($tstr));
	if(empty($ptag) || empty($ptag['tclass']) || !in_array($ptag['tclass'],array('archives','farchives','commus','searchs','members','outinfos','functions'))) return $debugtag ? "{p \$$tname$tstr{/p \$$tname}" : '';
	if(($ptag['tclass'] == 'searchs') && empty($temparr['submit'])) return '';
	$m_list = new cls_list;
	$result = $m_list->parse($tname,$ptag,$temparr,'p');
	unset($m_list);
	return $result;
}
function mpinfo($tname,$tstr,$temparr = array()){
	global $db,$tblprefix,$catalogs,$cotypes;
	$mpinfo = array();
	$mpinfo['pcount'] = 1;
	$mpinfo['acount'] = 0;
	$ptag = fetch_tag_arr($tname,stripslashes($tstr));
	if(empty($ptag) || empty($ptag['tclass']) || !in_array($ptag['tclass'],array('archives','farchives','commus','searchs','members','outinfos','functions'))) return $mpinfo;
	$mpinfo['length'] = empty($ptag['length']) ? 10 : $ptag['length'];
	$mpinfo['simple'] = empty($ptag['simple']) ? 0 : 1;
	$limits = empty($ptag['limits']) ? 10 : $ptag['limits'];
	load_parsefunc('mpnav');
	load_parsefunc($ptag['tclass']);
	if($ptag['tclass'] == 'archives'){
		if($sqlstr = arc_sqlstr($ptag,$temparr,'p',1)) $acount = $db->result_one($sqlstr);
	}elseif($ptag['tclass'] == 'farchives'){
		if($sqlstr = farc_sqlstr($ptag,$temparr,'p',1)) $acount = $db->result_one($sqlstr);
	}elseif($ptag['tclass'] == 'searchs'){
		if(empty($temparr['submit'])) return $mpinfo;
		if($sqlstr = $temparr['sqlstr']) $acount = $db->result_one("SELECT count(*) $sqlstr");
	}elseif($ptag['tclass'] == 'outinfos'){
		$acount = outinfos_nums($ptag,$temparr);
	}elseif($ptag['tclass'] == 'commus'){
		if($sqlstr = cu_sqlstr($ptag,$temparr,'p',1)) $acount = $db->result_one($sqlstr);
	}elseif($ptag['tclass'] == 'members'){
		if($sqlstr = mem_sqlstr($ptag,$temparr,'p',1)) $acount = $db->result_one($sqlstr);
	}elseif($ptag['tclass'] == 'functions'){
		$acount = functions_acount($ptag,$temparr);
	}
	if(!empty($acount)){
		!empty($ptag['alimits']) && ($acount = min($acount,$ptag['alimits']));
		$mpinfo['acount'] = $acount;
		$mpinfo['pcount'] = ceil($acount / $limits);
	}
	return $mpinfo;
}
function code_parse(&$source){
	global $btags,$channels,$cotypes,$fchannels,$fcatalogs,$commus,$currencys,$permissions,$votes,$sptpls,$vcps,$mchannels,$dbsources,$vcatalogs,
	$utags,$ctags,$ptags,$rtags,$catalogs,$cnodes,$mtpls,$altypes;
	$matches = preg_split("/\{\?php(.*?)\?\}/is",$source,-1,PREG_SPLIT_DELIM_CAPTURE);
	if(count($matches) > 1){
		$str = '$source = \'\';';
		foreach($matches as $k => $v) $str .= $k % 2 ? str_replace('echo ','$source.= ',$v) : '$source .= \''.addcslashes($v, '\'').'\';';
		@eval($str);
	}
	unset($str,$matches);
	$source = str_tagcode($source,1);
}

?>