帖子列表php,解码discuz x1.5帖子列表forum_forumdisplay.php

943465bc9b08547e087cce7b4d49def5.png<?php

/**

*      [Discuz!] (C)2001-2099 Comsenz Inc.

*      This is NOT a freeware, use is subject to license terms

*

*      $Id: forum_forumdisplay.php 17186 2010-09-26 02:22:54Z monkey $

*/

if(!defined('IN_DISCUZ')) {

exit('Access Denied');

}

require_once libfile('function/forumlist');

if($_G['forum']['redirect']) {

dheader("Location: {$_G[forum][redirect]}");

} elseif($_G['forum']['type'] == 'group') {

dheader("Location: forum.php?gid=$_G[fid]");

} elseif(empty($_G['forum']['fid'])) {

showmessage('forum_nonexistence', NULL);

}

$_G['action']['fid'] = $_G['fid'];

$_G['gp_specialtype'] = isset($_G['gp_specialtype']) ? $_G['gp_specialtype'] : '';

$_G['gp_dateline'] = isset($_G['gp_dateline']) ? intval($_G['gp_dateline']) : 0;

$_G['gp_digest'] = isset($_G['gp_digest']) ? 1 : '';

$_G['gp_archiveid'] = isset($_G['gp_archiveid']) ? intval($_G['gp_archiveid']) : 0;

$showoldetails = isset($_G['gp_showoldetails']) ? $_G['gp_showoldetails'] : '';

switch($showoldetails) {

case 'no': dsetcookie('onlineforum', ''); break;

case 'yes': dsetcookie('onlineforum', 1, 31536000); break;

}

$_G['forum']['name'] = strip_tags($_G['forum']['name']) ? strip_tags($_G['forum']['name']) : $_G['forum']['name'];

$_G['forum']['extra'] = unserialize($_G['forum']['extra']);

if(!is_array($_G['forum']['extra'])) {

$_G['forum']['extra'] = array();

}

$threadtable_info = !empty($_G['cache']['threadtable_info']) ? $_G['cache']['threadtable_info'] : array();

//存档信息查询

$forumarchive = array();

if($_G['forum']['archive']) {

$query = DB::query("SELECT * FROM ".DB::table('forum_forum_threadtable')." WHERE fid='{$_G['fid']}'");

while($archive = DB::fetch($query)) {

$forumarchive[$archive['threadtableid']] = array(

'displayname' => htmlspecialchars($threadtable_info[$archive['threadtableid']]['displayname']),

'threads' => $archive['threads'],

'posts' => $archive['posts'],

);

if(empty($forumarchive[$archive['threadtableid']]['displayname'])) {

$forumarchive[$archive['threadtableid']]['displayname'] = lang('forum/template', 'forum_archive').' '.$archive['threadtableid'];

}

}

}

//导航

if($_G['forum']['type'] == 'forum') {

if(empty($_G['gp_archiveid'])) {

$navigation = ' '.$_G['setting']['navs'][2]['navname'].' '.$_G['forum']['name'].'';

} else {

$navigation = ' '.$_G['setting']['navs'][2]['navname'].' '.''.$_G['forum']['name'].' '.$forumarchive[$_G['gp_archiveid']]['displayname'];

}

$navtitle = $_G['forum']['name'];

} else {

$forumup = $_G['forum']['status'] == 3 ? '' : $_G['cache']['forums'][$_G['forum']['fup']]['name'];

if(empty($_G['gp_archiveid'])) {

$navigation = ' '.$_G['setting']['navs'][2]['navname'].' '.$forumup.' '.$_G['forum']['name'];

} else {

$navigation = ' '.$_G['setting']['navs'][2]['navname'].' '.$forumup.' '.''.$_G['forum']['name'].' '.$forumarchive[$_G['gp_archiveid']]['displayname'];

}

$navtitle = $_G['forum']['name'].' - '.strip_tags($forumup);

}

$metakeywords = $_G['forum']['keywords'];

if(!$metakeywords) {

$metakeywords = $_G['forum']['name'];

}

$metadescription = $_G['forum']['description'];

if(!$metadescription) {

$metadescription = $_G['forum']['name'];

}

$rssauth = $_G['rssauth'];

