forum.php
来自「php 开发的内容管理系统」· PHP 代码 · 共 811 行 · 第 1/3 页
PHP
811 行
$criteria_forum = ' AND t.forum_id IN (' . implode(',', array_keys($forum)) . ')';
}elseif(!empty($forum)){
$criteria_forum = ' AND t.forum_id ='.intval($forum);
}else{
$criteria_forum = '';
}
}
$sql = 'SELECT COUNT(*) as count FROM ' . $this->db->prefix("bb_topics") . ' t '.$leftjoin;
$sql .= ' WHERE '.$criteria_post . $criteria_forum . $criteria_extra . $criteria_approve;
if (!$result = $this->db->query($sql)) {
return null;
}
$myrow = $this->db->fetchArray($result);
$count = $myrow['count'];
return $count;
}
// get permission
function getPermission($forum, $type = "access", $checkCategory = true)
{
global $xoopsUser, $xoopsModule;
static $_cachedPerms;
include_once XOOPS_ROOT_PATH.'/modules/newbb/include/functions.php';
if($type == "all") return true;
if (newbb_isAdministrator()) return true;
if (!is_object($forum)) $forum =& $this->get($forum);
if ($forum->getVar('forum_type')) return false;// if forum inactive, all has no access except admin
if(!empty($checkCategory)){
$category_handler =& xoops_getmodulehandler('category', 'newbb');
$categoryPerm = $category_handler->getPermission($forum->getVar('cat_id'));
if (!$categoryPerm) return false;
}
$type = strtolower($type);
if ("moderate" == $type) {
$permission = (newbb_isModerator($forum))?1:0;
} else {
$perms = array_map("trim",explode(',', FORUM_PERM_ITEMS));
$perm_type = 'forum';
$perm_item = (in_array($type, $perms))?'forum_' . $type:"forum_access";
if (!isset($_cachedPerms[$perm_type])) {
$getpermission =& xoops_getmodulehandler('permission', 'newbb');
$_cachedPerms[$perm_type] = $getpermission->getPermissions($perm_type);
}
$permission = (isset($_cachedPerms[$perm_type][$forum->getVar('forum_id')][$perm_item])) ? 1 : 0;
}
return $permission;
}
function deletePermission(&$forum)
{
$perm_handler =& xoops_getmodulehandler('permission', 'newbb');
return $perm_handler->deleteByForum($forum->getVar("forum_id"));
}
function applyPermissionTemplate(&$forum)
{
$perm_handler =& xoops_getmodulehandler('permission', 'newbb');
return $perm_handler->applyTemplate($forum->getVar("forum_id"));
}
/**
* clean orphan items from database
*
* @return bool true on success
*/
function cleanOrphan()
{
parent::cleanOrphan($this->db->prefix("bb_categories"), "cat_id");
if($this->mysql_major_version() >= 4):
/*
$sql = "DELETE FROM ".$this->table.
" WHERE (parent_forum >0 AND parent_forum NOT IN ( SELECT DISTINCT forum_id FROM ".$this->table.") )";
*/
$sql = "DELETE ".$this->table." FROM ".$this->table.
" LEFT JOIN ".$this->table." AS aa ON ".$this->table.".parent_forum = aa.forum_id ".
" WHERE ".$this->table.".parent_forum>0 AND (aa.forum_id IS NULL)";
if (!$result = $this->db->queryF($sql)):
xoops_error("cleanOrphan error:". $sql);
endif;
else:
$this->identifierName = "parent_forum";
$forum_list = $this->getList(new Criteria("parent_forum", 0, ">"));
$this->identifierName = "forum_name";
if($parent_forums = @array_values($forum_list)){
$parent_list = $this->getIds(new Criteria("forum_id", "(".implode(", ", $parent_forums).")", "IN"));
foreach($forum_list as $forum_id => $parent_forum){
if(in_array($parent_forum, $parent_list)) continue;
$forum_obj =& $this->get($forum_id);
$this->delete($forum_obj);
unset($forum_obj);
}
}
endif;
return true;
}
function synchronization($object = null)
{
global $xoopsDB;
if(empty($object)) {
/* for MySQL 4.1+ */
if($this->mysql_major_version() >= 4){
$sql = "UPDATE ".$this->table.
" SET ".$this->table.".forum_last_post_id = @last_post =(".
" SELECT MAX(post_id) AS last_post ".
" FROM " . $this->db->prefix("bb_posts") .
" WHERE approved=1 AND forum_id = ".$this->table.".forum_id".
" )".
" WHERE ".$this->table.".forum_last_post_id <> @last_post";
if(!$this->db->queryF($sql)){
xoops_error("update error: ".$sql);
}
$sql = "UPDATE ".$this->table.
" SET ".$this->table.".forum_posts = @posts =(".
" SELECT COUNT(*) AS posts ".
" FROM " . $this->db->prefix("bb_posts") .
" WHERE approved=1 AND forum_id = ".$this->table.".forum_id".
" )".
" WHERE ".$this->table.".forum_posts <> @posts";
if(!$this->db->queryF($sql)){
xoops_error("update error: ".$sql);
}
$sql = "UPDATE ".$this->table.
" SET ".$this->table.".forum_topics = @topics =(".
" SELECT COUNT(*) AS topics ".
" FROM " . $this->db->prefix("bb_topics") .
" WHERE approved=1 AND forum_id = ".$this->table.".forum_id".
" )".
" WHERE ".$this->table.".forum_topics <> @topics";
if(!$this->db->queryF($sql)){
xoops_error("update error: ".$sql);
}
}else{
// for 4.0+
$forums = $this->getIds();
foreach($forums as $id){
if(!$obj =& $this->get($id)) continue;
$this->synchronization($obj);
unset($obj);
}
}
return true;
}
if(!is_object($object)){
$object =& $this->get(intval($object));
}
if(!$object->getVar("forum_id")) return false;
$sql = "SELECT MAX(post_id) AS last_post, COUNT(*) AS total FROM " . $xoopsDB->prefix("bb_posts") . " AS p LEFT JOIN " . $xoopsDB->prefix("bb_topics") . " AS t ON p.topic_id=t.topic_id WHERE p.approved=1 AND t.approved=1 AND p.forum_id = ".$object->getVar("forum_id");
if ( $result = $xoopsDB->query($sql)):
$last_post = 0;
$posts = 0;
if( $row = $xoopsDB->fetchArray($result) ) {
$last_post = intval($row['last_post']);
$posts = intval($row['total']);
}
if($object->getVar("forum_last_post_id") != $last_post){
$object->setVar("forum_last_post_id", $last_post);
}
if($object->getVar("forum_posts") != $posts){
$object->setVar("forum_posts", $posts);
}
endif;
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("bb_topics")." WHERE approved=1 AND forum_id = ".$object->getVar("forum_id");
if ( $result = $xoopsDB->query($sql) ):
if ( $row = $xoopsDB->fetchArray($result) ) {
if($object->getVar("forum_topics") != $row['total']){
$object->setVar("forum_topics", $row['total']);
}
}
endif;
return $this->insert($object, true);
}
function &display(&$forums_obj)
{
global $xoopsModule, $xoopsConfig, $xoopsModuleConfig, $forumImage, $myts;
include_once XOOPS_ROOT_PATH.'/modules/newbb/include/functions.php';
$posts = array();
$posts_obj = array();
foreach (array_keys($forums_obj) as $id) {
$posts[] = $forums_obj[$id]->getVar("forum_last_post_id");
}
if(!empty($posts)){
$post_handler =& xoops_getmodulehandler('post', 'newbb');
$posts_obj =& $post_handler->getAll(new Criteria("post_id", "(".implode(", ", $posts).")", "IN"), array("uid", "topic_id", "post_time", "subject", "poster_name", "icon"));
}
$users = array();
$reads = array();
foreach (array_keys($forums_obj) as $id) {
$forum_obj =& $forums_obj[$id];
if(!$forum_obj->getVar("forum_last_post_id")) continue;
if(!$post_obj =& $posts_obj[$forum_obj->getVar("forum_last_post_id")]) {
$forum_obj->assignVar("forum_last_post_id", 0);
continue;
}
$users[] = $post_obj->getVar("uid");
if($moderators = $forum_obj->getModerators()){
$users = array_merge($users, $moderators);
}
// reads
if(!empty($xoopsModuleConfig["read_mode"])){
$reads[$id] = ($xoopsModuleConfig["read_mode"] == 1)?$post_obj->getVar('post_time'):$post_obj->getVar('post_id');
}
}
$forum_isread = newbb_isRead("forum", $reads);
$users_linked = newbb_getUnameFromIds(array_unique($users), !empty($xoopsModuleConfig['show_realname']), true);
$forums_array = array();
foreach (array_keys($forums_obj) as $id) {
$forum_obj =& $forums_obj[$id];
if(!$this->getPermission($forum_obj, "access", false)) continue;
$_forum_data = array();
$_forum_data["forum_order"] = $forum_obj->getVar('forum_order');
$_forum_data["forum_id"] = $id;
$_forum_data["forum_cid"] = $forum_obj->getVar('cat_id');
$_forum_data["forum_name"] = $forum_obj->getVar('forum_name');
$_forum_data["forum_desc"] = $forum_obj->getVar('forum_desc');
$_forum_data["forum_posts"] = $forum_obj->getVar("forum_posts");
$_forum_data["forum_topics"] = $forum_obj->getVar("forum_topics");
$_forum_data["forum_type"] = $forum_obj->getVar('forum_type');
$forum_moderators = array();
$moderators = $forum_obj->getModerators();
foreach($moderators as $moderator){
$forum_moderators[] = @$users_linked[$moderator];
}
$_forum_data["forum_moderators"] = implode(", ", array_filter($forum_moderators));
if($forum_obj->getVar("forum_last_post_id")):
$post_obj =& $posts_obj[$forum_obj->getVar("forum_last_post_id")];
if(!empty($users_linked[$post_obj->getVar("uid")])){
$_forum_data["forum_lastpost_user"] = $users_linked[$post_obj->getVar("uid")];
}elseif($post_obj->getVar("poster_name")){
$_forum_data["forum_lastpost_user"] = $post_obj->getVar("poster_name");
}else{
$_forum_data["forum_lastpost_user"] = $myts->htmlSpecialChars($GLOBALS["xoopsConfig"]["anonymous"]);
}
$_forum_data['forum_lastpost_time'] = newbb_formatTimestamp($post_obj->getVar('post_time'));
$_forum_data['forum_lastpost_icon'] = '<a href="' . XOOPS_URL . '/modules/' . $xoopsModule->getVar("dirname") . '/viewtopic.php?post_id=' . $post_obj->getVar('post_id') . '&topic_id=' . $post_obj->getVar('topic_id') . '#forumpost' . $post_obj->getVar('post_id') . '">'.
'<img src="' . XOOPS_URL . '/images/subject/' . ($post_obj->getVar('icon')?$post_obj->getVar('icon'): 'icon1.gif') . '" alt="" />'.
'</a>';
endif;
if (empty($forum_isread[$id])) {
$forum_folder = ($forum_obj->getVar('forum_type') == 1) ? $forumImage['locked_forum_newposts'] : $forumImage['newposts_forum'];
} else {
$forum_folder = ($forum_obj->getVar('forum_type') == 1) ? $forumImage['locked_forum'] : $forumImage['folder_forum'];
}
$_forum_data['forum_folder'] = newbb_displayImage($forum_folder);
$forums_array[$forum_obj->getVar('parent_forum')][] = $_forum_data;
}
return $forums_array;
}
}
?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?