| @@ -0,0 +1,17 @@ | |||||
| <?php | |||||
| /** | |||||
| * RSS列表页 | |||||
| * | |||||
| * @version $id:rss.php$ | |||||
| * @package DedeBIZ.Site | |||||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||||
| * @license https://www.dedebiz.com/license | |||||
| * @link https://www.dedebiz.com | |||||
| */ | |||||
| require_once(dirname(__FILE__).'/../system/common.inc.php'); | |||||
| require_once(DEDEINC."/archive/rssview.class.php"); | |||||
| $tid = isset($tid) && is_numeric($tid) ? $tid : 0; | |||||
| if ($tid == 0) die("dedebiz"); | |||||
| $rv = new RssView($tid); | |||||
| $rv->Display(); | |||||
| ?> | |||||
| @@ -0,0 +1,210 @@ | |||||
| <?php | |||||
| if (!defined('DEDEINC')) exit('dedebiz'); | |||||
| /** | |||||
| * RSS视图类 | |||||
| * | |||||
| * @version $id:rssview.class.php 15:21 2010年7月7日 tianya $ | |||||
| * @package DedeBIZ.Libraries | |||||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||||
| * @license https://www.dedebiz.com/license | |||||
| * @link https://www.dedebiz.com | |||||
| */ | |||||
| require_once(DEDEINC."/dedetag.class.php"); | |||||
| require_once(DEDEINC."/typelink/typelink.class.php"); | |||||
| require_once(DEDEINC."/channelunit.func.php"); | |||||
| @set_time_limit(0); | |||||
| /** | |||||
| * RSS视图类 | |||||
| * | |||||
| * @package RssView | |||||
| * @subpackage DedeBIZ.Libraries | |||||
| * @link https://www.dedebiz.com | |||||
| */ | |||||
| class RssView | |||||
| { | |||||
| var $dsql; | |||||
| var $TypeID; | |||||
| var $TypeLink; | |||||
| var $TypeFields; | |||||
| var $MaxRow; | |||||
| var $dtp; | |||||
| var $remoteDir; | |||||
| /** | |||||
| * php5构造函数 | |||||
| * | |||||
| * @access public | |||||
| * @param int $typeid 栏目id | |||||
| * @param int $max_row 最大显示行数 | |||||
| * @return string | |||||
| */ | |||||
| function __construct($typeid, $max_row = 50) | |||||
| { | |||||
| $this->TypeID = $typeid; | |||||
| $this->dtp = new DedeTagParse(); | |||||
| $this->dtp->refObj = $this; | |||||
| $templetfiles = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/plus/rss.htm"; | |||||
| $this->dtp->LoadTemplate($templetfiles); | |||||
| $this->dsql = $GLOBALS['dsql']; | |||||
| $this->TypeLink = new TypeLink($typeid); | |||||
| $this->TypeFields = $this->TypeLink->TypeInfos; | |||||
| $this->MaxRow = $max_row; | |||||
| $this->TypeFields['title'] = $this->TypeLink->GetPositionLink(false); | |||||
| $this->TypeFields['title'] = preg_replace("/[<>]/", " / ", $this->TypeFields['title']); | |||||
| $this->TypeFields['typelink'] = $GLOBALS['cfg_basehost'].$this->TypeLink->GetOneTypeUrl($this->TypeFields); | |||||
| $this->TypeFields['powerby'] = $GLOBALS['cfg_powerby']; | |||||
| $this->TypeFields['adminemail'] = $GLOBALS['cfg_adminemail']; | |||||
| $this->remoteDir = ''; | |||||
| foreach ($this->TypeFields as $k => $v) { | |||||
| $this->TypeFields[$k] = dede_htmlspecialchars($v); | |||||
| } | |||||
| $this->ParseTemplet(); | |||||
| } | |||||
| //php4构造函数 | |||||
| function RssView($typeid, $max_row = 50) | |||||
| { | |||||
| $this->__construct($typeid, $max_row); | |||||
| } | |||||
| //关闭相关资源 | |||||
| function Close() | |||||
| { | |||||
| } | |||||
| /** | |||||
| * 显示列表 | |||||
| * | |||||
| * @access public | |||||
| * @return void | |||||
| */ | |||||
| function Display() | |||||
| { | |||||
| $this->dtp->Display(); | |||||
| } | |||||
| /** | |||||
| * 开始创建列表 | |||||
| * | |||||
| * @access public | |||||
| * @param string $isremote 是否远程 | |||||
| * @return string | |||||
| */ | |||||
| function MakeRss($isremote = 0) | |||||
| { | |||||
| $murl = $GLOBALS['cfg_cmspath']."/static/rss/".$this->TypeID.".xml"; | |||||
| $mfile = $GLOBALS['cfg_basedir'].$murl; | |||||
| $this->dtp->SaveTo($mfile); | |||||
| return $murl; | |||||
| } | |||||
| /** | |||||
| * 解析模板 | |||||
| * | |||||
| * @access public | |||||
| * @return void | |||||
| */ | |||||
| function ParseTemplet() | |||||
| { | |||||
| foreach ($this->dtp->CTags as $tid => $ctag) { | |||||
| if ($ctag->GetName() == "field") { | |||||
| $this->dtp->Assign($tid, $this->TypeFields[$ctag->GetAtt('name')]); | |||||
| } else if ($ctag->GetName() == "rssitem") { | |||||
| $this->dtp->Assign( | |||||
| $tid, | |||||
| $this->GetArcList($ctag->GetInnerText()) | |||||
| ); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 获得文档列表 | |||||
| * | |||||
| * @access public | |||||
| * @param string $innertext 底层模板 | |||||
| * @return string | |||||
| */ | |||||
| function GetArcList($innertext = "") | |||||
| { | |||||
| $typeid = $this->TypeID; | |||||
| $innertext = trim($innertext); | |||||
| if ($innertext == "") { | |||||
| $innertext = GetSysTemplets("rss.htm"); | |||||
| } | |||||
| $orwhere = " arc.arcrank > -1 "; | |||||
| $orwhere .= " AND (arc.typeid in (".GetSonIds($this->TypeID, $this->TypeFields['channeltype']).") ) "; | |||||
| $ordersql = " ORDER BY arc.id desc"; | |||||
| $query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE $orwhere $ordersql LIMIT 0,".$this->MaxRow; | |||||
| $this->dsql->SetQuery($query); | |||||
| $this->dsql->Execute('al'); | |||||
| $artlist = ''; | |||||
| $dtp2 = new DedeTagParse(); | |||||
| $dtp2->SetNameSpace('field', '[', ']'); | |||||
| $dtp2->LoadSource($innertext); | |||||
| while ($row = $this->dsql->GetArray('al')) { | |||||
| //处理一些特殊字段 | |||||
| if ($row['litpic'] == '-' || $row['litpic'] == '') { | |||||
| $row['litpic'] = $GLOBALS['cfg_cmspath'].'/static/web/img/thumbnail.jpg'; | |||||
| } | |||||
| if (!preg_match("/^http:\/\//", $row['litpic']) && $GLOBALS['cfg_multi_site'] == 'Y') { | |||||
| $row['litpic'] = $GLOBALS['cfg_mainsite'].$row['litpic']; | |||||
| } | |||||
| $row['picname'] = $row['litpic']; | |||||
| $row["arcurl"] = GetFileUrl( | |||||
| $row["id"], | |||||
| $row["typeid"], | |||||
| $row["senddate"], | |||||
| $row["title"], | |||||
| $row["ismake"], | |||||
| $row["arcrank"], | |||||
| $row["namerule"], | |||||
| $row["typedir"], | |||||
| $row["money"], | |||||
| $row['filename'], | |||||
| $row["moresite"], | |||||
| $row["siteurl"], | |||||
| $row["sitepath"] | |||||
| ); | |||||
| $row["typeurl"] = GetTypeUrl( | |||||
| $row["typeid"], | |||||
| $row["typedir"], | |||||
| $row["isdefault"], | |||||
| $row["defaultname"], | |||||
| $row["ispart"], | |||||
| $row["namerule2"], | |||||
| $row["moresite"], | |||||
| $row["siteurl"], | |||||
| $row["sitepath"] | |||||
| ); | |||||
| $row["info"] = $row["description"]; | |||||
| $row["filename"] = $row["arcurl"]; | |||||
| $row["stime"] = GetDateMK($row["pubdate"]); | |||||
| $row["image"] = "<img src='".$row["picname"]."'>"; | |||||
| $row["fullurl"] = $GLOBALS["cfg_basehost"].$row["arcurl"]; | |||||
| if ($GLOBALS['cfg_multi_site'] == 'Y') $row["fullurl"] = $row["arcurl"]; | |||||
| $row["phpurl"] = $GLOBALS["cfg_plus_dir"]; | |||||
| $row["templeturl"] = $GLOBALS["cfg_templets_dir"]; | |||||
| if ($row["source"] == '') { | |||||
| $row["source"] = $GLOBALS['cfg_webname']; | |||||
| } | |||||
| if ($row["writer"] == '') { | |||||
| $row["writer"] = "张生"; | |||||
| } | |||||
| foreach ($row as $k => $v) { | |||||
| $row[$k] = dede_htmlspecialchars($v); | |||||
| } | |||||
| if (is_array($dtp2->CTags)) { | |||||
| foreach ($dtp2->CTags as $k => $ctag) { | |||||
| if ($ctag->GetName() == 'array') { | |||||
| //传递整个数组,在runphp模式中有特殊作用 | |||||
| $dtp2->Assign($k, $row); | |||||
| } else { | |||||
| if (isset($row[$ctag->GetName()])) { | |||||
| $dtp2->Assign($k, $row[$ctag->GetName()]); | |||||
| } else { | |||||
| $dtp2->Assign($k, ''); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| $artlist .= $dtp2->GetResult()."\r\n"; | |||||
| } | |||||
| $this->dsql->FreeResult('al'); | |||||
| return $artlist; | |||||
| } | |||||
| }//End Class | |||||
| ?> | |||||
| @@ -420,6 +420,71 @@ function IsSSL() | |||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| //获取对应版本号的更新SQL | |||||
| function GetUpdateSQL() | |||||
| { | |||||
| global $cfg_dbprefix,$cfg_dbtype,$cfg_db_language; | |||||
| $result = array(); | |||||
| $query = ''; | |||||
| $sql4tmp = "ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language; | |||||
| $fp = fopen(DEDEROOT.'/install/update.txt','r'); | |||||
| $sqls = array(); | |||||
| $current_ver = ""; | |||||
| while(!feof($fp)) | |||||
| { | |||||
| $line = rtrim(fgets($fp,1024)); | |||||
| if (preg_match("/\-\- ([\d\.]+)/",$line,$matches)) { | |||||
| if (count($sqls) > 0) { | |||||
| $result[$current_ver] = $sqls; | |||||
| } | |||||
| $sqls = array(); | |||||
| $current_ver = $matches[1]; | |||||
| } | |||||
| if (preg_match("#;$#", $line)) | |||||
| { | |||||
| $query .= $line."\n"; | |||||
| $query = str_replace('#@__',$cfg_dbprefix,$query); | |||||
| if ( $cfg_dbtype == 'sqlite' ) | |||||
| { | |||||
| $query = preg_replace('/character set (.*?) /i','',$query); | |||||
| $query = preg_replace('/unsigned/i','',$query); | |||||
| $query = str_replace('TYPE=MyISAM','',$query); | |||||
| $query = preg_replace ('/TINYINT\(([\d]+)\)/i','INTEGER',$query); | |||||
| $query = preg_replace ('/mediumint\(([\d]+)\)/i','INTEGER',$query); | |||||
| $query = preg_replace ('/smallint\(([\d]+)\)/i','INTEGER',$query); | |||||
| $query = preg_replace('/int\(([\d]+)\)/i','INTEGER',$query); | |||||
| $query = preg_replace('/auto_increment/i','PRIMARY KEY AUTOINCREMENT',$query); | |||||
| $query = preg_replace('/,([\t\s ]+)KEY(.*?)MyISAM;/','',$query); | |||||
| $query = preg_replace('/,([\t\s ]+)KEY(.*?);/',');',$query); | |||||
| $query = preg_replace('/,([\t\s ]+)UNIQUE KEY(.*?);/',');',$query); | |||||
| $query = preg_replace('/set\(([^\)]*?)\)/','varchar',$query); | |||||
| $query = preg_replace('/enum\(([^\)]*?)\)/','varchar',$query); | |||||
| if ( preg_match("/PRIMARY KEY AUTOINCREMENT/",$query) ) | |||||
| { | |||||
| $query = preg_replace('/,([\t\s ]+)PRIMARY KEY([\t\s ]+)\(`([0-9a-zA-Z]+)`\)/i','',$query); | |||||
| } | |||||
| $sqls[] = $query; | |||||
| // $db->exec($query); | |||||
| } else { | |||||
| if (preg_match('#CREATE#i', $query)) | |||||
| { | |||||
| $sqls[] = preg_replace("#TYPE=MyISAM#i",$sql4tmp,$query); | |||||
| } else { | |||||
| $sqls[] = $query; | |||||
| } | |||||
| } | |||||
| $query=''; | |||||
| } else if (!preg_match("#^(\/\/|--)#", $line)) | |||||
| { | |||||
| $query .= $line; | |||||
| } | |||||
| } | |||||
| if (count($sqls) > 0) { | |||||
| $result[$current_ver] = $sqls; | |||||
| } | |||||
| fclose($fp); | |||||
| return $result; | |||||
| } | |||||
| //用户名称标签{dede:field.mid function="GetMemberInfos('uname',@me)"/}和[field:mid function="GetMemberInfos('uname',@me)"/] | //用户名称标签{dede:field.mid function="GetMemberInfos('uname',@me)"/}和[field:mid function="GetMemberInfos('uname',@me)"/] | ||||
| function GetMemberInfos($fields, $mid) | function GetMemberInfos($fields, $mid) | ||||
| { | { | ||||
| @@ -451,7 +516,7 @@ function face($mid) | |||||
| } | } | ||||
| return $face; | return $face; | ||||
| } | } | ||||
| //调用标签[field:id function='GetMyTags(@me,2)'/]2表示输出2个文档 | |||||
| //标签调用标签[field:id function='GetMyTags(@me,2)'/]2表示输出2个文档 | |||||
| if (!function_exists('GetMyTags')) { | if (!function_exists('GetMyTags')) { | ||||
| function GetMyTags($aid, $num=3) { | function GetMyTags($aid, $num=3) { | ||||
| global $dsql,$cfg_cmspath; | global $dsql,$cfg_cmspath; | ||||
| @@ -465,7 +530,7 @@ if (!function_exists('GetMyTags')) { | |||||
| return $tags; | return $tags; | ||||
| } | } | ||||
| } | } | ||||
| /*调用主题模板<?php pasterTempletDiy('header.htm');?>*/ | |||||
| /*用户中心调用默认模板<?php pasterTempletDiy('head.htm');?>*/ | |||||
| if (!function_exists('pasterTempletDiy')) { | if (!function_exists('pasterTempletDiy')) { | ||||
| function pasterTempletDiy($path) { | function pasterTempletDiy($path) { | ||||
| global $cfg_basedir,$cfg_templets_dir,$cfg_df_style; | global $cfg_basedir,$cfg_templets_dir,$cfg_df_style; | ||||
| @@ -486,7 +551,7 @@ function litimgurls($imgid = 0) | |||||
| $lit_imglist = $ChannelUnit->GetlitImgLinks($row['imgurls']); | $lit_imglist = $ChannelUnit->GetlitImgLinks($row['imgurls']); | ||||
| return $lit_imglist; | return $lit_imglist; | ||||
| } | } | ||||
| //字符过滤函数安全 | |||||
| //联动单筛选字符过滤函数 | |||||
| function string_filter($str, $stype = "inject") | function string_filter($str, $stype = "inject") | ||||
| { | { | ||||
| if ($stype == "inject") { | if ($stype == "inject") { | ||||
| @@ -507,7 +572,7 @@ function string_filter($str, $stype = "inject") | |||||
| } | } | ||||
| return $str; | return $str; | ||||
| } | } | ||||
| //联动单筛选自定义表单发布 | |||||
| //联动单筛选发布三种类型 | |||||
| function AddFilter($channelid, $type=1, $fieldsnamef=array(), $defaulttid=0, $toptid=0, $loadtype='autofield') | function AddFilter($channelid, $type=1, $fieldsnamef=array(), $defaulttid=0, $toptid=0, $loadtype='autofield') | ||||
| { | { | ||||
| global $tid, $dsql, $id, $aid; | global $tid, $dsql, $id, $aid; | ||||
| @@ -517,53 +582,53 @@ function AddFilter($channelid, $type=1, $fieldsnamef=array(), $defaulttid=0, $to | |||||
| $tidsq = $dsql->GetOne("SELECT * FROM `#@__archives` WHERE id='$arcid'"); | $tidsq = $dsql->GetOne("SELECT * FROM `#@__archives` WHERE id='$arcid'"); | ||||
| $tid = $toptid==0 ? $tidsq["typeid"] : $tidsq["topid"]; | $tid = $toptid==0 ? $tidsq["typeid"] : $tidsq["topid"]; | ||||
| } | } | ||||
| $fieldsnamef = count($fieldsnamef) > 0 ? implode(",", $fieldsnamef) : $fieldsnamef; | |||||
| $nofilter = (isset($_REQUEST['TotalResult']) ? "&TotalResult=".$_REQUEST['TotalResult'] : '').(isset($_REQUEST['PageNo']) ? "&PageNo=".$_REQUEST['PageNo'] : ''); | $nofilter = (isset($_REQUEST['TotalResult']) ? "&TotalResult=".$_REQUEST['TotalResult'] : '').(isset($_REQUEST['PageNo']) ? "&PageNo=".$_REQUEST['PageNo'] : ''); | ||||
| $filterarr = string_filter(stripos($_SERVER['REQUEST_URI'], "list.php?tid=") ? str_replace($nofilter, '', $_SERVER['REQUEST_URI']) : $GLOBALS['cfg_cmsurl']."/apps/list.php?tid=".$tid); | |||||
| $cInfos = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$channelid'"); | |||||
| $filterarr = string_filter(stripos($_SERVER['REQUEST_URI'], "list.php?tid=") ? str_replace($nofilter, '', $_SERVER['REQUEST_URI']) : $GLOBALS['cfg_cmsurl']."/plus/list.php?tid=".$tid); | |||||
| $cInfos = $dsql->GetOne("SELECT * FROM `#@__channeltype` WHERE id='$channelid'"); | |||||
| $fieldset=$cInfos['fieldset']; | $fieldset=$cInfos['fieldset']; | ||||
| $dtp = new DedeTagParse(); | $dtp = new DedeTagParse(); | ||||
| $dtp->SetNameSpace('field', '<', '>'); | $dtp->SetNameSpace('field', '<', '>'); | ||||
| $dtp->LoadSource($fieldset); | $dtp->LoadSource($fieldset); | ||||
| $dede_addonfields = ''; | $dede_addonfields = ''; | ||||
| if(is_array($dtp->CTags)) { | |||||
| if (is_array($dtp->CTags)) { | |||||
| foreach($dtp->CTags as $tida=>$ctag) | foreach($dtp->CTags as $tida=>$ctag) | ||||
| { | { | ||||
| $fieldsname = $fieldsnamef ? explode(",", $fieldsnamef) : explode(",", $ctag->GetName()); | $fieldsname = $fieldsnamef ? explode(",", $fieldsnamef) : explode(",", $ctag->GetName()); | ||||
| if(($loadtype!='autofield' || ($loadtype=='autofield' && $ctag->GetAtt('autofield')==1)) && in_array($ctag->GetName(), $fieldsname) ) { | |||||
| if (($loadtype!='autofield' || ($loadtype=='autofield' && $ctag->GetAtt('autofield')==1)) && in_array($ctag->GetName(), $fieldsname)) { | |||||
| $href1 = explode($ctag->GetName().'=', $filterarr); | $href1 = explode($ctag->GetName().'=', $filterarr); | ||||
| $href2 = explode('&', $href1[1]); | $href2 = explode('&', $href1[1]); | ||||
| $fields_value = $href2[0]; | $fields_value = $href2[0]; | ||||
| switch ($type) { | switch ($type) { | ||||
| case 1: | case 1: | ||||
| $dede_addonfields .= (preg_match("/&".$ctag->GetName()."=/is",$filterarr,$regm) ? '<a href="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'" class="btn btn-outline-success btn-sm">全部</a>' : '<a href="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'" class="btn btn-outline-success btn-sm">全部</a>'); | |||||
| $addonfields_items = explode(",",$ctag->GetAtt('default')); | |||||
| for ($i=0; $i<count($addonfields_items); $i++) | |||||
| { | |||||
| $href = stripos($filterarr,$ctag->GetName().'=') ? str_replace("=".$fields_value,"=".urlencode($addonfields_items[$i]),$filterarr) : $filterarr.'&'.$ctag->GetName().'='.urlencode($addonfields_items[$i]); | |||||
| $dede_addonfields .= ($fields_value!=urlencode($addonfields_items[$i]) ? '<a href="'.$href.'" title="'.$addonfields_items[$i].'" class="btn btn-success btn-sm">'.$addonfields_items[$i].'</a>' : '<a href="'.$href.'" title="'.$addonfields_items[$i].'" class="btn btn-success btn-sm">'.$addonfields_items[$i].'</a>'); | |||||
| } | |||||
| $dede_addonfields .= (preg_match("/&".$ctag->GetName()."=/is",$filterarr,$regm) ? '<a href="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'" class="btn btn-outline-success btn-sm">全部</a>' : '<a href="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'" class="btn btn-success btn-sm">全部</a>'); | |||||
| $addonfields_items = explode(",",$ctag->GetAtt('default')); | |||||
| for ($i=0; $i<count($addonfields_items); $i++) | |||||
| { | |||||
| $href = stripos($filterarr,$ctag->GetName().'=') ? str_replace("=".$fields_value,"=".urlencode($addonfields_items[$i]),$filterarr) : $filterarr.'&'.$ctag->GetName().'='.urlencode($addonfields_items[$i]); | |||||
| $dede_addonfields .= ($fields_value!=urlencode($addonfields_items[$i]) ? '<a title="'.$addonfields_items[$i].'" href="'.$href.'" class="btn btn-outline-success btn-sm">'.$addonfields_items[$i].'</a>' : '<a href="'.$href.'" class="btn btn-success btn-sm">'.$addonfields_items[$i].'</a>'); | |||||
| } | |||||
| break; | break; | ||||
| case 2: | case 2: | ||||
| $dede_addonfields .= '<select name="filter'.$ctag->GetName().'" onchange="window.location=this.options[this.selectedIndex].value"> | |||||
| '.'<option value="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'">全部</option>'; | |||||
| $addonfields_items = explode(",",$ctag->GetAtt('default')); | |||||
| for ($i=0; $i<count($addonfields_items); $i++) | |||||
| { | |||||
| $href = stripos($filterarr,$ctag->GetName().'=') ? str_replace("=".$fields_value,"=".urlencode($addonfields_items[$i]),$filterarr) : $filterarr.'&'.$ctag->GetName().'='.urlencode($addonfields_items[$i]); | |||||
| $dede_addonfields .= '<option value="'.$href.'"'.($fields_value==urlencode($addonfields_items[$i]) ? ' selected="selected"' : '').'>'.$addonfields_items[$i].'</option> | |||||
| $dede_addonfields .= '<select name="filter'.$ctag->GetName().'" onchange="window.location=this.options[this.selectedIndex].value"> | |||||
| '.'<option value="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'">全部</option>'; | |||||
| $addonfields_items = explode(",",$ctag->GetAtt('default')); | |||||
| for ($i=0; $i<count($addonfields_items); $i++) | |||||
| { | |||||
| $href = stripos($filterarr,$ctag->GetName().'=') ? str_replace("=".$fields_value,"=".urlencode($addonfields_items[$i]),$filterarr) : $filterarr.'&'.$ctag->GetName().'='.urlencode($addonfields_items[$i]); | |||||
| $dede_addonfields .= '<option value="'.$href.'"'.($fields_value==urlencode($addonfields_items[$i]) ? ' selected="selected"' : '').'>'.$addonfields_items[$i].'</option> | |||||
| '; | |||||
| } | |||||
| $dede_addonfields .= '</select> | |||||
| '; | '; | ||||
| } | |||||
| $dede_addonfields .= '</select>'; | |||||
| break; | break; | ||||
| case 3: | case 3: | ||||
| $dede_addonfields .= (preg_match("/&".$ctag->GetName()."=/is",$filterarr,$regm) ? '<a href="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'" title="全部"><input type="radio" name="filter'.$ctag->GetName().'" value="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'" onclick="window.location=this.value">全部</a>' : '<span><input type="radio" name="filter'.$ctag->GetName().'" checked="checked">全部</span>'); | |||||
| $addonfields_items = explode(",",$ctag->GetAtt('default')); | |||||
| for ($i=0; $i<count($addonfields_items); $i++) | |||||
| { | |||||
| $href = stripos($filterarr,$ctag->GetName().'=') ? str_replace("=".$fields_value,"=".urlencode($addonfields_items[$i]),$filterarr) : $filterarr.'&'.$ctag->GetName().'='.urlencode($addonfields_items[$i]); | |||||
| $dede_addonfields .= ($fields_value!=urlencode($addonfields_items[$i]) ? '<a href="'.$href.'" title="'.$addonfields_items[$i].'"><input type="radio" name="filter'.$ctag->GetName().'" value="'.$href.'" onclick="window.location=this.value">'.$addonfields_items[$i].'</a>' : '<span><input type="radio" name="filter'.$ctag->GetName().'" checked="checked">'.$addonfields_items[$i].'</span>'); | |||||
| } | |||||
| $dede_addonfields .= (preg_match("/&".$ctag->GetName()."=/is",$filterarr,$regm) ? '<a title="全部" href="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'"><input type="radio" name="filter'.$ctag->GetName().'" value="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'" onclick="window.location=this.value">全部</a>' : '<span><input type="radio" name="filter'.$ctag->GetName().'" checked="checked">全部</span>'); | |||||
| $addonfields_items = explode(",",$ctag->GetAtt('default')); | |||||
| for ($i=0; $i<count($addonfields_items); $i++) | |||||
| { | |||||
| $href = stripos($filterarr,$ctag->GetName().'=') ? str_replace("=".$fields_value,"=".urlencode($addonfields_items[$i]),$filterarr) : $filterarr.'&'.$ctag->GetName().'='.urlencode($addonfields_items[$i]); | |||||
| $dede_addonfields .= ($fields_value!=urlencode($addonfields_items[$i]) ? '<a title="'.$addonfields_items[$i].'" href="'.$href.'"><input type="radio" name="filter'.$ctag->GetName().'" value="'.$href.'" onclick="window.location=this.value">'.$addonfields_items[$i].'</a>' : '<span><input type="radio" name="filter'.$ctag->GetName().'" checked="checked">'.$addonfields_items[$i].'</span>'); | |||||
| } | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -571,78 +636,8 @@ function AddFilter($channelid, $type=1, $fieldsnamef=array(), $defaulttid=0, $to | |||||
| } | } | ||||
| echo $dede_addonfields; | echo $dede_addonfields; | ||||
| } | } | ||||
| /** | |||||
| * 获取对应版本号的更新SQL | |||||
| * | |||||
| * @return array | |||||
| */ | |||||
| function GetUpdateSQL() | |||||
| { | |||||
| global $cfg_dbprefix,$cfg_dbtype,$cfg_db_language; | |||||
| $result = array(); | |||||
| $query = ''; | |||||
| $sql4tmp = "ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language; | |||||
| $fp = fopen(DEDEROOT.'/install/update.txt','r'); | |||||
| $sqls = array(); | |||||
| $current_ver = ""; | |||||
| while(!feof($fp)) | |||||
| { | |||||
| $line = rtrim(fgets($fp,1024)); | |||||
| if (preg_match("/\-\- ([\d\.]+)/",$line,$matches)) { | |||||
| if (count($sqls) > 0) { | |||||
| $result[$current_ver] = $sqls; | |||||
| } | |||||
| $sqls = array(); | |||||
| $current_ver = $matches[1]; | |||||
| } | |||||
| if (preg_match("#;$#", $line)) | |||||
| { | |||||
| $query .= $line."\n"; | |||||
| $query = str_replace('#@__',$cfg_dbprefix,$query); | |||||
| if ( $cfg_dbtype == 'sqlite' ) | |||||
| { | |||||
| $query = preg_replace('/character set (.*?) /i','',$query); | |||||
| $query = preg_replace('/unsigned/i','',$query); | |||||
| $query = str_replace('TYPE=MyISAM','',$query); | |||||
| $query = preg_replace ('/TINYINT\(([\d]+)\)/i','INTEGER',$query); | |||||
| $query = preg_replace ('/mediumint\(([\d]+)\)/i','INTEGER',$query); | |||||
| $query = preg_replace ('/smallint\(([\d]+)\)/i','INTEGER',$query); | |||||
| $query = preg_replace('/int\(([\d]+)\)/i','INTEGER',$query); | |||||
| $query = preg_replace('/auto_increment/i','PRIMARY KEY AUTOINCREMENT',$query); | |||||
| $query = preg_replace('/,([\t\s ]+)KEY(.*?)MyISAM;/','',$query); | |||||
| $query = preg_replace('/,([\t\s ]+)KEY(.*?);/',');',$query); | |||||
| $query = preg_replace('/,([\t\s ]+)UNIQUE KEY(.*?);/',');',$query); | |||||
| $query = preg_replace('/set\(([^\)]*?)\)/','varchar',$query); | |||||
| $query = preg_replace('/enum\(([^\)]*?)\)/','varchar',$query); | |||||
| if ( preg_match("/PRIMARY KEY AUTOINCREMENT/",$query) ) | |||||
| { | |||||
| $query = preg_replace('/,([\t\s ]+)PRIMARY KEY([\t\s ]+)\(`([0-9a-zA-Z]+)`\)/i','',$query); | |||||
| } | |||||
| $sqls[] = $query; | |||||
| // $db->exec($query); | |||||
| } else { | |||||
| if (preg_match('#CREATE#i', $query)) | |||||
| { | |||||
| $sqls[] = preg_replace("#TYPE=MyISAM#i",$sql4tmp,$query); | |||||
| } else { | |||||
| $sqls[] = $query; | |||||
| } | |||||
| } | |||||
| $query=''; | |||||
| } else if (!preg_match("#^(\/\/|--)#", $line)) | |||||
| { | |||||
| $query .= $line; | |||||
| } | |||||
| } | |||||
| if (count($sqls) > 0) { | |||||
| $result[$current_ver] = $sqls; | |||||
| } | |||||
| fclose($fp); | |||||
| return $result; | |||||
| } | |||||
| //自定义函数接口 | //自定义函数接口 | ||||
| if (file_exists(DEDEINC.'/extend.func.php')) { | if (file_exists(DEDEINC.'/extend.func.php')) { | ||||
| require_once(DEDEINC.'/extend.func.php'); | require_once(DEDEINC.'/extend.func.php'); | ||||
| } | } | ||||
| ?> | |||||
| @@ -0,0 +1,496 @@ | |||||
| <?php | |||||
| if (!defined('DEDEINC')) exit('dedebiz'); | |||||
| /** | |||||
| * 采集小助手 | |||||
| * | |||||
| * @version $id:charset.helper.php 2010-07-05 11:43:09 tianya $ | |||||
| * @package DedeBIZ.Helpers | |||||
| * @copyright Copyright (c) 2022 DedeBIZ.COM | |||||
| * @license https://www.dedebiz.com/license | |||||
| * @link https://www.dedebiz.com | |||||
| */ | |||||
| require_once(DEDEINC."/libraries/dedehttpdown.class.php"); | |||||
| require_once(DEDEINC."/dedetag.class.php"); | |||||
| require_once(DEDEINC."/charset.func.php"); | |||||
| /** | |||||
| * 下载图片 | |||||
| * | |||||
| * @access public | |||||
| * @param string $gurl 地址 | |||||
| * @param string $rfurl 来源地址 | |||||
| * @param string $filename 文件名 | |||||
| * @param string $gcookie 调整cookie | |||||
| * @param string $JumpCount 跳转计数 | |||||
| * @param string $maxtime 最大次数 | |||||
| * @return string | |||||
| */ | |||||
| function DownImageKeep($gurl, $rfurl, $filename, $gcookie = "", $JumpCount = 0, $maxtime = 30) | |||||
| { | |||||
| $urlinfos = GetHostInfo($gurl); | |||||
| $ghost = trim($urlinfos['host']); | |||||
| if ($ghost == '') { | |||||
| return FALSE; | |||||
| } | |||||
| $gquery = $urlinfos['query']; | |||||
| if ($gcookie == "" && !empty($rfurl)) { | |||||
| $gcookie = RefurlCookie($rfurl); | |||||
| } | |||||
| $sessionQuery = "GET $gquery HTTP/1.1\r\n"; | |||||
| $sessionQuery .= "Host: $ghost\r\n"; | |||||
| $sessionQuery .= "Referer: $rfurl\r\n"; | |||||
| $sessionQuery .= "Accept: */*\r\n"; | |||||
| $sessionQuery .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n"; | |||||
| if ($gcookie != "" && !preg_match("/[\r\n]/", $gcookie)) { | |||||
| $sessionQuery .= $gcookie."\r\n"; | |||||
| } | |||||
| $sessionQuery .= "Connection: Keep-Alive\r\n\r\n"; | |||||
| $errno = ""; | |||||
| $errstr = ""; | |||||
| $m_fp = fsockopen($ghost, 80, $errno, $errstr, 10); | |||||
| fwrite($m_fp, $sessionQuery); | |||||
| $lnum = 0; | |||||
| //获取详细应答头 | |||||
| $m_httphead = array(); | |||||
| $httpstas = explode(" ", fgets($m_fp, 256)); | |||||
| $m_httphead["http-edition"] = trim($httpstas[0]); | |||||
| $m_httphead["http-state"] = trim($httpstas[1]); | |||||
| while (!feof($m_fp)) { | |||||
| $line = trim(fgets($m_fp, 256)); | |||||
| if ($line == "" || $lnum > 100) { | |||||
| break; | |||||
| } | |||||
| $hkey = ""; | |||||
| $hvalue = ""; | |||||
| $v = 0; | |||||
| for ($i = 0; $i < strlen($line); $i++) { | |||||
| if ($v == 1) { | |||||
| $hvalue .= $line[$i]; | |||||
| } | |||||
| if ($line[$i] == ":") { | |||||
| $v = 1; | |||||
| } | |||||
| if ($v == 0) { | |||||
| $hkey .= $line[$i]; | |||||
| } | |||||
| } | |||||
| $hkey = trim($hkey); | |||||
| if ($hkey != "") { | |||||
| $m_httphead[strtolower($hkey)] = trim($hvalue); | |||||
| } | |||||
| } | |||||
| //分析返回记录 | |||||
| if (preg_match("/^3/", $m_httphead["http-state"])) { | |||||
| if (isset($m_httphead["location"]) && $JumpCount < 3) { | |||||
| $JumpCount++; | |||||
| DownImageKeep($gurl, $rfurl, $filename, $gcookie, $JumpCount); | |||||
| } else { | |||||
| return FALSE; | |||||
| } | |||||
| } | |||||
| if (!preg_match("/^2/", $m_httphead["http-state"])) { | |||||
| return FALSE; | |||||
| } | |||||
| if (!isset($m_httphead)) { | |||||
| return FALSE; | |||||
| } | |||||
| $contentLength = $m_httphead['content-length']; | |||||
| //保存文件 | |||||
| $fp = fopen($filename, "w") or die("写入文件:{$filename} 失败"); | |||||
| $i = 0; | |||||
| $okdata = ""; | |||||
| $starttime = time(); | |||||
| while (!feof($m_fp)) { | |||||
| $okdata .= fgetc($m_fp); | |||||
| $i++; | |||||
| //超时结束 | |||||
| if (time() - $starttime > $maxtime) { | |||||
| break; | |||||
| } | |||||
| //到达指定大小结束 | |||||
| if ($i >= $contentLength) { | |||||
| break; | |||||
| } | |||||
| } | |||||
| if ($okdata != "") { | |||||
| fwrite($fp, $okdata); | |||||
| } | |||||
| fclose($fp); | |||||
| if ($okdata == "") { | |||||
| @unlink($filename); | |||||
| fclose($m_fp); | |||||
| return FALSE; | |||||
| } | |||||
| fclose($m_fp); | |||||
| return TRUE; | |||||
| } | |||||
| /** | |||||
| * 获得某页面返回的Cookie信息 | |||||
| * | |||||
| * @access public | |||||
| * @param string $gurl 调整地址 | |||||
| * @return string | |||||
| */ | |||||
| function RefurlCookie($gurl) | |||||
| { | |||||
| global $gcookie, $lastRfurl; | |||||
| $gurl = trim($gurl); | |||||
| if (!empty($gcookie) && $lastRfurl == $gurl) { | |||||
| return $gcookie; | |||||
| } else { | |||||
| $lastRfurl = $gurl; | |||||
| } | |||||
| if (trim($gurl) == '') { | |||||
| return ''; | |||||
| } | |||||
| $urlinfos = GetHostInfo($gurl); | |||||
| $ghost = $urlinfos['host']; | |||||
| $gquery = $urlinfos['query']; | |||||
| $sessionQuery = "GET $gquery HTTP/1.1\r\n"; | |||||
| $sessionQuery .= "Host: $ghost\r\n"; | |||||
| $sessionQuery .= "Accept: */*\r\n"; | |||||
| $sessionQuery .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n"; | |||||
| $sessionQuery .= "Connection: Close\r\n\r\n"; | |||||
| $errno = ""; | |||||
| $errstr = ""; | |||||
| $m_fp = fsockopen($ghost, 80, $errno, $errstr, 10) or die($ghost.'<br>'); | |||||
| fwrite($m_fp, $sessionQuery); | |||||
| $lnum = 0; | |||||
| //获取详细应答头 | |||||
| $gcookie = ""; | |||||
| while (!feof($m_fp)) { | |||||
| $line = trim(fgets($m_fp, 256)); | |||||
| if ($line == "" || $lnum > 100) { | |||||
| break; | |||||
| } else { | |||||
| if (preg_match("/^cookie/i", $line)) { | |||||
| $gcookie = $line; | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| fclose($m_fp); | |||||
| return $gcookie; | |||||
| } | |||||
| /** | |||||
| * 获得网址的host和query部份 | |||||
| * | |||||
| * @access public | |||||
| * @param string $gurl 调整地址 | |||||
| * @return string | |||||
| */ | |||||
| function GetHostInfo($gurl) | |||||
| { | |||||
| $gurl = preg_replace("/^http:\/\//i", "", trim($gurl)); | |||||
| $garr['host'] = preg_replace("/\/(.*)$/i", "", $gurl); | |||||
| $garr['query'] = "/".preg_replace("/^([^\/]*)\//i", "", $gurl); | |||||
| return $garr; | |||||
| } | |||||
| /** | |||||
| * HTML里的网址格式转换 | |||||
| * | |||||
| * @access public | |||||
| * @param string $body 文档 | |||||
| * @return string | |||||
| */ | |||||
| function TurnLinkTag(&$body) | |||||
| { | |||||
| $ttx = ''; | |||||
| $handid = '服务器'; | |||||
| preg_match_all("/<a href=['\"](.+?)['\"]([^>]+?)>(.+?)<\/a>/is", $body, $match); | |||||
| if (is_array($match[1]) && count($match[1]) > 0) { | |||||
| for ($i = 0; isset($match[1][$i]); $i++) { | |||||
| $servername = (isset($match[3][$i]) ? str_replace("'", "`", $match[3][$i]) : $handid.($i + 1)); | |||||
| if (preg_match("/[<>]/", $servername) || strlen($servername) > 40) { | |||||
| $servername = $handid.($i + 1); | |||||
| } | |||||
| $ttx .= "{dede:link text='$servername'} {$match[1][$i]} {/dede:link}\r\n"; | |||||
| } | |||||
| } | |||||
| return $ttx; | |||||
| } | |||||
| /** | |||||
| * 替换XML的CDATA | |||||
| * | |||||
| * @access public | |||||
| * @param string $str 字符串 | |||||
| * @return string | |||||
| */ | |||||
| function RpCdata($str) | |||||
| { | |||||
| $str = str_replace('<![CDATA[', '', $str); | |||||
| $str = str_replace(']]>', '', $str); | |||||
| return $str; | |||||
| } | |||||
| /** | |||||
| * 分析RSS里的链接 | |||||
| * | |||||
| * @access public | |||||
| * @param string $rssurl rss地址 | |||||
| * @return string | |||||
| */ | |||||
| function GetRssLinks($rssurl) | |||||
| { | |||||
| global $cfg_soft_lang; | |||||
| $dhd = new DedeHttpDown(); | |||||
| $dhd->OpenUrl($rssurl); | |||||
| $rsshtml = $dhd->GetHtml(); | |||||
| //分析编码 | |||||
| preg_match("/encoding=[\"']([^\"']*)[\"']/is", $rsshtml, $infos); | |||||
| if (isset($infos[1])) { | |||||
| $pcode = strtolower(trim($infos[1])); | |||||
| } else { | |||||
| $pcode = strtolower($cfg_soft_lang); | |||||
| } | |||||
| if ($cfg_soft_lang == 'gb2312') { | |||||
| if ($pcode == 'utf-8') { | |||||
| $rsshtml = utf82gb($rsshtml); | |||||
| } else if ($pcode == 'big5') { | |||||
| $rsshtml = big52gb($rsshtml); | |||||
| } | |||||
| } else if ($cfg_soft_lang == 'utf-8') { | |||||
| if ($pcode == 'gbk' || $pcode == 'gb2312') { | |||||
| $rsshtml = gb2utf8($rsshtml); | |||||
| } else if ($pcode == 'big5') { | |||||
| $rsshtml = gb2utf8(big52gb($rsshtml)); | |||||
| } | |||||
| } | |||||
| $rsarr = array(); | |||||
| preg_match_all("/<item(.*)<title>(.*)<\/title>/isU", $rsshtml, $titles); | |||||
| preg_match_all("/<item(.*)<link>(.*)<\/link>/isU", $rsshtml, $links); | |||||
| preg_match_all("/<item(.*)<description>(.*)<\/description>/isU", $rsshtml, $descriptions); | |||||
| if (!isset($links[2])) { | |||||
| return ''; | |||||
| } | |||||
| foreach ($links[2] as $k => $v) { | |||||
| $rsarr[$k]['link'] = RpCdata($v); | |||||
| if (isset($titles[2][$k])) { | |||||
| $rsarr[$k]['title'] = RpCdata($titles[2][$k]); | |||||
| } else { | |||||
| $rsarr[$k]['title'] = preg_replace("/^(.*)\//i", "", RpCdata($titles[2][$k])); | |||||
| } | |||||
| if (isset($descriptions[2][$k])) { | |||||
| $rsarr[$k]['image'] = GetddImgFromRss($descriptions[2][$k], $rssurl); | |||||
| } else { | |||||
| $rsarr[$k]['image'] = ''; | |||||
| } | |||||
| } | |||||
| return $rsarr; | |||||
| } | |||||
| /** | |||||
| * 从RSS摘要获取图片信息 | |||||
| * | |||||
| * @access public | |||||
| * @param string $descriptions 描述 | |||||
| * @param string $refurl 来源地址 | |||||
| * @return string | |||||
| */ | |||||
| function GetddImgFromRss($descriptions, $refurl) | |||||
| { | |||||
| if ($descriptions == '') { | |||||
| return ''; | |||||
| } | |||||
| preg_match_all("/<img(.*)src=[\"']{0,1}(.*)[\"']{0,1}[> \r\n\t]{1,}/isU", $descriptions, $imgs); | |||||
| if (isset($imgs[2][0])) { | |||||
| $imgs[2][0] = preg_replace("/[\"']/", '', $imgs[2][0]); | |||||
| $imgs[2][0] = preg_replace("/\/{1,}/", '/', $imgs[2][0]); | |||||
| return FillUrl($refurl, $imgs[2][0]); | |||||
| } else { | |||||
| return ''; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * 补全网址 | |||||
| * | |||||
| * @access public | |||||
| * @param string $refurl 来源地址 | |||||
| * @param string $surl 站点地址 | |||||
| * @return string | |||||
| */ | |||||
| function FillUrl($refurl, $surl) | |||||
| { | |||||
| $i = $pathStep = 0; | |||||
| $dstr = $pstr = $okurl = ''; | |||||
| $refurl = trim($refurl); | |||||
| $surl = trim($surl); | |||||
| $urls = @parse_url($refurl); | |||||
| $basehost = ((!isset($urls['port']) || $urls['port'] == '80') ? $urls['host'] : $urls['host'].':'.$urls['port']); | |||||
| //$basepath = $basehost.(!isset($urls['path']) ? '' : '/'.$urls['path']); | |||||
| //由于直接获得的path在处理 http://xxxx/nnn/aaa?fdsafd 这种情况时会有错误,因此用其它方式处理 | |||||
| $basepath = $basehost; | |||||
| $paths = explode('/', preg_replace("/^http:\/\//i", "", $refurl)); | |||||
| $n = count($paths); | |||||
| for ($i = 1; $i < ($n - 1); $i++) { | |||||
| if (!preg_match("/[\?]/", $paths[$i])) $basepath .= '/'.$paths[$i]; | |||||
| } | |||||
| if (!preg_match("/[\?\.]/", $paths[$n - 1])) { | |||||
| $basepath .= '/'.$paths[$n - 1]; | |||||
| } | |||||
| if ($surl == '') { | |||||
| return $basepath; | |||||
| } | |||||
| $pos = strpos($surl, "#"); | |||||
| if ($pos > 0) { | |||||
| $surl = substr($surl, 0, $pos); | |||||
| } | |||||
| //用 '/' 表示网站根的网址 | |||||
| if ($surl[0] == '/') { | |||||
| $okurl = $basehost.$surl; | |||||
| } else if ($surl[0] == '.') { | |||||
| if (strlen($surl) <= 2) { | |||||
| return ''; | |||||
| } else if ($surl[1] == '/') { | |||||
| $okurl = $basepath.preg_replace('/^./', '', $surl); | |||||
| } else { | |||||
| $okurl = $basepath.'/'.$surl; | |||||
| } | |||||
| } else { | |||||
| if (strlen($surl) < 7) { | |||||
| $okurl = $basepath.'/'.$surl; | |||||
| } else if (preg_match("/^http:\/\//i", $surl)) { | |||||
| $okurl = $surl; | |||||
| } else { | |||||
| $okurl = $basepath.'/'.$surl; | |||||
| } | |||||
| } | |||||
| $okurl = preg_replace("/^http:\/\//i", '', $okurl); | |||||
| $okurl = 'http://'.preg_replace("/\/{1,}/", '/', $okurl); | |||||
| return $okurl; | |||||
| } | |||||
| /** | |||||
| * 从匹配规则中获取列表网址 | |||||
| * | |||||
| * @access public | |||||
| * @param string $regxurl 正则地址 | |||||
| * @param string $handurl 操作地址 | |||||
| * @param string $startid 开始id | |||||
| * @param string $endid 结束id | |||||
| * @param string $addv 增值 | |||||
| * @param string $usemore 使用更多 | |||||
| * @param string $batchrule 列表规则 | |||||
| * @return string | |||||
| */ | |||||
| function GetUrlFromListRule($regxurl = '', $handurl = '', $startid = 0, $endid = 0, $addv = 1, $usemore = 0, $batchrule = '') | |||||
| { | |||||
| global $dsql, $islisten; | |||||
| $lists = array(); | |||||
| $n = 0; | |||||
| $islisten = (empty($islisten) ? 0 : $islisten); | |||||
| if ($handurl != '') { | |||||
| $handurls = explode("\n", $handurl); | |||||
| foreach ($handurls as $handurl) { | |||||
| $handurl = trim($handurl); | |||||
| if (preg_match("/^http:\/\//i", $handurl)) { | |||||
| $lists[$n][0] = $handurl; | |||||
| $lists[$n][1] = 0; | |||||
| $n++; | |||||
| if ($islisten == 1) { | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| if ($regxurl != '') { | |||||
| //没指定(#)和(*) | |||||
| if (!preg_match("/\(\*\)/i", $regxurl) && !preg_match("/\(#\)/", $regxurl)) { | |||||
| $lists[$n][0] = $regxurl; | |||||
| $lists[$n][1] = 0; | |||||
| $n++; | |||||
| } else { | |||||
| if ($addv <= 0) { | |||||
| $addv = 1; | |||||
| } | |||||
| //没指定多栏目匹配规则 | |||||
| if ($usemore == 0) { | |||||
| while ($startid <= $endid) { | |||||
| $lists[$n][0] = str_replace("(*)", sprintf('%0'.strlen($startid).'d', $startid), $regxurl); | |||||
| $lists[$n][1] = 0; | |||||
| $startid = sprintf('%0'.strlen($startid).'d', $startid + $addv); | |||||
| $n++; | |||||
| if ($n > 2000 || $islisten == 1) { | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| //匹配多个栏目 | |||||
| //规则表达式 [(#)=>(#)匹配的网址; (*)=>(*)的范围,如:1-20; typeid=>栏目id; addurl=>附加的网址(用|分开多个)] | |||||
| else { | |||||
| $nrules = explode(']', trim($batchrule)); | |||||
| foreach ($nrules as $nrule) { | |||||
| $nrule = trim($nrule); | |||||
| $nrule = preg_replace("/^\[|\]$/", '', $nrule); | |||||
| $nrules = explode(';', $nrule); | |||||
| if (count($nrules) < 3) { | |||||
| continue; | |||||
| } | |||||
| $brtag = ''; | |||||
| $startid = 0; | |||||
| $endid = 0; | |||||
| $typeid = 0; | |||||
| $addurls = array(); | |||||
| foreach ($nrules as $nrule) { | |||||
| $nrule = trim($nrule); | |||||
| list($k, $v) = explode('=>', $nrule); | |||||
| if (trim($k) == '(#)') { | |||||
| $brtag = trim($v); | |||||
| } else if (trim($k) == 'typeid') { | |||||
| $typeid = trim($v); | |||||
| } else if (trim($k) == 'addurl') { | |||||
| $addurl = trim($v); | |||||
| $addurls = explode('|', $addurl); | |||||
| } else if (trim($k) == '(*)') { | |||||
| $v = preg_replace("/[ \r\n\t]/", '', trim($v)); | |||||
| list($startid, $endid) = explode('-', $v); | |||||
| } | |||||
| } | |||||
| //如果栏目用栏目名称 | |||||
| if (preg_match('/[^0-9]/', $typeid)) { | |||||
| $arr = $dsql->GetOne("SELECT id FROM `#@__arctype` WHERE typename LIKE '$typeid' "); | |||||
| if (is_array($arr)) { | |||||
| $typeid = $arr['id']; | |||||
| } else { | |||||
| $typeid = 0; | |||||
| } | |||||
| } | |||||
| //附加网址优先 | |||||
| $mjj = 0; | |||||
| if (isset($addurls[0])) { | |||||
| foreach ($addurls as $addurl) { | |||||
| $addurl = trim($addurl); | |||||
| if ($addurl == '') { | |||||
| continue; | |||||
| } | |||||
| $lists[$n][0] = $addurl; | |||||
| $lists[$n][1] = $typeid; | |||||
| $n++; | |||||
| $mjj++; | |||||
| if ($islisten == 1) { | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| //如果为非监听模式或监听模式没手工指定的附加网址 | |||||
| if ($islisten != 1 || $mjj == 0) { | |||||
| //匹配规则里的网址,注:(#)的网址是是允许使用(*)的 | |||||
| while ($startid <= $endid) { | |||||
| $lists[$n][0] = str_replace("(#)", $brtag, $regxurl); | |||||
| $lists[$n][0] = str_replace("(*)", sprintf('%0'.strlen($startid).'d', $startid), $lists[$n][0]); | |||||
| $lists[$n][1] = $typeid; | |||||
| $startid = sprintf('%0'.strlen($startid).'d', $startid + $addv); | |||||
| $n++; | |||||
| if ($islisten == 1) { | |||||
| break; | |||||
| } | |||||
| if ($n > 20000) { | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } //End 匹配多栏目 | |||||
| } //End使用规则匹配的情况 | |||||
| } | |||||
| return $lists; | |||||
| }//End | |||||
| ?> | |||||