query("SELECT * FROM {$tablepre}threads t WHERE tid='$tid' AND displayorder>='0'"); $lastmod = array(); if(!$thread = $db->fetch_array($query)) { $tid = intval($_GET['tid']); if($supe_status && !empty($supe_fromsupesite) && md5("$discuz_auth_key-$tid") == $supe_fromsupesite) { $db->query("UPDATE {$supe_tablepre}spaceitems SET tid='0' WHERE tid='$tid'"); } showmessage('thread_nonexistence'); } elseif($thread['moderated']) { $query = $db->query("SELECT uid AS moduid, username AS modusername, dateline AS moddateline, action AS modaction FROM {$tablepre}threadsmod WHERE tid='$tid' ORDER BY dateline DESC LIMIT 1"); if($lastmod = $db->fetch_array($query)) { include language('modactions'); $lastmod['modusername'] = $lastmod['modusername'] ? $lastmod['modusername'] : 'System'; $lastmod['moddateline'] = gmdate("$dateformat $timeformat", $lastmod['moddateline'] + $timeoffset * 3600); $lastmod['modaction'] = $modactioncode[$lastmod['modaction']]; } else { $db->query("UPDATE {$tablepre}threads SET moderated='0' WHERE tid='$tid'", 'UNBUFFERED'); } } $supe_fromdiscuz = $supe_status && $thread['itemid'] ? md5("$discuz_auth_key-$thread[itemid]") : ''; $codecount = 0; $thread['subjectenc'] = rawurlencode($thread['subject']); $oldtopics = isset($_DCOOKIE['oldtopics']) ? $_DCOOKIE['oldtopics'] : 'D'; if(strpos($oldtopics, 'D'.$tid.'D') === FALSE) { $oldtopics = 'D'.$tid.$oldtopics; if(strlen($oldtopics) > 3072) { $oldtopics = preg_replace("((D\d+)+D).*$", "\\1", substr($oldtopics, 0, 3072)); } dsetcookie('oldtopics', $oldtopics, 3600); } if($lastvisit < $thread['lastpost'] && (!isset($_DCOOKIE['fid'.$fid]) || $thread['lastpost'] > $_DCOOKIE['fid'.$fid])) { dsetcookie('fid'.$fid, $thread['lastpost'], 3600); } $navigation = "» $forum[name] » $thread[subject]"; $navtitle = $thread['subject'].' - '.strip_tags($forum['name']); if($forum['type'] == 'sub') { $query = $db->query("SELECT fid, name FROM {$tablepre}forums WHERE fid='$forum[fup]'"); $fup = $db->fetch_array($query); $navigation = "» $fup[name] $navigation"; $navtitle = $navtitle.' - '.strip_tags($fup['name']); } $navtitle .= ' - '; if($thread['typeid'] && isset($forum['threadtypes']['types'][$thread['typeid']])) { $thread['subject'] = ($forum['threadtypes']['listable'] ? '['.$forum['threadtypes']['types'][$thread['typeid']].']' : '['.$forum['threadtypes']['types'][$thread['typeid']].']').' '.$thread['subject']; } if(empty($forum['allowview'])) { if(!$forum['viewperm'] && !$readaccess) { showmessage('group_nopermission', NULL, 'NOPERM'); } elseif($forum['viewperm'] && !forumperm($forum['viewperm'])) { $navtitle = ''; showmessage('forum_nopermission', NULL, 'NOPERM'); } } if($thread['readperm'] && $thread['readperm'] > $readaccess && !$forum['ismoderator'] && $thread['authorid'] != $discuz_uid) { showmessage('thread_nopermission', NULL, 'NOPERM'); } if($forum['password'] && $forum['password'] != $_DCOOKIE['fidpw'.$fid]) { header("Location: {$boardurl}forumdisplay.php?fid=$fid&sid=$sid"); exit(); } if($thread['price'] > 0 && $thread['special'] == 0) { if($maxchargespan && $timestamp - $thread['dateline'] >= $maxchargespan * 3600) { $db->query("UPDATE {$tablepre}threads SET price='0' WHERE tid='$tid'"); $thread['price'] = 0; } else { if(!$discuz_uid) { showmessage('group_nopermission', NULL, 'NOPERM'); } elseif(!$forum['ismoderator'] && $thread['authorid'] != $discuz_uid) { $query = $db->query("SELECT tid FROM {$tablepre}paymentlog WHERE tid='$tid' AND uid='$discuz_uid'"); if(!$db->num_rows($query)) { require_once DISCUZ_ROOT.'./include/threadpay.inc.php'; exit(); } } } } $raterange = $modratelimit && $adminid == 3 && !$forum['ismoderator'] ? array() : $raterange; $extra = rawurlencode($extra); $allowgetattach = !empty($forum['allowgetattach']) || ($allowgetattach && !$forum['getattachperm']) || forumperm($forum['getattachperm']); if(empty($action) && $tid) { if($discuz_uid && $newpm) { require_once DISCUZ_ROOT.'./include/pmprompt.inc.php'; } $showsettings = str_pad(decbin($showsettings), 3, '0', STR_PAD_LEFT); $customshow = $discuz_uid ? str_pad(base_convert($customshow, 10, 3), 3, '0', STR_PAD_LEFT) : '222'; $showsignatures = $customshow{0} == 2 ? $showsettings{0} : $customshow{0}; $showavatars = $customshow{1} == 2 ? $showsettings{1} : $customshow{1}; $showimages = $customshow{2} == 2 ? $showsettings{2} : $customshow{2}; $allowpaytoauthor = $forum['allowpaytoauthor']; //get qihoo status (pos. -3) $searchboxstatus = substr(sprintf('%03b', $qihoo_searchbox), -3, 1); $highlightstatus = isset($highlight) && str_replace('+', '', $highlight) ? 1 : 0; $maxsigrows = $maxsigrows ? 'style="overflow: hidden; max-height: '.$maxsigrows.'em; maxHeightIE: '.($maxsigrows * intval(FONTSIZE) + 5).'px;"' : ''; $ppp = $forum['threadcaches'] ? $_DCACHE['settings']['postperpage'] : $ppp; $page = empty($page) || !ispage($page) ? 1 : $page; $start_limit = $numpost = ($page - 1) * $ppp; if($start_limit > $thread['replies']) { $start_limit = $numpost = 0; $page = 1; } $multipage = multi($thread['replies'] + 1, $ppp, $page, "viewthread.php?tid=$tid&extra=$extra".(isset($highlight) ? "&highlight=".rawurlencode($highlight) : '')); if($thread['special'] > 0) { include_once DISCUZ_ROOT.'./include/special.inc.php'; } $extcredits_thread = array(); if(!empty($extcredits)) { foreach($extcredits as $key => $value) { if($value['showinthread']) { $extcredits_thread['extcredits'.$key] = array('title' => $value['title'], 'unit' => $value['unit']); } } } $fieldsadd = ''; if(is_array($_DCACHE['fields_thread'])) { foreach($_DCACHE['fields_thread'] as $field) { $fieldsadd .= ', mf.field_'.$field['fieldid']; } } $postlist = $attachtags = array(); $newpostanchor = $postcount = $attachpids = $ratelogpids = $threadcachestatus = 0; if($forum['threadcaches'] && !$discuz_uid && $page == 1 && !$thread['special']) { $thread['livedays'] = ceil(($timestamp - $thread['dateline']) / 86400); $thread['lastpostdays'] = ceil(($timestamp - $thread['lastpost']) / 86400); $threadcachemark = 100 - ($thread['displayorder'] * 15 + $thread['digest'] * 10 + min($thread['views'] / max($thread['livedays'], 10) * 2, 50) + max(-10, (15 - $thread['lastpostdays'])) + min($thread['replies'] / $_DCACHE['settings']['postperpage'] * 1.5, 15)); $threadcachestatus = $threadcachemark < $forum['threadcaches'] ? 1 : 0; if($threadcachestatus && @include(DISCUZ_ROOT.'./forumdata/threadcaches/'.substr($tid, -2)."/{$tid}_{$page}.php")) { if($_DCACHE['threadcachetime'] < $thread['lastpost'] && $thread['replies'] < $ppp) { $threadcachestatus = $allowgetattach = 1; $postlist = array(); } else { $threadcachestatus = 2; $postlist = &$_DCACHE['postlist']; } } } $pasetype = $forum['threadcaches'] ? 2 : 0; if(empty($forum['threadcaches']) || $threadcachestatus != 2) { $onlineauthors = array(); $query = $db->query("SELECT p.*, m.uid, m.username, m.groupid, m.regdate, m.lastactivity, m.posts, m.digestposts, m.oltime, m.pageviews, m.credits, m.extcredits1, m.extcredits2, m.extcredits3, m.extcredits4, m.extcredits5, m.extcredits6, m.extcredits7, m.extcredits8, m.email, m.gender, m.showemail, m.invisible, m.avatarshowid, m.xspacestatus, mf.nickname, mf.site, mf.icq, mf.qq, mf.yahoo, mf.msn, mf.taobao, mf.alipay, mf.location, mf.medals, mf.avatar, mf.avatarwidth, mf.avatarheight, mf.sightml AS signature, mf.customstatus $fieldsadd FROM {$tablepre}posts p LEFT JOIN {$tablepre}members m ON m.uid=p.authorid LEFT JOIN {$tablepre}memberfields mf ON mf.uid=m.uid WHERE p.tid='$tid' AND p.invisible='0' ORDER BY dateline LIMIT $start_limit, $ppp"); while($post = $db->fetch_array($query)) { if(!$newpostanchor && $post['dateline'] > $lastvisit) { $post['newpostanchor'] = ''; $newpostanchor = 1; } else { $post['newpostanchor'] = ''; } $post['lastpostanchor'] = $numpost == $thread['replies'] ? '' : ''; $post['number'] = ++$numpost; $post['count'] = $postcount++; $post['thisbg'] = $thisbg = isset($thisbg) && $thisbg == 'altbg1' ? 'altbg2' : 'altbg1'; $post['dbdateline'] = $post['dateline']; $post['dateline'] = gmdate("$dateformat $timeformat", $post['dateline'] + $timeoffset * 3600); $post['groupid'] = $_DCACHE['usergroups'][$post['groupid']] ? $post['groupid'] : 7; if($post['username']) { $onlineauthors[] = $post['authorid']; $post['groupid'] = getgroupid($post['authorid'], $_DCACHE['usergroups'][$post['groupid']], $post); $post['readaccess'] = $_DCACHE['usergroups'][$post['groupid']]['readaccess']; if($userstatusby == 1 || $_DCACHE['usergroups'][$post['groupid']]['byrank'] === '0') { $post['authortitle'] = $_DCACHE['usergroups'][$post['groupid']]['grouptitle']; $post['stars'] = $_DCACHE['usergroups'][$post['groupid']]['stars']; } elseif($userstatusby == 2) { foreach($_DCACHE['ranks'] as $rank) { if($post['posts'] > $rank['postshigher']) { $post['authortitle'] = $rank['ranktitle']; $post['stars'] = $rank['stars']; break; } } } if(!$allowpaytoauthor) { $post['alipay'] = ''; } $post['taobao'] = addslashes($post['taobao']); $post['authoras'] = !$post['anonymous'] ? ' '.addslashes($post['author']) : ''; $post['regdate'] = gmdate($dateformat, $post['regdate'] + $timeoffset * 3600); $post['allowuseblog'] = $_DCACHE['usergroups'][$post['groupid']]['allowuseblog']; if($post['medals']) { require_once DISCUZ_ROOT.'./forumdata/cache/cache_medals.php'; foreach($post['medals'] = explode("\t", $post['medals']) as $key => $medalid) { if(isset($_DCACHE['medals'][$medalid])) { $post['medals'][$key] = $_DCACHE['medals'][$medalid]; } else { unset($post['medals'][$key]); } } } if($showavatars) { $post['avatarshow'] = $avatarshowstatus && !$post['anonymous'] && ($post['avatarshowid'] || $avatarshowdefault) ? avatarshow($post['avatarshowid'], $post['gender']) : ''; if($_DCACHE['usergroups'][$post['groupid']]['groupavatar']) { $post['avatar'] = ''; } elseif($avatarshowstatus != 2 && $_DCACHE['usergroups'][$post['groupid']]['allowavatar'] && $post['avatar']) { $post['avatar'] = '
'; } else { $post['avatar'] = ''; } } } else { if(!$post['authorid']) { $post['useip'] = substr($post['useip'], 0, strrpos($post['useip'], '.')).'.x'; } } $post['attachments'] = array(); if($post['attachment'] && $allowgetattach) { $attachpids .= ",$post[pid]"; $post['attachment'] = 0; if(preg_match("/\[attach\](\d+)\[\/attach\]/i", $post['message'])) { $attachtags[] = $post['pid']; } } if($ratelogrecord && $post['ratetimes']) $ratelogpids .= ','.$post['pid']; $forum['allowbbcode'] = $forum['allowbbcode'] ? ($_DCACHE['usergroups'][$post['groupid']]['allowcusbbcode'] ? 2 : 1) : 0; $post['ratings'] = karmaimg($post['rate'], $post['ratetimes']); $post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], $post['htmlon'], $forum['allowsmilies'], $forum['allowbbcode'], ($forum['allowimgcode'] && $showimages ? 1 : 0), $forum['allowhtml'], ($forum['jammer'] && $post['authorid'] != $discuz_uid ? 1 : 0), $pasetype, $post['authorid']); $post['signature'] = $post['usesig'] ? $post['signature'] : ''; $postlist[$post['pid']] = $post; } if($vtonlinestatus == 2 && $onlineauthors) { $query = $db->query("SELECT uid FROM {$tablepre}sessions WHERE uid IN(".(implode(',', $onlineauthors)).") AND invisible=0"); $onlineauthors = array(); while($author = $db->fetch_array($query)) { $onlineauthors[$author['uid']] = 1; } } else { $onlineauthors = array(); } if($ratelogpids) { $query = $db->query("SELECT * FROM {$tablepre}ratelog WHERE pid IN ($ratelogpids) ORDER BY dateline DESC"); while($ratelog = $db->fetch_array($query)) { if(count($postlist[$ratelog['pid']]['ratelog']) < $ratelogrecord) { $ratelog['dateline'] = gmdate("$dateformat $timeformat", $ratelog['dateline'] + $timeoffset * 3600); $ratelog['score'] = $ratelog['score'] > 0 ? '+'.$ratelog['score'] : $ratelog['score']; $postlist[$ratelog['pid']]['ratelog'][] = $ratelog; } } } if($attachpids) { $query = $db->query("SELECT aid, pid, dateline, readperm, filename, description, filetype, attachment, filesize, downloads FROM {$tablepre}attachments WHERE pid IN ($attachpids) ORDER BY aid"); if($db->num_rows($query)) { require_once DISCUZ_ROOT.'./include/attachment.func.php'; while($attach = $db->fetch_array($query)) { $extension = strtolower(fileext($attach['filename'])); $attach['dateline'] = gmdate("$dateformat $timeformat", $attach['dateline'] + $timeoffset * 3600); $attach['attachicon'] = attachtype($extension."\t".$attach['filetype']); $attach['attachsize'] = sizecount($attach['filesize']); $attach['attachimg'] = $showimages && $attachimgpost && in_array($extension, array('jpg', 'jpeg', 'jpe', 'gif', 'png', 'bmp')) && (!$attach['readperm'] || $readaccess >= $attach['readperm']) ? 1 : 0; $postlist[$attach['pid']]['attachments'][$attach['aid']] = $attach; } foreach($attachtags as $pid) { $postlist[$pid]['message'] = preg_replace("/\[attach\](\d+)\[\/attach\]/ie", "attachtag($pid, \\1, \$postlist)", $postlist[$pid]['message']); } } else { $db->query("UPDATE {$tablepre}posts SET attachment='0' WHERE pid IN ($attachpids)", 'UNBUFFERED'); } } } if(empty($postlist)) { showmessage('undefined_action', NULL, 'HALTED'); } elseif($threadcachestatus == 1) { require_once './include/cache.func.php'; if(!is_dir($cachedir = DISCUZ_ROOT.'./forumdata/threadcaches/'.substr($tid, -2))) { @mkdir($cachedir, 0777); @touch($cachedir.'/index.htm'); } if($fp = @fopen(DISCUZ_ROOT.'./forumdata/threadcaches/'.substr($tid, -2)."/{$tid}_{$page}.php", 'w+')) { @flock($fp, LOCK_EX); @fwrite($fp, ''); @fclose($fp); } } $relatedthreadlist = array(); $relatedthreadupdate = FALSE; if($qihoo_status && $qihoo_relatedthreads && $qihoo_searchbox) { $site = site(); $relatedkeywords = $metakeywords = ''; $query = $db->query("SELECT expiration, keywords, relatedthreads FROM {$tablepre}relatedthreads WHERE tid='$tid'"); $related = $db->fetch_array($query); if($related['expiration'] > $timestamp) { $relatedthreadlist = unserialize($related['relatedthreads']); if($related['keywords']) { $searchkeywords = rawurlencode(str_replace("\t", ' ', $related['keywords'])); foreach(explode("\t", $related['keywords']) as $keyword) { $relatedkeywords .= $keyword ? ''.$keyword.' ' : ''; $metakeywords .= $keyword ? $keyword.',' : ''; } } } else { $relatedthreadupdate = TRUE; $verifykey = md5($authkey.$tid.$thread['subjectenc'].$charset.$site); } } $relatedthreads = array(); if(!empty($relatedthreadlist)) { if(!isset($_COOKIE['discuz_collapse']) || strpos($_COOKIE['discuz_collapse'], 'relatedthreads') === FALSE) { $relatedthreads['img'] = 'collapsed_no.gif'; $relatedthreads['style'] = ''; } else { $relatedthreads['img'] = 'collapsed_yes.gif'; $relatedthreads['style'] = 'display: none'; } } $visitedforums = $visitedforums ? visitedforums() : ''; $forumselect = $forummenu = ''; if($forumjump && empty($jsmenu[1])) { $forumselect = forumselect(); } $usesigcheck = $discuz_uid && $sigstatus ? 'checked' : ''; $allowpostreply = ((!$thread['closed'] && !checkautoclose()) || $forum['ismoderator']) && ((!$forum['replyperm'] && $allowreply) || ($forum['replyperm'] && forumperm($forum['replyperm'])) || $forum['allowreply']); $allowpost = (!$forum['postperm'] && $allowpost) || ($forum['postperm'] && forumperm($forum['postperm'])) || $forum['allowpost']; $allowpostpoll = $allowpost && $allowpostpoll && substr(sprintf('%04b', $forum['allowpostspecial']), -1, 1); $allowposttrade = $allowpost && $allowposttrade && substr(sprintf('%04b', $forum['allowpostspecial']), -2, 1); $allowpostreward = $allowpost && $allowpostreward && substr(sprintf('%04b', $forum['allowpostspecial']), -3, 1) && isset($extcredits[$creditstrans]); $allowpostactivity = $allowpost && $allowpostactivity && substr(sprintf('%04b', $forum['allowpostspecial']), -4, 1); $supe_pushstatusadd = ''; if($supe_status && $supe_allowpushthread && $forum['supe_pushsetting']['status'] == 3) { if(($thread['views'] && $forum['supe_pushsetting']['filter']['views'] && $thread['views'] >= intval($forum['supe_pushsetting']['filter']['views'])) || ($thread['replies'] && $forum['supe_pushsetting']['filter']['replies'] && $thread['replies'] >= intval($forum['supe_pushsetting']['filter']['replies'])) || ($thread['digest'] && $forum['supe_pushsetting']['filter']['digest'] && $thread['digest'] >= intval($forum['supe_pushsetting']['filter']['digest'])) || ($thread['displayorder'] && $forum['supe_pushsetting']['filter']['displayorder'] && $thread['displayorder'] >= intval($forum['supe_pushsetting']['filter']['displayorder']))) { if($thread['supe_pushstatus'] == 0) { $supe_pushstatusadd = ", supe_pushstatus='3'"; } } elseif($thread['supe_pushstatus'] == 3) { $supe_pushstatusadd = ", supe_pushstatus='0'"; } } if(($delayviewcount == 1 || $delayviewcount == 3) && !$supe_pushstatusadd) { $logfile = './forumdata/cache/cache_threadviews.log'; if(substr($timestamp, -2) == '00') { require_once DISCUZ_ROOT.'./include/misc.func.php'; updateviews('threads', 'tid', 'views', $logfile); } if(@$fp = fopen(DISCUZ_ROOT.$logfile, 'a')) { fwrite($fp, "$tid\n"); fclose($fp); } elseif($adminid == 1) { showmessage('view_log_invalid'); } } else { $db->query("UPDATE {$tablepre}threads SET views=views+1 $supe_pushstatusadd WHERE tid='$tid'", 'UNBUFFERED'); } unset($supe_pushstatusadd); if($fastpost && $allowpostreply) { $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; } $forumselect = $forummenu = ''; if($forumjump) { if($jsmenu[1]) { $forummenu = forumselect(FALSE, 1); } else { $forumselect = forumselect(); } } include template('viewthread'); } elseif($action == 'printable' && $tid) { require_once DISCUZ_ROOT.'./include/printable.inc.php'; } ?>