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 " ";
$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
\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 " |
\r\n";
}
//封面频道
else if($ispart==1)
{
echo " \r\n";
echo " |
\r\n";
}
//独立页面
else if($ispart==2)
{
echo "\r\n";
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