$rsshead = $_G['setting']['rssstatus'] ? ('\n") : '';

$metakeywords = !$_G['forum']['keywords'] ? $_G['forum']['name'] : $_G['forum']['keywords'];

$metadescription = !$_G['forum']['description'] ? $_G['forum']['name'] : strip_tags($_G['forum']['description']);

//俱乐部信息初始化,包含有标题,SEO字段,会员访问权限的判定,在线会员,管理员列表,俱乐部的缓存信息,logo,banner

if($_G['forum']['status'] == 3) {

$navtitle = $_G['forum']['name'].' - '.$_G['setting']['navs'][3]['navname'];

$metakeywords = $_G['forum']['metakeywords'];

$metadescription = $_G['forum']['description'];

$_G['seokeywords'] = $_G['setting']['seokeywords']['group'];

$_G['seodescription'] = $_G['setting']['seodescription']['group'];

$action = getgpc('action') ? $_G['gp_action'] : 'list';

require_once libfile('function/group');

$status = groupperm($_G['forum'], $_G['uid']);

if($status == -1) {

showmessage('forum_not_group', 'group.php');

} elseif($status == 1) {

showmessage('forum_group_status_off');

} elseif($status == 2) {

showmessage('forum_group_noallowed', 'forum.php?mod=group&fid='.$_G['fid']);

} elseif($status == 3) {

showmessage('forum_group_moderated', 'forum.php?mod=group&fid='.$_G['fid']);

}

$_G['forum']['icon'] = get_groupimg($_G['forum']['icon'], 'icon');

$_G['grouptypeid'] = $_G['forum']['fup'];

$_G['forum']['dateline'] = dgmdate($_G['forum']['dateline'], 'd');

$groupnav = get_groupnav($_G['forum']);

$onlinemember = grouponline($_G['fid']);

$groupmanagers = $_G['forum']['moderators'];

$groupcache = getgroupcache($_G['fid'], array('replies', 'views', 'digest', 'lastpost', 'ranking', 'activityuser', 'newuserlist'));

}

$_G['forum']['banner'] = get_forumimg($_G['forum']['banner']);

// 论坛浏览权限判断

if($_G['forum']['viewperm'] && !forumperm($_G['forum']['viewperm']) && !$_G['forum']['allowview']) {

showmessagenoperm('viewperm', $_G['fid'], $_G['forum']['formulaperm']);

} elseif($_G['forum']['formulaperm']) {

formulaperm($_G['forum']['formulaperm']);

}

// 加密板块

if($_G['forum']['password']) {

if($_G['gp_action'] == 'pwverify') {

if($_G['gp_pw'] != $_G['forum']['password']) {

showmessage('forum_passwd_incorrect', NULL);

} else {

dsetcookie('fidpw'.$_G['fid'], $_G['gp_pw']);

showmessage('forum_passwd_correct', "forum.php?mod=forumdisplay&fid=$_G[fid]");

}

} elseif($_G['forum']['password'] != $_G['cookie']['fidpw'.$_G['fid']]) {

include template('forum/forumdisplay_passwd');

exit();

}

}

//note Mysql 多服务器支持 MultiServer

if(!isset($_G['cookie']['collapse']) || strpos($_G['cookie']['collapse'], 'forum_rules_'.$_G['fid']) === FALSE) {

$collapse['forum_rules'] = '';

$collapse['forum_rulesimg'] = 'no';

} else {

$collapse['forum_rules'] = 'display: none';

$collapse['forum_rulesimg'] = 'yes';

}

//note 对应的 thread 表

$threadtableids = !empty($_G['cache']['threadtableids']) ? $_G['cache']['threadtableids'] : array();

$threadtable = $_G['gp_archiveid'] && in_array($_G['gp_archiveid'], $threadtableids) ? "forum_thread_{$_G['gp_archiveid']}" : 'forum_thread';

if($_G['setting']['allowmoderatingthread'] && $_G['uid']) {

$threadmodcount = DB::result_first("SELECT COUNT(*) FROM ".DB::table($threadtable)." WHERE fid='{$_G['fid']}' AND displayorder='-2' AND authorid='{$_G['uid']}'");

}

if($_G['forum']['modworks'] || $_G['forum']['modnewposts']) {

$_G['forum']['modnewposts'] && $_G['forum']['modworks'] = 1;

$modnum = $_G['group']['allowmodpost'] ? getcountofposts(DB::table('forum_post'), "invisible='-2' AND fid='$_G[fid]'") : 0;

$modusernum = $_G['group']['allowmoduser'] ? DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_member_validate')." WHERE status='0'") : 0;

}

$optionadd = $filterurladd = $searchsorton = '';

$quicksearchlist = array();

if(!empty($_G['forum']['threadsorts']['types'])) {

require_once libfile('function/threadsort');

$showpic = intval($_G['gp_showpic']);

$templatearray = $sortoptionarray = array();

foreach($_G['forum']['threadsorts']['types'] as $stid => $sortname) {

loadcache(array('threadsort_option_'.$stid, 'threadsort_template_'.$stid));

$templatearray[$stid] = $_G['cache']['threadsort_template_'.$stid]['subject'];

$sortoptionarray[$stid] = $_G['cache']['threadsort_option_'.$stid];

}

if(!empty($_G['forum']['threadsorts']['defaultshow']) && empty($_G['gp_sortid']) && empty($_G['gp_sortall'])) {

$_G['gp_sortid'] = $_G['forum']['threadsorts']['defaultshow'];

$filterurladd = '&filter=sort';

}

$_G['gp_sortid'] = $_G['gp_sortid'] ? $_G['gp_sortid'] : $_G['gp_searchsortid'];

if(isset($_G['gp_sortid']) && $_G['forum']['threadsorts']['types'][$_G['gp_sortid']]) {

$searchsortoption = $sortoptionarray[$_G['gp_sortid']];

$quicksearchlist = quicksearch($searchsortoption);

}

}

$moderatedby = $_G['forum']['status'] != 3 ? moddisplay($_G['forum']['moderators'], 'forumdisplay') : '';

$_G['gp_highlight'] = empty($_G['gp_highlight']) ? '' : htmlspecialchars($_G['gp_highlight']);

//note 论坛是否自动关闭

if($_G['forum']['autoclose']) {

$closedby = $_G['forum']['autoclose'] > 0 ? 'dateline' : 'lastpost';

$_G['forum']['autoclose'] = abs($_G['forum']['autoclose']) * 86400;

}

//处理子论坛

$subexists = 0;

foreach($_G['cache']['forums'] as $sub) {

if($sub['type'] == 'sub' && $sub['fup'] == $_G['fid'] && (!$_G['setting']['hideprivate'] || !$sub['viewperm'] || forumperm($sub['viewperm']) || strstr($sub['users'], "\t$_G[uid]\t"))) {

if(!$sub['status']) {

continue;

}

$subexists = 1;

$sublist = array();

$sql = !empty($_G['member']['accessmasks']) ? "SELECT f.fid, f.fup, f.type, f.name, f.threads, f.posts, f.todayposts, f.lastpost, f.domain, ff.description, ff.moderators, ff.icon, ff.viewperm, ff.extra, ff.redirect, a.allowview FROM ".DB::table('forum_forum')." f

LEFT JOIN ".DB::table('forum_forumfield')." ff ON ff.fid=f.fid

LEFT JOIN ".DB::table('forum_access')." a ON a.uid='$_G[uid]' AND a.fid=f.fid

WHERE fup='$_G[fid]' AND status>'0' AND type='sub' ORDER BY f.displayorder"

: "SELECT f.fid, f.fup, f.type, f.name, f.threads, f.posts, f.todayposts, f.lastpost, f.domain, ff.description, ff.moderators, ff.icon, ff.viewperm, ff.extra, ff.redirect FROM ".DB::table('forum_forum')." f

LEFT JOIN ".DB::table('forum_forumfield')." ff USING(fid)

WHERE f.fup='$_G[fid]' AND f.status>'0' AND f.type='sub' ORDER BY f.displayorder";

$query = DB::query($sql);

while($sub = DB::fetch($query)) {

$sub['extra'] = unserialize($sub['extra']);

if(!is_array($sub['extra'])) {

$sub['extra'] = array();

}

if(forum($sub)) {

$sub['orderid'] = count($sublist);

$sublist[] = $sub;

}

}

break;

}

}

if(!empty($_G['gp_archiveid']) && in_array($_G['gp_archiveid'], $threadtableids)) {

$subexists = 0;

}

if($subexists) {

if($_G['forum']['forumcolumns']) {

$_G['forum']['forumcolwidth'] = (floor(100 / $_G['forum']['forumcolumns']) - 0.1).'%';

$_G['forum']['subscount'] = count($sublist);

$_G['forum']['endrows'] = '';

if($colspan = $_G['forum']['subscount'] % $_G['forum']['forumcolumns']) {

while(($_G['forum']['forumcolumns'] - $colspan) > 0) {

$_G['forum']['endrows'] .= '

 ';

$colspan ++;

}

$_G['forum']['endrows'] .= '';

}

}

if(empty($_G['cookie']['collapse']) || strpos($_G['cookie']['collapse'], 'subforum_'.$_G['fid']) === FALSE) {

$collapse['subforum'] = '';

$collapseimg['subforum'] = 'collapsed_no.gif';

} else {

$collapse['subforum'] = 'display: none';

$collapseimg['subforum'] = 'collapsed_yes.gif';

}

}

$page = $_G['page'];

$subforumonly = $_G['forum']['simple'] & 1;

$simplestyle = !$_G['forum']['allowside'] || $page > 1 ? true : false;

if($subforumonly) {

$_G['setting']['fastpost'] = false;

$forummenu = '';

if($_G['setting']['forumjump']) {

$forummenu = forumselect(FALSE, 1);

}

if($_G['gp_archiver']) {

include loadarchiver('forum/forumdisplay');

} else {

include template('diy:forum/forumdisplay:'.$_G['fid']);

}

exit();

}

$page = $_G['setting']['threadmaxpages'] && $page > $_G['setting']['threadmaxpages'] ? 1 : $page;

$start_limit = ($page - 1) * $_G['tpp'];

//note 版主推荐主题处理

if($_G['forum']['modrecommend'] && $_G['forum']['modrecommend']['open']) {

$_G['forum']['recommendlist'] = recommendupdate($_G['fid'], $_G['forum']['modrecommend'], '', 1);

}

$recommendgroups = array();

if($_G['forum']['status'] != 3) {

loadcache('forumrecommend');

$recommendgroups = $_G['cache']['forumrecommend'][$_G['fid']];

}

//公告

if(!$simplestyle || !$_G['forum']['allowside'] && $page == 1) {

if($_G['cache']['announcements_forum']) {

$announcement = $_G['cache']['announcements_forum'];

$announcement['starttime'] = dgmdate($announcement['starttime'], 'd');

} else {

$announcement = NULL;

}

}

/*帖子的处理过程*/

$filteradd = $sortoptionurl = $sp = '';

$sorturladdarray = $selectadd = array();

//排序

$forumdisplayadd = array('orderby' => '');

//特需主题数组

$specialtype = array('poll' => 1, 'trade' => 2, 'reward' => 3, 'activity' => 4, 'debate' => 5);

//刷选字段数组

$filterfield = array('digest', 'recommend', 'typeid', 'sortid', 'special', 'dateline', 'specialtype', 'author', 'reply', 'view', 'lastpost', 'heat', 'page', 'moderate');

//将filterfield付给forumdisplayadd

foreach ($filterfield as $v) {

$forumdisplayadd[$v] = '';

}

//刷选参数

$filter = isset($_G['gp_filter']) && in_array($_G['gp_filter'], $filterfield) ? $_G['gp_filter'] : '';

if($filter) {

if($query_string = $_SERVER['QUERY_STRING']) {

$query_string = substr($query_string, (strpos($query_string, "&") + 1));

parse_str($query_string, $geturl);

$geturl = daddslashes($geturl, 1);

if($geturl && is_array($geturl)) {

$issort = isset($_G['gp_sortid']) && isset($_G['forum']['threadsorts']['types'][$_G['gp_sortid']]) && $quicksearchlist ? TRUE : FALSE;

$selectadd = $issort ? $geturl : array();

foreach($filterfield as $option) {

foreach($geturl as $field => $value) {

if(in_array($field, $filterfield) && $option != $field && $field != 'page') {

$forumdisplayadd[$option] .= '&'.$field.'='.$value;

}

}

if($issort) {

$sfilterfield = array_merge(array('filter', 'sortid', 'orderby', 'fid'), $filterfield);

foreach($geturl as $soption => $value) {

$forumdisplayadd[$option] .= !in_array($soption, $sfilterfield) ? "&$soption=$value" : '';

}

}

}

if($issort && is_array($quicksearchlist)) {

foreach($quicksearchlist as $option) {

$identifier = $option['identifier'];

foreach($geturl as $option => $value) {

$sorturladdarray[$identifier] .= !in_array($option, array('filter', 'sortid', 'orderby', 'fid', 'searchsort', $identifier)) ? "&$option=$value" : '';

}

}

}

foreach($geturl as $field => $value) {

if(in_array($field, $filterfield) && $field != 'page') {

$filteradd .= $sp;

if($field == 'digest') {

$filteradd .= "AND t.digest>'0'";

} elseif($field == 'recommend' && $_G['setting']['recommendthread']['status']) {

$filteradd .= "AND t.recommends>'".intval($_G['setting']['recommendthread']['iconlevels'][0])."'";

} elseif($field == 'specialtype') {

$filteradd .= "AND t.special='$specialtype[$value]'";

} elseif($field == 'dateline') {

$filteradd .= $value ? "AND t.dateline>='".(TIMESTAMP - $value)."'" : '';

} else {

$filteradd .= "AND t.$field='$value'";

}

$sp = ' ';

}

}

}

}

$simplestyle = true;

}

//排序字段

if(!empty($_G['gp_orderby']) && in_array($_G['gp_orderby'], array('lastpost', 'dateline', 'replies', 'views', 'recommends', 'heats'))) {

$forumdisplayadd['orderby'] .= '&orderby='.$_G['gp_orderby'];

} else {

$_G['gp_orderby'] = isset($_G['cache']['forums'][$_G['fid']]['orderby']) ? $_G['cache']['forums'][$_G['fid']]['orderby'] : 'lastpost';

}

//排序

if(!empty($_G['gp_ascdesc']) && in_array($ascdesc, array('ASC', 'DESC'))) {

$forumdisplayadd['ascdesc'] .= '&ascdesc='.$_G['gp_ascdesc'];

} else {

$_G['gp_ascdesc'] = isset($_G['cache']['forums'][$_G['fid']]['ascdesc']) ? $_G['cache']['forums'][$_G['fid']]['ascdesc'] : 'DESC';

}

$check = array();

$check[$filter] = $check[$_G['gp_orderby']] = $check[$_G['gp_ascdesc']] = 'selected="selected"';

if(($_G['forum']['status'] != 3 && $_G['forum']['allowside']) || !empty($_G['forum']['threadsorts']['templatelist'])) {

updatesession();

$onlinenum = getonlinenum($_G['fid']);

//note 论坛在线状态 0 不显示 1 仅在首页显示 2 仅在分论坛显示 3 在首页和分论坛显示

if(!IS_ROBOT && ($_G['setting']['whosonlinestatus'] == 2 || $_G['setting']['whosonlinestatus'] == 3)) {

$_G['setting']['whosonlinestatus'] = 1;

$detailstatus = $showoldetails == 'yes' || (((!isset($_G['cookie']['onlineforum']) && !$_G['setting']['whosonline_contract']) || $_G['cookie']['onlineforum']) && !$showoldetails);

if($detailstatus) {

$actioncode = lang('forum/action');

$whosonline = array();

$forumname = strip_tags($_G['forum']['name']);

//note 取得在线详细信息

$query = DB::query("SELECT uid, groupid, username, invisible, lastactivity FROM ".DB::table('common_session')." WHERE uid>'0' AND fid='$_G[fid]' AND invisible='0' ORDER BY lastactivity DESC LIMIT 12");

$_G['setting']['whosonlinestatus'] = 1;

while($online = DB::fetch($query)) {

if($online['uid']) {

$online['icon'] = isset($_G['cache']['onlinelist'][$online['groupid']]) ? $_G['cache']['onlinelist'][$online['groupid']] : $_G['cache']['onlinelist'][0];

} else {

$online['icon'] = $_G['cache']['onlinelist'][7];

$online['username'] = $_G['cache']['onlinelist']['guest'];

}

$online['lastactivity'] = dgmdate($online['lastactivity'], 't');

$whosonline[] = $online;

}

unset($online);

}

} else {

$_G['setting']['whosonlinestatus'] = 0;

}

}

if($_G['forum']['threadsorts']['types'] && $sortoptionarray && ($_G['gp_searchoption'] || $_G['gp_searchsort'])) {

$sortid = intval($_G['gp_sortid']);

if($_G['gp_searchoption']){

$forumdisplayadd['page'] = '&sortid='.$sortid;

foreach($_G['gp_searchoption'] as $optionid => $option) {

$identifier = $sortoptionarray[$sortid][$optionid]['identifier'];

$forumdisplayadd['page'] .= $option['value'] ? "&searchoption[$optionid][value]=$option[value]&searchoption[$optionid][type]=$option[type]" : '';

}

}

if($searchsorttids = sortsearch($_G['gp_sortid'], $sortoptionarray, $_G['gp_searchoption'], $selectadd, $_G['fid'])) {

$filteradd .= "AND t.tid IN (".dimplode($searchsorttids).")";

}

}

if(empty($filter) && empty($_G['gp_sortid']) && empty($_G['gp_archiveid']) && empty($_G['forum']['archive'])) {

$_G['forum_threadcount'] = $_G['forum']['threads'];

} elseif(!$_G['gp_moderate']) {

$indexadd = '';

if(strexists($filteradd, "t.digest>'0'")) {

$indexadd = " FORCE INDEX (digest) ";

}

$_G['forum_threadcount'] = DB::result_first("SELECT COUNT(*) FROM ".DB::table($threadtable)." t $indexadd WHERE t.fid='{$_G['fid']}' $filteradd AND t.displayorder>='0'");

}

//note 全局置顶

$thisgid = $_G['forum']['type'] == 'forum' ? $_G['forum']['fup'] : (!empty($_G['cache']['forums'][$_G['forum']['fup']]['fup']) ? $_G['cache']['forums'][$_G['forum']['fup']]['fup'] : 0);

$forumstickycount = $stickycount = $stickytids = 0;

if($_G['setting']['globalstick'] && $_G['forum']['allowglobalstick']) {

$stickytids = $_G['cache']['globalstick']['global']['tids'].(empty($_G['cache']['globalstick']['categories'][$thisgid]['count']) ? '' : ','.$_G['cache']['globalstick']['categories'][$thisgid]['tids']);

$stickytids = trim($stickytids, ', ');

if ($stickytids === ''){

$stickytids = '0';

}

//note 全局和分类置顶

if($_G['forum']['status'] != 3) {

$stickycount = $_G['cache']['globalstick']['global']['count'];

if(!empty($_G['cache']['globalstick']['categories'][$thisgid])) {

$stickycount += $_G['cache']['globalstick']['categories'][$thisgid]['count'];

}

}

}

//note 多版块置顶

$forumstickytids = array();

loadcache('forumstick');

$_G['cache']['forumstick'][$_G['fid']] = isset($_G['cache']['forumstick'][$_G['fid']]) ? $_G['cache']['forumstick'][$_G['fid']] : array();

$forumstickycount = count($_G['cache']['forumstick'][$_G['fid']]);

foreach($_G['cache']['forumstick'][$_G['fid']] as $forumstickthread) {

$forumstickytids[] = $forumstickthread['tid'];

}

if(!empty($forumstickytids)) {

$forumstickytids = dimplode($forumstickytids);

$stickytids .= ", $forumstickytids";

}

$stickycount += $forumstickycount;

//note 如果存在$digest 并且开启全局置顶,那么页数为 $threadcount + $stickycount,也就是包含了置顶帖

$filterbool = !empty($filter) && in_array($filter, $filterfield);

$_G['forum_threadcount'] += $filterbool ? 0 : $stickycount;

$forumdisplayadd['page'] = !empty($forumdisplayadd['page']) ? $forumdisplayadd['page'] : '';

$multipage_archive = $_G['gp_archiveid'] && in_array($_G['gp_archiveid'], $threadtableids) ? "&archiveid={$_G['gp_archiveid']}" : '';

$multipage = multi($_G['forum_threadcount'], $_G['tpp'], $page, "forum.php?mod=forumdisplay&fid=$_G[fid]".($filter ? "&filter=$filter" : '')."$forumdisplayadd[orderby]$forumdisplayadd