idCounter = 0; $this->artDir = $GLOBALS['cfg_cmspath'].$GLOBALS['cfg_arcdir']; $this->baseDir = $GLOBALS['cfg_basedir']; $this->shortName = $GLOBALS['art_shortname']; $this->idArrary = ''; $this->dsql = 0; } function TypeUnit() { $this->__construct(); } //清理类 function Close() { } //获取所有栏目的文档ID数 function UpdateCatalogNum() { $this->dsql->SetQuery("SELECT typeid,count(typeid) as dd FROM `#@__arctiny` WHERE arcrank <>-2 group by typeid"); $this->dsql->Execute(); while($row = $this->dsql->GetArray()) { $this->CatalogNums[$row['typeid']] = $row['dd']; } } function GetTotalArc($tid) { if(!is_array($this->CatalogNums)) { $this->UpdateCatalogNum(); } if(!isset($this->CatalogNums[$tid])) { return 0; } else { $totalnum = 0; $ids = explode(',',GetSonIds($tid)); foreach($ids as $tid) { if(isset($this->CatalogNums[$tid])) { $totalnum += $this->CatalogNums[$tid]; } } return $totalnum; } } /** * 读出所有分类,在类目管理页(list_type)中使用 * * @access public * @param int $channel 频道ID * @param int $nowdir 当前操作ID * @return string */ function ListAllType($channel=0,$nowdir=0) { global $cfg_admin_channel, $admin_catalogs; $this->dsql = $GLOBALS['dsql']; //检测用户有权限的顶级栏目 if($cfg_admin_channel=='array') { $admin_catalog = join(',', $admin_catalogs); $this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($admin_catalog) group by reid "); $this->dsql->Execute(); $topidstr = ''; while($row = $this->dsql->GetObject()) { if($row->reid==0) continue; $topidstr .= ($topidstr=='' ? $row->reid : ','.$row->reid); } $admin_catalog .= ','.$topidstr; $admin_catalogs = explode(',', $admin_catalog); $admin_catalogs = array_unique($admin_catalogs); } $this->dsql->SetQuery("SELECT id,typedir,typename,ispart,sortrank,ishidden FROM `#@__arctype` WHERE reid=0 order by sortrank"); $this->dsql->Execute(0); while($row = $this->dsql->GetObject(0)) { if( $cfg_admin_channel=='array' && !in_array($row->id, $admin_catalogs) ) { continue; } $typeDir = $row->typedir; $typeName = $row->typename; $ispart = $row->ispart; $id = $row->id; $rank = $row->sortrank; if($row->ishidden=='1') { $nss = "[隐]"; } else { $nss = ''; } echo "\r\n"; //普通列表 if($ispart==0) { echo " \r\n"; echo " \r\n"; echo " \r\n"; } //带封面的频道 else if($ispart==1) { echo " \r\n"; echo " \r\n"; echo " \r\n"; } //独立页面 else if($ispart==2) { echo " \r\n"; echo " \r\n"; echo " \r\n"; } echo " \r\n
{$nss}".$typeName."[ID:".$id."](文档:".$this->GetTotalArc($id).") "; echo " "; echo " "; echo " "; echo " "; echo " "; echo " "; echo " "; echo " 
{$nss}".$typeName."[ID:".$id."] "; echo " "; echo " "; echo " "; echo " "; echo " "; echo " "; echo " "; echo " 
{$nss}".$typeName."[ID:".$id."] "; echo " "; echo " "; echo " "; echo " "; echo " "; echo " 
"; $lastid = GetCookie('lastCid'); if($channel==$id || $lastid==$id || isset($GLOBALS['exallct']) || $cfg_admin_channel=='array') { echo " \r\n"; $this->LogicListAllSunType($id," "); echo "
\r\n"; } echo "
\r\n"; } } /** * 获得子类目的递归调用 * * @access public * @param int $id 栏目ID * @param string $step 层级标志 * @return void */ function LogicListAllSunType($id, $step) { global $cfg_admin_channel, $admin_catalogs; $fid = $id; $this->dsql->SetQuery("SELECT id,reid,typedir,typename,ispart,sortrank,ishidden FROM `#@__arctype` WHERE reid='".$id."' order by sortrank"); $this->dsql->Execute($fid); if($this->dsql->GetTotalRow($fid)>0) { while($row = $this->dsql->GetObject($fid)) { if($cfg_admin_channel=='array' && !in_array($row->id, $admin_catalogs) ) { continue; } $typeDir = $row->typedir; $typeName = $row->typename; $reid = $row->reid; $id = $row->id; $ispart = $row->ispart; if($step==" ") { $stepdd = 2; } else { $stepdd = 3; } $rank = $row->sortrank; if($row->ishidden=='1') { $nss = "[隐]"; } else { $nss = ''; } //普通列表 if($ispart==0) { echo "\r\n"; echo ""; echo ""; echo "
"; echo "$step {$nss}".$typeName."[ID:".$id."](文档:".$this->GetTotalArc($id).") "; echo ""; echo " "; echo " "; echo " "; echo " "; echo " "; echo " "; echo " 
\r\n"; } //封面频道 else if($ispart==1) { echo " \r\n"; echo "
"; echo "$step {$nss}".$typeName."[ID:".$id."] "; echo ""; echo ""; echo " "; echo " "; echo " "; echo " "; echo " "; echo " 
\r\n"; } //独立页面 else if($ispart==2) { echo "\r\n"; echo ""; echo "
"; echo "$step {$nss}".$typeName."[ID:".$id."] "; echo ""; echo " "; echo " "; echo " "; echo " "; echo " 
\r\n"; } echo " "; $this->LogicListAllSunType($id,$step." "); echo "
\r\n"; } } } /** * 返回与某个目相关的下级目录的类目ID列表(删除类目或文章时调用) * * @access public * @param int $id 栏目ID * @param int $channel 频道ID * @return array */ function GetSunTypes($id, $channel=0) { $this->dsql = $GLOBALS['dsql']; $this->idArray[$this->idCounter]=$id; $this->idCounter++; $fid = $id; if($channel!=0) { $csql = " And channeltype=$channel "; } else { $csql = ""; } $this->dsql->SetQuery("SELECT id FROM `#@__arctype` WHERE reid=$id $csql"); $this->dsql->Execute("gs".$fid); //if($this->dsql->GetTotalRow("gs".$fid)!=0) //{ while($row=$this->dsql->GetObject("gs".$fid)) { $nid = $row->id; $this->GetSunTypes($nid,$channel); } //} return $this->idArray; } /** * 删除类目 * * @access public * @param int $id 栏目ID * @param bool $isDelFile 是否删除文件 * @return string */ function DelType($id, $isDelFile) { $this->idCounter = 0; $this->idArray = array(); $this->GetSunTypes($id); $query = " SELECT #@__arctype.*,#@__channeltype.typename AS ctypename, #@__channeltype.addtable FROM `#@__arctype` LEFT JOIN #@__channeltype ON #@__channeltype.id=#@__arctype.channeltype WHERE #@__arctype.id='$id' "; $typeinfos = $this->dsql->GetOne($query); $topinfos = $this->dsql->GetOne("SELECT moresite,siteurl FROM `#@__arctype` WHERE id='".$typeinfos['topid']."'"); if(!is_array($typeinfos)) { return FALSE; } $indir = $typeinfos['typedir']; $addtable = $typeinfos['addtable']; $ispart = $typeinfos['ispart']; $defaultname = $typeinfos['defaultname']; //删除数据库里的相关记录 foreach($this->idArray as $id) { $myrow = $this->dsql->GetOne("SELECT * FROM `#@__arctype` WHERE id='$id'"); if($myrow['topid']>0) { $mytoprow = $this->dsql->GetOne("SELECT moresite,siteurl FROM `#@__arctype` WHERE id='".$myrow['topid']."'"); if(is_array($mytoprow) && !empty($mytoprow)) { foreach($mytoprow as $k=>$v) { if(!preg_match("/[0-9]/",$k)) { $myrow[$k] = $v; } } } } //删除目录和目录里的所有文件 ### 禁止了此功能 //删除单独页面 if($myrow['ispart']==2 && $myrow['typedir']=='') { if( is_file($this->baseDir.'/'.$myrow['defaultname']) ) { @unlink($this->baseDir.'/'.$myrow['defaultname']); } } //删除数据库信息 $this->dsql->ExecuteNoneQuery("DELETE FROM `#@__arctype` WHERE id='$id'"); $this->dsql->ExecuteNoneQuery("DELETE FROM `#@__arctiny` WHERE typeid='$id'"); $this->dsql->ExecuteNoneQuery("DELETE FROM `#@__archives` WHERE typeid='$id'"); $this->dsql->ExecuteNoneQuery("DELETE FROM `#@__spec` WHERE typeid='$id'"); $this->dsql->ExecuteNoneQuery("DELETE FROM `#@__feedback` WHERE typeid='$id'"); if($addtable!="") { $this->dsql->ExecuteNoneQuery("DELETE FROM $addtable WHERE typeid='$id'"); } } //删除目录和目录里的所有文件 ### 禁止了此功能 //删除单独页面 if($ispart==2 && $indir=="") { if( is_file($this->baseDir."/".$defaultname) ) { @unlink($this->baseDir."/".$defaultname); } } @reset($this->idArray); $this->idCounter = 0; return TRUE; } /** * 删除指定目录的所有文件 * * @access public * @param string $indir 指定目录 * @return int */ function RmDirFile($indir) { if(!file_exists($indir)) return; $dh = dir($indir); while($file = $dh->read()) { if($file == "." || $file == "..") { continue; } else if(is_file("$indir/$file")) { @unlink("$indir/$file"); } else { $this->RmDirFile("$indir/$file"); } if(is_dir("$indir/$file")) { @rmdir("$indir/$file"); } } $dh->close(); return(1); } }//End Class