category.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 868 行 · 第 1/3 页

PHP
868
字号
        $result = $this->db->query($sql, intval($limit), intval($start));
        $ret = array();
		$article_handler =& xoops_getmodulehandler("article", $GLOBALS["artdirname"]);
       	while ($myrow = $this->db->fetchArray($result)) {
            $article =& $article_handler->create(false);
            $article->assignVars($myrow);
            if($asObject){
            	$ret[] = $article;
        	}else{
	        	foreach($myrow as $key=>$val){
            		$_ret[$key] = (@$article->vars[$key]["changed"]) ? $article->getVar($key) : $val;
        		}
        		$ret[] = $_ret;
        	}
            unset($article);
        }
        return $ret;
   	}
   	
    /**
     * count featured articles matching a condition of a category
     * 
	 * {@link CriteriaCompo} 
	 *
     * @param 	mixed	$cat_id array or {@link Xcategory}
     * @param 	object 	$criteria {@link CriteriaElement} to match
     * @return 	int 	count of articles
     */
   	function getArticleCountFeatured(&$cat_id, $criteria = null)
   	{
        if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
			$criteria->add(new Criteria("ac.ac_feature", 0, ">"));
        }else{
			$criteria = new CriteriaCompo(new Criteria("ac.ac_feature", 0, ">"));
        }
        return $this->getArticleCount($cat_id, $criteria);
   	}

    /**
     * count published articles matching a condition of a category
     * 
	 * {@link CriteriaCompo} 
	 *
     * @param 	mixed	$cat_id array or {@link Xcategory}
     * @param 	object 	$criteria {@link CriteriaElement} to match
     * @return 	int 	count of articles
     */
   	function getArticleCountPublished(&$cat_id, $criteria = null)
   	{
        if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
			$criteria->add(new Criteria("ac.ac_publish", 0, ">"));
        }else{
			$criteria = new CriteriaCompo(new Criteria("ac.ac_publish", 0, ">"));
        }
        return $this->getArticleCount($cat_id, $criteria);
   	}

    /**
     * count registered articles matching a condition of a category
     * 
	 * {@link CriteriaCompo} 
	 *
     * @param 	mixed	$cat_id array or {@link Xcategory}
     * @param 	object 	$criteria {@link CriteriaElement} to match
     * @return 	int 	count of articles
     */
   	function getArticleCountRegistered(&$cat_id, $criteria = null)
   	{
        if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
			$criteria->add(new Criteria("ac.ac_register", 0, ">"));
        }else{
			$criteria = new CriteriaCompo(new Criteria("ac.ac_register", 0, ">"));
        }
		$criteria->add(new Criteria("ac.ac_publish", 0));
        return $this->getArticleCount($cat_id, $criteria);
   	}

    /**
     * count articles matching a condition of a category
     * 
     * @param 	mixed	$cat_id array or {@link Xcategory}
     * @param 	object 	$criteria {@link CriteriaElement} to match
     * @return 	int 	count of articles
     */
    function getArticleCount(&$cat_id, $criteria = null)
    {
        $sql = "SELECT COUNT(*) as count FROM ".art_DB_prefix("artcat")." AS ac";
        if(is_array($cat_id) && count($cat_id)>0){
        	$sql .= " WHERE ac.cat_id IN (".implode(",", $cat_id).")";
        }elseif(is_object($cat_id)){
        	$sql .= " WHERE ac.cat_id = ".$cat_id->getVar("cat_id");
        }elseif(intval($cat_id)){
        	$sql .= " WHERE ac.cat_id = ".intval($cat_id);
        }else{
        	$sql .= " WHERE 1=1";
        }
        if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
            $sql .= " AND ".$criteria->render();
        }
        $result = $this->db->query($sql);
        $myrow = $this->db->fetchArray($result);
        return intval($myrow["count"]);
    }

    /**
     * count registered articles matching a condition of a list of categories, respectively
     * 
     * @param 	int		$cat_id array of category IDs
     * @param 	object 	$criteria {@link CriteriaElement} to match
     * @return 	int 	count of articles
     */
   	function getArticleCountsRegistered($cat_id=0, $criteria = null)
   	{
        if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
			$criteria->add(new Criteria("ac.ac_register", 0, ">"));
        }else{
			$criteria = new CriteriaCompo(new Criteria("ac.ac_register", 0, ">"));
        }
		$criteria->add(new Criteria("ac.ac_publish", 0));
		return $this->getArticleCounts($cat_id, $criteria);
   	}

    /**
     * count articles matching a condition of a list of categories, respectively
     * 
     * @param 	mixed	$cat_id array or {@link Xcategory}
     * @param 	object 	$criteria {@link CriteriaElement} to match
     * @return 	array 	associative array category ID and article count
     */
    function &getArticleCounts($cat_id = null, $criteria = null)
    {
        $sql = "SELECT ac.cat_id, COUNT(*) as count FROM ".art_DB_prefix("artcat")." AS ac";
        if(is_array($cat_id) && count($cat_id)>0){
        	$sql .= " WHERE ac.cat_id IN (".implode(",", $cat_id).")";
        }elseif(intval($cat_id)){
        	$sql .= " WHERE ac.cat_id = ".intval($cat_id);
        }else{
        	$sql .= " WHERE 1=1";
        }
        if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
			$sql .= " AND ".$criteria->render();
        }
        $sql .= " GROUP BY ac.cat_id";
        $result = $this->db->query($sql);
        $ret = array();
        while ($myrow = $this->db->fetchArray($result)) {
            $ret[$myrow["cat_id"]] = $myrow["count"];
        }
        return $ret;
    }

    /**
     * count categories with specified permission of a list of parent categories, respectively
     * 
     * @param 	mixed	$cat_pid 	array or category ID
     * @param 	string 	$permission	permission type
     * @return 	array 	associative array category IDs and subcategory counts
     */
    function &getCategoryCounts($cat_pid=0, $permission = "access")
    {
        $sql = "SELECT cat_pid, COUNT(*) as count FROM ".$this->table;
        if(is_array($cat_pid) && count($cat_pid)>0){
        	$sql .= " WHERE cat_pid IN (".implode(",", $cat_pid).")";
        }elseif(intval($cat_pid)){
        	$sql .= " WHERE cat_pid = ".intval($cat_pid);
        }else{
        	$sql .= " WHERE 1=1";
        }
		mod_loadFunctions("user", $GLOBALS["artdirname"]);
        if(!art_isAdministrator()){
			$permission_handler =&  xoops_getmodulehandler("permission", $GLOBALS["artdirname"]);
			$allowed_cats =& $permission_handler->getCategories($permission);
			if(count($allowed_cats)==0) {
	        	$ret = array();
	            return $ret;
			}
        	$sql .= " AND cat_id IN (".implode(",",$allowed_cats).")";
    	}
        $sql .= " GROUP BY cat_pid";
        $result = $this->db->query($sql);
        $ret = array();
        while ($myrow = $this->db->fetchArray($result)) {
            $ret[$myrow["cat_pid"]] = $myrow["count"];
        }
        return $ret;
    }

    /**
     * check permission of the category
     * 
	 * {@link Permission} 
	 *
     * @param 	mixed	$category 	category ID or {@link Xcategory}
     * @param 	string 	$type 		permission type
     * @return 	bool 	true on accessible
     */
    function getPermission(&$category, $type = "access")
    {
        global $xoopsUser, $xoopsModule;
        static $_cachedPerms;

        if ($GLOBALS["xoopsUserIsAdmin"] && $xoopsModule->getVar("dirname") == $GLOBALS["artdirname"]) {
	        return true;
        }
        $cat_id = is_object($category)? $category->getVar("cat_id") : intval($category);

        $type = strtolower($type);
        if ("moderate" == $type) {
			mod_loadFunctions("user", $GLOBALS["artdirname"]);
            $permission = art_isModerator($category);
        } else {
			if (!isset($_cachedPerms[$type][$cat_id])) {
				$getpermission =&  xoops_getmodulehandler("permission", $GLOBALS["artdirname"]);
				$_cachedPerms[$type][$cat_id] = $getpermission->getPermission($type, $cat_id);
			}
        	$permission = (!empty($_cachedPerms[$type][$cat_id])) ? 1 : 0;
        }
        return $permission;
    }

    /**
     * clean orphan art-cat links from database
     * 
     * @return 	bool	true on success
     */
    function cleanOrphan()
    {
    	/* for MySQL 4.1+ */
    	if($this->mysql_major_version() >= 4):
        $sql = 	"DELETE ".$this->table." FROM ".$this->table.
        		" LEFT JOIN ".$this->table." AS aa ON ".$this->table.".cat_pid = aa.cat_id ".
        		" WHERE ".$this->table.".cat_pid>0 AND (aa.cat_id IS NULL)";
        else:
        $this->identifierName = "cat_pid";
        $category_list = $this->getList(new Criteria("cat_pid", 0, ">"));
        $this->identifierName = "cat_title";
        if($parent_categories = @array_values($category_list)){
	        $parent_list = $this->getIds(new Criteria("cat_id", "(".implode(", ", $parent_categories).")", "IN"));
	        foreach($category_list as $cat_id => $parent_category){
		        if(in_array($parent_category, $parent_list)) continue;
		        $category_obj =& $this->get($cat_id);
		        $this->delete($category_obj);
		        unset($category_obj);
	        }
        }
		endif;
        if (!empty($sql) && !$result = $this->db->queryF($sql)) {
	        //xoops_error("cleanOrphan error:". $sql);
        }
        
    	/* for MySQL 4.1+ */
    	if($this->mysql_major_version() >= 4):
        $sql = "DELETE FROM ".art_DB_prefix("artcat").
        		" WHERE (cat_id NOT IN ( SELECT DISTINCT cat_id FROM ".$this->table.") )";
        else:
        $sql = 	"DELETE ".art_DB_prefix("artcat")." FROM ".art_DB_prefix("artcat").
        		" LEFT JOIN ".$this->table." AS aa ON ".art_DB_prefix("artcat").".cat_id = aa.cat_id ".
        		" WHERE (aa.cat_id IS NULL)";
		endif;
        if (!$result = $this->db->queryF($sql)) {
	        //xoops_error("cleanOrphan error:". $sql);
        }
        return true;
    }
    
    function updateTrack($category = null, $tracks = null)
    {
	    if(empty($category)){
		    $categories_obj = $this->getObjects(new Criteria("cat_pid", 0), true);
		    foreach(array_keys($categories_obj) as $key){
			    $this->updateTracks($categories_obj[$key]);
		    }
		    unset($categories_obj);
		    return true;
	    }
	    if($tracks===null)  $tracks = $this->getSupCategories($category);
	    $this->setTrack($category, $tracks);
	    $subCats = $this->getChildCategories($category->getVar("cat_id"));
	    $tracks[] = $category->getVar("cat_id");
	    if(count($subCats)>0) foreach($subCats as $id=>$cat){
		    $this->updateTracks($cat, $tracks);
	    }
	    unset($subCats, $tracks);
	    return true;
    }
}
');
?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?