修改出错的forumdisplay.php
- <?php
- /*
- [Discuz!] (C)2001-2006 Comsenz Inc.
- This is NOT a freeware, use is subject to license terms
- $RCSfile: forumdisplay.php,v $
- $Revision: 1.48.2.1 $
- $Date: 2006/09/01 06:15:00 $
- */
- define('CURSCRIPT', 'forumdisplay');
- require_once './include/common.inc.php';
- require_once DISCUZ_ROOT.'./include/forum.func.php';
- $discuz_action = 2;
- if($forum['redirect']) {
- header("Location: $forum[redirect]");
- exit();
- }
- if(isset($showoldetails)) {
- switch($showoldetails) {
- case 'no': dsetcookie('onlineforum', 0, 86400 * 365); break;
- case 'yes': dsetcookie('onlineforum', 1, 86400 * 365); break;
- }
- } else {
- $showoldetails = false;
- }
- if(!$forum['fid'] || $forum['type'] == 'group') {
- showmessage('forum_nonexistence', NULL, 'HALTED');
- }
- if($forum['type'] == 'forum') {
- $navigation = "» $forum[name]";
- $navtitle = strip_tags($forum['name']);
- } else {
- $forumup = $_DCACHE['forums'][$forum['fup']]['name'];
- $navigation = "» <a href="forumdisplay.php?fid=$forum[fup]">$forumup</a> » $forum[name]";
- $navtitle = strip_tags($forum['name']).' - '.strip_tags($forumup);
- }
- $navtitle .= ' - ';
- if($forum['password'] && $action == 'pwverify') {
- if($pw != $forum['password']) {
- showmessage('forum_passwd_incorrect', NULL, 'HALTED');
- } else {
- dsetcookie('fidpw'.$fid, $pw);
- showmessage('forum_passwd_correct', "forumdisplay.php?fid=$fid");
- }
- }
- if($forum['rules']) {
- if(empty($_COOKIE['discuz_collapse']) || strpos($_COOKIE['discuz_collapse'], 'rules_'.$forum['fid'].' ') === FALSE) {
- $rulescollapseimg = 'collapsed_no.gif';
- $collapserules = '';
- } else {
- $rulescollapseimg = 'collapsed_yes.gif';
- $collapserules = 'display: none';
- }
- $forum['rules'] = nl2br($forum['rules']);
- }
- if($forum['viewperm'] && !forumperm($forum['viewperm']) && !$forum['allowview']) {
- showmessage('forum_nopermission', NULL, 'NOPERM');
- }
- if(!empty($forum['password']) && $forum['password'] != $_DCOOKIE['fidpw'.$fid]) {
- include template('forumdisplay_passwd');
- exit();
- }
- $moderatedby = moddisplay($forum['moderators'], 'forumdisplay');
- if($forum['autoclose']) {
- $closedby = $forum['autoclose'] > 0 ? 'dateline' : 'lastpost';
- $forum['autoclose'] = abs($forum['autoclose']) * 86400;
- }
- $subexists = 0;
- foreach($_DCACHE['forums'] as $sub) {
- if($sub['type'] == 'sub' && $sub['fup'] == $fid && (!$hideprivate || !$sub['viewperm'] || forumperm($sub['viewperm']) || strstr($sub['users'], "\t$discuz_uid\t"))) {
- $subexists = 1;
- $sublist = array();
- $sql = $accessmasks ? "SELECT f.fid, f.fup, f.type, f.name, f.threads, f.posts, f.todayposts, f.lastpost, ff.description, ff.moderators, ff.icon, ff.viewperm, a.allowview FROM {$tablepre}forums f
- LEFT JOIN {$tablepre}forumfields ff ON ff.fid=f.fid
- LEFT JOIN {$tablepre}access a ON a.uid='$discuz_uid' AND a.fid=f.fid
- WHERE fup='$fid' AND status='1' AND type='sub' ORDER BY f.displayorder"
- : "SELECT f.fid, f.fup, f.type, f.name, f.threads, f.posts, f.todayposts, f.lastpost, ff.description, ff.moderators, ff.icon, ff.viewperm FROM {$tablepre}forums f
- LEFT JOIN {$tablepre}forumfields ff USING(fid)
- WHERE f.fup='$fid' AND f.status='1' AND f.type='sub' ORDER BY f.displayorder";
- $query = $db->query($sql);
- while($sub = $db->fetch_array($query)) {
- if(forum($sub)) {
- $sub['orderid'] = count($sublist);
- $sublist[] = $sub;
- }
- }
- break;
- }
- }
- if($subexists && $forum['forumcolumns']) {
- $forum['forumcolwidth'] = floor(100 / $forum['forumcolumns']).'%';
- $forum['subscount'] = count($sublist);
- $forum['endrows'] = '';
- if($colspan = $forum['subscount'] % $forum['forumcolumns']) {
- while(($forum['forumcolumns'] - $colspan) > 0) {
- $forum['endrows'] .= '<td class="altbg2"></td>';
- $colspan ++;
- }
- $forum['endrows'] .= '</tr>';
- }
- }
- $page = empty($page) || !ispage($page) || ($threadmaxpages && $page > $threadmaxpages) ? 1 : $page;
- $start_limit = ($page - 1) * $tpp;
- if($page == 1) {
- if($_DCACHE['announcements_forum']) {
- $announcement = $_DCACHE['announcements_forum'];
- $announcement['starttime'] = gmdate($dateformat, $announcement['starttime'] + ($timeoffset * 3600));
- } else {
- $announcement = NULL;
- }
- }
- $forumdisplayadd = $filteradd = '';
- if(isset($filter)) {
- if($filter == 'digest') {
- $forumdisplayadd .= '&filter=digest';
- $filteradd = "AND digest>'0'";
- } elseif($filter == 'type' && $forum['threadtypes']['listable'] && $typeid && isset($forum['threadtypes']['types'][$typeid])) {
- $forumdisplayadd .= "&filter=type&typeid=$typeid";
- $filteradd = "AND typeid='$typeid'";
- } elseif(preg_match("/^\d+$/", $filter)) {
- $forumdisplayadd .= "&filter=$filter";
- $filteradd = $filter ? "AND lastpost>='".($timestamp - $filter)."'" : '';
- } elseif($filter == 'poll') {
- $forumdisplayadd .= "&filter=$filter";
- $filteradd = 'AND special = 1';
- } elseif($filter == 'trade') {
- $forumdisplayadd .= "&filter=$filter";
- $filteradd = 'AND special = 2';
- } elseif($filter == 'reward') {
- $forumdisplayadd .= "&filter=$filter";
- $filteradd = 'AND special = 3';
- } elseif($filter == 'activity') {
- $forumdisplayadd .= "&filter=$filter";
- $filteradd = 'AND special = 4';
- } else {
- $filter = '';
- }
- } else {
- $filter = '';
- }
- isset($orderby) && in_array($orderby, array('dateline', 'replies', 'views')) ? $forumdisplayadd .= "&orderby=$orderby" : $orderby = 'lastpost';
- isset($ascdesc) && $ascdesc == 'ASC' ? $forumdisplayadd .= '&ascdesc=ASC' : $ascdesc = 'DESC';
- $dotadd1 = $dotadd2 = '';
- if($dotfolders && $discuz_uid) {
- $dotadd1 = 'DISTINCT p.authorid AS dotauthor, ';
- $dotadd2 = "LEFT JOIN {$tablepre}posts p ON (t.tid=p.tid AND p.authorid='$discuz_uid')";
- }
- if($whosonlinestatus == 2 || $whosonlinestatus == 3) {
- $whosonlinestatus = 1;
- $onlineinfo = explode("\t", $onlinerecord);
- $detailstatus = ((!isset($_DCOOKIE['onlineforum']) && $onlineinfo[0] < 500) || (!empty($_DCOOKIE['onlineforum']) || $showoldetails == 'yes')) && $showoldetails != 'no';
- if($detailstatus) {
- updatesession();
- @include language('actions');
- $whosonline = array();
- $forumname = strip_tags($forum['name']);
- $guestwhere = isset($_DCACHE['onlinelist'][7]) ? '' : "uid>'0' AND";
- $query = $db->query("SELECT uid, groupid, username, invisible, lastactivity, action FROM {$tablepre}sessions WHERE $guestwhere fid='$fid' AND invisible='0'");
- if($db->num_rows($query)) {
- $whosonlinestatus = 1;
- while($online = $db->fetch_array($query)) {
- if($online['uid']) {
- $online['icon'] = isset($_DCACHE['onlinelist'][$online['groupid']]) ? $_DCACHE['onlinelist'][$online['groupid']] : $_DCACHE['onlinelist'][0];
- $online['action'] = $actioncode[$online['action']];
- $online['lastactivity'] = gmdate($timeformat, $online['lastactivity'] + ($timeoffset * 3600));
- $whosonline[] = $online;
- } else {
- if(isset($_DCACHE['onlinelist'][7])) {
- $online['icon'] = $_DCACHE['onlinelist'][7];
- $online['username'] = 'Guest';
- $online['fid'] = $online['fid'] ? $forumname[$online['fid']] : 0;
- $online['action'] = $actioncode[$online['action']];
- $online['lastactivity'] = gmdate($timeformat, $online['lastactivity'] + ($timeoffset * 3600));
- $whosonline[] = $online;
- }
- }
- }
- }
- unset($online);
- }
- } else {
- $whosonlinestatus = 0;
- }
- if($discuz_uid && $newpm) {
- require_once DISCUZ_ROOT.'./include/pmprompt.inc.php';
- }
- if(empty($filter)) {
- $threadcount = $forum['threads'];
- } else {
- $query = $db->query("SELECT COUNT(*) FROM {$tablepre}threads WHERE fid='$fid' $filteradd AND displayorder>='0'");
- $threadcount = $db->result($query, 0);
- }
- if($globalstick) {
- $thisgid = $forum['type'] == 'forum' ? $forum['fup'] : $_DCACHE['forums'][$forum['fup']]['fup'];
- $stickytids = $_DCACHE['globalstick']['global']['tids'].(empty($_DCACHE['globalstick']['categories'][$thisgid]['count']) ? '' : ','.$_DCACHE['globalstick']['categories'][$thisgid]['tids']);
- $stickycount = $_DCACHE['globalstick']['global']['count'] + $_DCACHE['globalstick']['categories'][$thisgid]['count'];
- } else {
- $thisgid = $stickycount = $stickytids = 0;
- }
- $filterbool = !empty($filter) && in_array($filter, array('digest', 'type', 'activity', 'poll', 'trade', 'reward'));
- $threadcount += $filterbool ? 0 : $stickycount;
- $multipage = multi($threadcount, $tpp, $page, "forumdisplay.php?fid=$fid$forumdisplayadd", $threadmaxpages);
- $extra = rawurlencode("page=$page$forumdisplayadd");
- $separatepos = 0;
- $threadlist = array();
- $colorarray = array('', 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple', 'gray');
- $displayorderadd = !$filterbool && $stickycount ? 't.displayorder IN (0, 1)' : 't.displayorder>=0';
- if(($start_limit && $start_limit > $stickycount) || !$stickycount || $filterbool) {
- $querysticky = '';
- $query = $db->query("SELECT $dotadd1 t.*, mf.avatar FROM {$tablepre}threads t $dotadd2
- LEFT JOIN {$tablepre}memberfields mf ON(mf.uid = t.authorid) LEFT JOIN {$tablepre}posts b USING(tid, dateline)
- WHERE t.fid='$fid' $filteradd AND $displayorderadd
- ORDER BY t.displayorder DESC, t.$orderby $ascdesc
- LIMIT ".($filterbool ? $start_limit : $start_limit - $stickycount).", $tpp");
- } else {
- $querysticky = $db->query("SELECT $dotadd1 t.*, mf.avatar FROM {$tablepre}threads t $dotadd2
- LEFT JOIN {$tablepre}memberfields mf ON(mf.uid = t.authorid) LEFT JOIN {$tablepre}posts b USING(tid, dateline)
- WHERE t.tid IN ($stickytids) AND t.displayorder IN (2, 3)
- ORDER BY displayorder DESC, $orderby $ascdesc
- LIMIT $start_limit, ".($stickycount - $start_limit < $tpp ? $stickycount - $start_limit : $tpp));
- if($tpp - $stickycount + $start_limit > 0) {
- $query = $db->query("SELECT $dotadd1 t.*, mf.avatar FROM {$tablepre}threads t $dotadd2
- LEFT JOIN {$tablepre}memberfields mf ON(mf.uid = t.authorid) LEFT JOIN {$tablepre}posts b USING(tid, dateline)
- WHERE t.fid='$fid' $filteradd AND $displayorderadd
- ORDER BY displayorder DESC, $orderby $ascdesc
- LIMIT ".($tpp - $stickycount + $start_limit));
- } else {
- $query = '';
- }
- }
- $ppp = $forum['threadcaches'] ? $_DCACHE['settings']['postperpage'] : $ppp;
- while(($querysticky && $thread = $db->fetch_array($querysticky)) || ($query && $thread = $db->fetch_array($query))) {
- $thread['icon'] = isset($_DCACHE['icons'][$thread['iconid']]) ? '<img src="'.SMDIR.'/'.$_DCACHE['icons'][$thread['iconid']].'" alt="" />' : ' ';
- $thread['lastposterenc'] = rawurlencode($thread['lastposter']);
- if(preg_match("/^(customavatars\/.+?)$/i", $thread['avatar'])) {
- $thread['avatarx'] = str_replace("customavatars/", "customavatars/s/", $thread['avatar']);
- }elseif (preg_match("/^(images\/avatars\/.+?)$/i",$thread['avatar'])) {
- $thread['avatarx'] = str_replace("images/avatars/", "images/avatars/s/", $thread['avatar']);
- } else { $thread['avatarx'] = 'images/avatars/s/noavatar.gif';}
- $thread['typeid'] = $thread['typeid'] && !empty($forum['threadtypes']['prefix']) && isset($forum['threadtypes']['types'][$thread['typeid']]) ?
- '['.$forum['threadtypes']['types'][$thread['typeid']].'] ' : '';
- $thread[message] = cutstr($thread[message],200);
- $topicposts = $thread['replies'] + 1;
- if($topicposts > $ppp) {
- $pagelinks = '';
- $topicpages = ceil($topicposts / $ppp);
- for($i = 1; $i <= $topicpages; $i++) {
- $pagelinks .= "<a href="viewthread.php?tid=$thread[tid]&extra=$extra&page=$i">$i</a> ";
- if($i == 6) {
- $i = $topicpages + 1;
- }
- }
- if($topicpages > 6) {
- $pagelinks .= " .. <a href="viewthread.php?tid=$thread[tid]&page=$topicpages&extra=$extra">$topicpages</a> ";
- }
- $thread['multipage'] = ' <img src="'.IMGDIR.'/multipage.gif" border="0" alt="" /> '.$pagelinks;
- } else {
- $thread['multipage'] = '';
- }
- if($thread['highlight']) {
- $string = sprintf('%02d', $thread['highlight']);
- $stylestr = sprintf('%03b', $string[0]);
- $thread['highlight'] = ' style="';
- $thread['highlight'] .= $stylestr[0] ? 'font-weight: bold;' : '';
- $thread['highlight'] .= $stylestr[1] ? 'font-style: italic;' : '';
- $thread['highlight'] .= $stylestr[2] ? 'text-decoration: underline;' : '';
- $thread['highlight'] .= $string[1] ? 'color: '.$colorarray[$string[1]] : '';
- $thread['highlight'] .= '"';
- } else {
- $thread['highlight'] = '';
- }
- if(!$thread['avatar']){
- $thread['avatarx'] = 'images/avatars/s/noavatar.gif';
- }
- $thread['moved'] = 0;
- if($thread['closed'] || ($forum['autoclose'] && $timestamp - $thread[$closedby] > $forum['autoclose'])) {
- $thread['new'] = 0;
- if($thread['closed'] > 1) {
- $thread['moved'] = $thread['tid'];
- $thread['tid'] = $thread['closed'];
- $thread['replies'] = '-';
- $thread['views'] = '-';
- }
- $thread['folder'] = 'lock_folder.gif';
- } else {
- $thread['folder'] = 'folder.gif';
- if($lastvisit < $thread['lastpost'] && (empty($_DCOOKIE['oldtopics']) || strpos($_DCOOKIE['oldtopics'], 'D'.$thread['tid'].'D') === FALSE)) {
- $thread['new'] = 1;
- $thread['folder'] = 'red_'.$thread['folder'];
- } else {
- $thread['new'] = 0;
- }
- if($thread['replies'] > $thread['views']) {
- $thread['views'] = $thread['replies'];
- }
- if($thread['replies'] >= $hottopic) {
- $thread['folder'] = 'hot_'.$thread['folder'];
- }
- if($dotfolders && $thread['dotauthor'] == $discuz_uid && $discuz_uid) {
- $thread['folder'] = 'dot_'.$thread['folder'];
- }
- }
- $thread['dateline'] = gmdate($dateformat, $thread['dateline'] + $timeoffset * 3600);
- $thread['lastpost'] = gmdate("$dateformat $timeformat", $thread['lastpost'] + $timeoffset * 3600);
- if($thread['displayorder'] > 0) {
- $separatepos++;
- }
- $threadlist[] = $thread;
- }
- $separatepos = $separatepos ? $separatepos + 1 : ($announcement ? 1 : 0);
- $check = array();
- $check[$filter] = $check[$orderby] = $check[$ascdesc] = 'selected="selected"';
- $visitedforums = $visitedforums ? visitedforums() : '';
- $forumselect = $forummenu = '';
- if($forumjump && empty($jsmenu[1])) {
- $forumselect = forumselect();
- }
- $typeselect = typeselect($typeid);
- $usesigcheck = $discuz_uid && $sigstatus ? 'checked' : '';
- $allowpost = (!$forum['postperm'] && $allowpost) || ($forum['postperm'] && forumperm($forum['postperm'])) || !empty($forum['allowpost']);
- $showpoll = $showtrade = $showreward = $showactivity = 0;
- if($forum['allowpostspecial']) {
- $showpoll = substr(sprintf('%04b', $forum['allowpostspecial']), -1, 1);
- $showtrade = substr(sprintf('%04b', $forum['allowpostspecial']), -2, 1);
- $showreward = substr(sprintf('%04b', $forum['allowpostspecial']), -3, 1) && isset($extcredits[$creditstrans]);
- $showactivity = substr(sprintf('%04b', $forum['allowpostspecial']), -4, 1);
- }
- if($allowpost) {
- $allowpostpoll = $allowpostpoll && $showpoll;
- $allowposttrade = $allowposttrade && $showtrade;
- $allowpostreward = $allowpostreward && $showreward && isset($extcredits[$creditstrans]);
- $allowpostactivity = $allowpostactivity && $showactivity;
- }
- $searchboxstatus = substr(sprintf('%03b', $qihoo_searchbox), -2, 1);
- if($fastpost && $allowpost) {
- $editorid = 'fastpost';
- $smcols = $smcols ? $smcols : 4;
- $smileyinsert = $smileyinsert && is_array($_DCACHE['smilies_display']) ? 1 : 0;
- $smilies = $smileyinsert ? smiliestable($_DCACHE['smilies_display'], $smcols, 4, $editorid) : '';
- $moresmilies = $smileyinsert && count($_DCACHE['smilies_display']) > $smcols * 4 ? 1 : 0;
- }
- $threadsticky = explode(',', $threadsticky);
- $forumselect = $forummenu = '';
- if($forumjump) {
- if($jsmenu[1]) {
- $forummenu = forumselect(FALSE, 1);
- } else {
- $forumselect = forumselect();
- }
- }
- include template('forumdisplay');
- ?>
复制代码 |