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 + -
显示快捷键?