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