discuz viewthread.php,discuzx/forum_viewthread.php at master · xianhuawei/discuzx · GitHub

2023-05-16

/**

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

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

*

* $Id: forum_viewthread.php 34125 2013-10-15 09:24:41Z jeffjzhang $

*/

if(!defined('IN_DISCUZ')) {

exit('Access Denied');

}

require_once libfile('function/forumlist');

require_once libfile('function/discuzcode');

require_once libfile('function/post');

//变量映射

$thread = & $_G['forum_thread'];

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

//主题或者板块错误则退出

if(!$_G['forum_thread'] || !$_G['forum']) {

showmessage('thread_nonexistence');

}

$page = max(1, $_G['page']);

$_GET['stand'] = isset($_GET['stand']) && in_array($_GET['stand'], array('0', '1', '2')) ? $_GET['stand'] : null;

//防采集

if($page === 1 && !empty($_G['setting']['antitheft']['allow']) && empty($_G['setting']['antitheft']['disable']['thread']) && empty($_G['forum']['noantitheft'])) {

helper_antitheft::check($_G['forum_thread']['tid'], 'tid');

}

//获取当前主题缓存

if($_G['setting']['cachethreadlife'] && $_G['forum']['threadcaches'] && !$_G['uid'] && $page == 1 && !$_G['forum']['special'] && empty($_GET['do']) && !defined('IN_ARCHIVER') && !defined('IN_MOBILE')) {

viewthread_loadcache();

}

//分表信息

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

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

$archiveid = $thread['threadtableid'];

$thread['is_archived'] = $archiveid ? true : false;

$thread['archiveid'] = $archiveid;

$forum['threadtableid'] = $archiveid;

$threadtable = $thread['threadtable'];

$posttableid = $thread['posttableid'];

$posttable = $thread['posttable'];

// =====================================================

// gpc 变量处理

// =====================================================

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

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

if($_G['fid'] == $_G['setting']['followforumid'] && $_G['adminid'] != 1) {

dheader("Location: home.php?mod=follow");

}

$st_p = $_G['uid'].'|'.TIMESTAMP;

dsetcookie('st_p', $st_p.'|'.md5($st_p.$_G['config']['security']['authkey']));

$close_leftinfo = intval($_G['setting']['close_leftinfo']);

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

if($_G['cookie']['close_leftinfo'] == 1) {

$close_leftinfo = 1;

} elseif($_G['cookie']['close_leftinfo'] == 2) {

$close_leftinfo = 0;

}

}

//是否只看某作者

$_GET['authorid'] = !empty($_GET['authorid']) ? intval($_GET['authorid']) : 0;

//倒序看帖?

$_GET['ordertype'] = !empty($_GET['ordertype']) ? intval($_GET['ordertype']) : 0;

$_GET['from'] = in_array($_GET['from'], array('preview', 'portal', 'album')) ? $_GET['from'] : '';

if($_GET['from'] == 'portal' && !$_G['setting']['portalstatus']) {

$_GET['from'] = '';

} elseif($_GET['from'] == 'preview' && !$_G['inajax']) {

$_GET['from'] = '';

} elseif($_GET['from'] == 'album' && ($_G['setting']['guestviewthumb']['flag'] && !$_G['uid'] && IN_MOBILE != 2 || !$_G['group']['allowgetimage'])) {

$_GET['from'] = '';

}

$fromuid = $_G['setting']['creditspolicy']['promotion_visit'] && $_G['uid'] ? '&fromuid='.$_G['uid'] : '';

$feeduid = $_G['forum_thread']['authorid'] ? $_G['forum_thread']['authorid'] : 0;

$feedpostnum = $_G['forum_thread']['replies'] > $_G['ppp'] ? $_G['ppp'] : ($_G['forum_thread']['replies'] ? $_G['forum_thread']['replies'] : 1);

//extra

if(!empty($_GET['extra'])) {

parse_str($_GET['extra'], $extra);

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

foreach($extra as $_k => $_v) {

if(preg_match('/^\w+$/', $_k)) {

if(!is_array($_v)) {

$_GET['extra'][] = $_k.'='.rawurlencode($_v);

} else {

$_GET['extra'][] = http_build_query(array($_k => $_v));

}

}

}

$_GET['extra'] = implode('&', $_GET['extra']);

}

$_G['forum_threadindex'] = '';

$skipaids = $aimgs = $_G['forum_posthtml'] = array();

// 部分状态处理

$thread['subjectenc'] = rawurlencode($_G['forum_thread']['subject']);

$thread['short_subject'] = cutstr($_G['forum_thread']['subject'], 52);

// ==========================================

// 标题以及导航处理

// ==========================================

$navigation = '';

if($_GET['from'] == 'portal') {

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

_checkviewgroup();

}

// 门户浏览模式

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

$navigation = ' '.lang('core', 'portal').'';

$navsubject = $_G['forum_thread']['subject'];

$navtitle = $_G['forum_thread']['subject'];

}elseif($_GET['from'] == 'preview') {

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

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

_checkviewgroup();

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

$navigation = ' '.$_G['setting']['navs'][3]['navname'].' '.$nav['nav'];

$upnavlink = 'forum.php?mod=forumdisplay&fid='.$_G['fid'].($_GET['extra'] && !IS_ROBOT ? '&'.$_GET['extra'] : '');

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

} else {

//正常的板块

$navigation = '';

$upnavlink = 'forum.php?mod=forumdisplay&fid='.$_G['fid'].($_GET['extra'] && !IS_ROBOT ? '&'.$_GET['extra'] : '');

//追加子版块所在分区链接

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

$fup = $_G['cache']['forums'][$_G['forum']['fup']]['fup'];

$t_link = $_G['cache']['forums'][$fup]['type'] == 'group' ? 'forum.php?gid='.$fup : 'forum.php?mod=forumdisplay&fid='.$fup;

$navigation .= ' '.($_G['cache']['forums'][$fup]['name']).'';

}

//追加上级板块链接

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

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

$t_link = $_G['cache']['forums'][$fup]['type'] == 'group' ? 'forum.php?gid='.$fup : 'forum.php?mod=forumdisplay&fid='.$fup;

$navigation .= ' '.($_G['cache']['forums'][$fup]['name']).'';

}

//追加当前板块链接

$t_link = 'forum.php?mod=forumdisplay&fid='.$_G['fid'].($_GET['extra'] && !IS_ROBOT ? '&'.$_GET['extra'] : '');

$navigation .= ' '.($_G['forum']['name']).'';

//追加分表存档连接

if($archiveid) {

if($threadtable_info[$archiveid]['displayname']) {

$t_name = dhtmlspecialchars($threadtable_info[$archiveid]['displayname']);

} else {

$t_name = lang('core', 'archive').' '.$archiveid;

}

$navigation .= '

}

if($_G['forum']['price'] && !$_G['forum']['ismoderator']) {

$membercredits = C::t('common_member_forum_buylog')->get_credits($_G['uid'], $_G['fid']);

$paycredits = $_G['forum']['price'] - $membercredits;

if($paycredits > 0) {

dheader("Location: $_G[siteurl]forum.php?mod=forumdisplay&fid=$_G[fid]");

}

}

if($_G['forum_thread']['readperm'] && $_G['forum_thread']['readperm'] > $_G['group']['readaccess'] && !$_G['forum']['ismoderator'] && $_G['forum_thread']['authorid'] != $_G['uid']) {

showmessage('thread_nopermission', NULL, array('readperm' => $_G['forum_thread']['readperm']), array('login' => 1));

}

$usemagic = array('user' => array(), 'thread' => array());

// 是否是接收回复通知

$replynotice = getstatus($_G['forum_thread']['status'], 6);

// 是否是隐藏回复的帖子

$hiddenreplies = getstatus($_G['forum_thread']['status'], 2);

// 是否是抢楼贴

$rushreply = getstatus($_G['forum_thread']['status'], 3);

// 是否单独保存帖子位置信息

$savepostposition = getstatus($_G['forum_thread']['status'], 1);

// 是否被收入淘专辑

$incollection = getstatus($_G['forum_thread']['status'], 9);

//debug 出售帖

$_G['forum_threadpay'] = FALSE;

if($_G['forum_thread']['price'] > 0 && $_G['forum_thread']['special'] == 0) {

//debug 出售贴的时间限制 按照小时计算 过期价格清零

if($_G['setting']['maxchargespan'] && TIMESTAMP - $_G['forum_thread']['dateline'] >= $_G['setting']['maxchargespan'] * 3600) {

C::t('forum_thread')->update($_G['tid'], array('price' => 0), false, false, $archiveid);

$_G['forum_thread']['price'] = 0;

} else {

$exemptvalue = $_G['forum']['ismoderator'] ? 128 : 16;

if(!($_G['group']['exempt'] & $exemptvalue) && $_G['forum_thread']['authorid'] != $_G['uid']) {

if(!(C::t('common_credit_log')->count_by_uid_operation_relatedid($_G['uid'], 'BTC', $_G['tid']))) {

require_once libfile('thread/pay', 'include');

$_G['forum_threadpay'] = TRUE;

}

}

}

}

//抢楼帖处理

if($rushreply) {

$rewardfloor = '';

$rushresult = $rewardfloorarr = $rewardfloorarray = array();

$rushresult = C::t('forum_threadrush')->fetch($_G['tid']);

if($rushresult['creditlimit'] == -996) {

$rushresult['creditlimit'] = '';

}

if((TIMESTAMP < $rushresult['starttimefrom'] || ($rushresult['starttimeto'] && TIMESTAMP > $rushresult['starttimeto']) || ($rushresult['stopfloor'] && $_G['forum_thread']['replies'] + 1 >= $rushresult['stopfloor'])) && $_G['forum_thread']['closed'] == 0) {

C::t('forum_thread')->update($_G['tid'], array('closed'=>1));

} elseif(($rushresult['starttimefrom'] && TIMESTAMP > $rushresult['starttimefrom']) && $_G['forum_thread']['closed'] == 1) {

if(($rushresult['starttimeto'] && TIMESTAMP < $rushresult['starttimeto'] || !$rushresult['starttimeto']) && ($rushresult['stopfloor'] && $_G['forum_thread']['replies'] + 1 < $rushresult['stopfloor'] || !$rushresult['stopfloor'])) {

C::t('forum_thread')->update($_G['tid'], array('closed'=>0));

}

}

if($rushresult['starttimefrom'] > TIMESTAMP) {

$rushresult['timer'] = $rushresult['starttimefrom'] - TIMESTAMP;

$rushresult['timertype'] = 'start';

} elseif($rushresult['starttimeto'] > TIMESTAMP) {

$rushresult['timer'] = $rushresult['starttimeto'] - TIMESTAMP;

$rushresult['timertype'] = 'end';

}

$rushresult['starttimefrom'] = $rushresult['starttimefrom'] ? dgmdate($rushresult['starttimefrom']) : '';

$rushresult['starttimeto'] = $rushresult['starttimeto'] ? dgmdate($rushresult['starttimeto']) : '';

$rushresult['creditlimit_title'] = $_G['setting']['creditstransextra'][11] ? $_G['setting']['extcredits'][$_G['setting']['creditstransextra'][11]]['title'] : lang('forum/misc', 'credit_total');

}

//X 回帖奖励积分

if($_G['forum_thread']['replycredit'] > 0) {

$_G['forum_thread']['replycredit_rule'] = C::t('forum_replycredit')->fetch($thread['tid']);

$_G['forum_thread']['replycredit_rule']['remaining'] = $_G['forum_thread']['replycredit'] / $_G['forum_thread']['replycredit_rule']['extcredits'];

$_G['forum_thread']['replycredit_rule']['extcreditstype'] = $_G['forum_thread']['replycredit_rule']['extcreditstype'] ? $_G['forum_thread']['replycredit_rule']['extcreditstype'] : $_G['setting']['creditstransextra'][10] ;

}

$_G['group']['raterange'] = $_G['setting']['modratelimit'] && $adminid == 3 && !$_G['forum']['ismoderator'] ? array() : $_G['group']['raterange'];

//debug 论坛本身或者用户有可以下载附件的权限

$_G['group']['allowgetattach'] = !empty($_G['forum']['allowgetattach']) || ($_G['group']['allowgetattach'] && !$_G['forum']['getattachperm']) || forumperm($_G['forum']['getattachperm']);

$_G['group']['allowgetimage'] = !empty($_G['forum']['allowgetimage']) || ($_G['group']['allowgetimage'] && !$_G['forum']['getattachperm']) || forumperm($_G['forum']['getattachperm']);

$_G['getattachcredits'] = '';

if($_G['forum_thread']['attachment']) {

$exemptvalue = $_G['forum']['ismoderator'] ? 32 : 4;

if(!($_G['group']['exempt'] & $exemptvalue)) {

$creditlog = updatecreditbyaction('getattach', $_G['uid'], array(), '', 1, 0, $_G['forum_thread']['fid']);

$p = '';

if($creditlog['updatecredit']) for($i = 1;$i <= 8;$i++) {

if($policy = $creditlog['extcredits'.$i]) {

$_G['getattachcredits'] .= $p.$_G['setting']['extcredits'][$i]['title'].' '.$policy.' '.$_G['setting']['extcredits'][$i]['unit'];

$p = ', ';

}

}

}

}

$exemptvalue = $_G['forum']['ismoderator'] ? 64 : 8;

$_G['forum_attachmentdown'] = $_G['group']['exempt'] & $exemptvalue;

list($seccodecheck, $secqaacheck) = seccheck('post', 'reply');

$usesigcheck = $_G['uid'] && $_G['group']['maxsigsize'];

$postlist = $_G['forum_attachtags'] = $attachlist = $_G['forum_threadstamp'] = array();

$aimgcount = 0;

$_G['forum_attachpids'] = array();

if(!empty($_GET['action']) && $_GET['action'] == 'printable' && $_G['tid']) {

require_once libfile('thread/printable', 'include');

dexit();

}

if($_G['forum_thread']['stamp'] >= 0) {

$_G['forum_threadstamp'] = $_G['cache']['stamps'][$_G['forum_thread']['stamp']];

}

$lastmod = viewthread_lastmod($_G['forum_thread']);

$showsettings = str_pad(decbin($_G['setting']['showsettings']), 3, '0', STR_PAD_LEFT);

$showsignatures = $showsettings{0};

$showavatars = $showsettings{1};

$_G['setting']['showimages'] = $showsettings{2};

$highlightstatus = isset($_GET['highlight']) && str_replace('+', '', $_GET['highlight']) ? 1 : 0;

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

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

$allowpostreply = ($_G['forum']['allowreply'] != -1) && (($_G['forum_thread']['isgroup'] || (!$_G['forum_thread']['closed'] && !checkautoclose($_G['forum_thread']))) || $_G['forum']['ismoderator']) && ((!$_G['forum']['replyperm'] && $_G['group']['allowreply']) || ($_G['forum']['replyperm'] && forumperm($_G['forum']['replyperm'])) || $_G['forum']['allowreply']);

$fastpost = $_G['setting']['fastpost'] && !$_G['forum_thread']['archiveid'] && ($_G['forum']['status'] != 3 || $_G['isgroupuser']);

$allowfastpost = $_G['setting']['fastpost'] && $allowpostreply;

if(!$_G['uid'] && ($_G['setting']['need_avatar'] || $_G['setting']['need_email'] || $_G['setting']['need_friendnum']) || !$_G['adminid'] && (!cknewuser(1) || $_G['setting']['newbiespan'] && (!getuserprofile('lastpost') || TIMESTAMP - getuserprofile('lastpost') < $_G['setting']['newbiespan'] * 60) && TIMESTAMP - $_G['member']['regdate'] < $_G['setting']['newbiespan'] * 60)) {

$allowfastpost = false;

}

$_G['group']['allowpost'] = $_G['forum']['allowpost'] != -1 && ((!$_G['forum']['postperm'] && $_G['group']['allowpost']) || ($_G['forum']['postperm'] && forumperm($_G['forum']['postperm'])) || $_G['forum']['allowpost']);

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

$allowpostattach = $allowpostreply && ($_G['forum']['allowpostattach'] != -1 && ($_G['forum']['allowpostattach'] == 1 || (!$_G['forum']['postattachperm'] && $_G['group']['allowpostattach']) || ($_G['forum']['postattachperm'] && forumperm($_G['forum']['postattachperm']))));

// 特殊类型主题发布按钮

if($_G['group']['allowpost']) {

$_G['group']['allowpostpoll'] = $_G['group']['allowpostpoll'] && ($_G['forum']['allowpostspecial'] & 1);

$_G['group']['allowposttrade'] = $_G['group']['allowposttrade'] && ($_G['forum']['allowpostspecial'] & 2);

$_G['group']['allowpostreward'] = $_G['group']['allowpostreward'] && ($_G['forum']['allowpostspecial'] & 4) && isset($_G['setting']['extcredits'][$_G['setting']['creditstrans']]);

$_G['group']['allowpostactivity'] = $_G['group']['allowpostactivity'] && ($_G['forum']['allowpostspecial'] & 8);

$_G['group']['allowpostdebate'] = $_G['group']['allowpostdebate'] && ($_G['forum']['allowpostspecial'] & 16);

} else {

$_G['group']['allowpostpoll'] = $_G['group']['allowposttrade'] = $_G['group']['allowpostreward'] = $_G['group']['allowpostactivity'] = $_G['group']['allowpostdebate'] = FALSE;

}

$_G['forum']['threadplugin'] = $_G['group']['allowpost'] && $_G['setting']['threadplugins'] ? is_array($_G['forum']['threadplugin']) ? $_G['forum']['threadplugin'] : dunserialize($_G['forum']['threadplugin']) : array();

$_G['setting']['visitedforums'] = $_G['setting']['visitedforums'] && $_G['forum']['status'] != 3 ? visitedforums() : '';

//debug 相关主题功能

$relatedthreadlist = array();

$relatedthreadupdate = $tagupdate = FALSE;

$relatedkeywords = $tradekeywords = $_G['forum_firstpid'] = '';

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

$collapseimg['modarea_c'] = 'collapsed_no';

$collapse['modarea_c'] = '';

} else {

$collapseimg['modarea_c'] = 'collapsed_yes';

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

}

$threadtag = array();

//处理未被更新的查看

viewthread_updateviews($archiveid);

$_G['setting']['infosidestatus']['posts'] = $_G['setting']['infosidestatus'][1] && isset($_G['setting']['infosidestatus']['f'.$_G['fid']]['posts']) ? $_G['setting']['infosidestatus']['f'.$_G['fid']]['posts'] : $_G['setting']['infosidestatus']['posts'];

$postfieldsadd = $specialadd1 = $specialadd2 = $specialextra = '';

$tpids = array();

// 商品贴处理

if($_G['forum_thread']['special'] == 2) {

if(!empty($_GET['do']) && $_GET['do'] == 'tradeinfo') {

require_once libfile('thread/trade', 'include');

}

$query = C::t('forum_trade')->fetch_all_thread_goods($_G['tid']);

foreach($query as $trade) {

$tpids[] = $trade['pid'];

}

$specialadd2 = 1;

// 辩论贴处理

} elseif($_G['forum_thread']['special'] == 5) {

if(isset($_GET['stand'])) {

$specialadd2 = 1;

$specialextra = "&stand=$_GET[stand]";

}

}

$onlyauthoradd = $threadplughtml = '';

$maxposition = 0;

if(empty($_GET['viewpid'])) {

//是否按position字段浏览 悬赏 商品 辩论 除外

$disablepos = !$rushreply && C::t('forum_threaddisablepos')->fetch($_G['tid']) ? 1 : 0; // 有记录且不是抢楼时,也不用position方式

if(!$disablepos && !in_array($_G['forum_thread']['special'], array(2,3,5))) {

if($_G['forum_thread']['maxposition']) {

$maxposition = $_G['forum_thread']['maxposition'];

} else {

$maxposition = C::t('forum_post')->fetch_maxposition_by_tid($posttableid, $_G['tid']);

}

}

$ordertype = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : $_GET['ordertype'];

if($_GET['from'] == 'album') {

$ordertype = 1;

}

//回帖置顶

$sticklist = array();

if($_G['page'] === 1 && $_G['forum_thread']['stickreply'] && empty($_GET['authorid'])) {

$poststick = C::t('forum_poststick')->fetch_all_by_tid($_G['tid']);

foreach(C::t('forum_post')->fetch_all($posttableid, array_keys($poststick)) as $post) {

$post['position'] = $poststick[$post['pid']]['position'];

$post['avatar'] = avatar($post['authorid'], 'small');

$post['isstick'] = true;

$sticklist[$post['pid']] = $post;

}

$stickcount = count($sticklist);

}

//抢楼帖获奖楼层列表处理

if($rushreply) {

$rushids = $rushpids = $rushpositionlist = $preg = $arr = array();

$str = ',,';

$preg_str = rushreply_rule($rushresult);

if($_GET['checkrush']) {

$maxposition = 0;

for($i = 1; $i <= $_G['forum_thread']['replies'] + 1; $i++) {

$str = $str.$i.',,';

}

preg_match_all($preg_str, $str, $arr);

$arr = $arr[0];

foreach($arr as $var) {

$var = str_replace(',', '', $var);

$rushids[$var] = $var;

}

$temp_reply = $_G['forum_thread']['replies'];

$_G['forum_thread']['replies'] = $countrushpost = max(0, count($rushids) - 1);

$rushids = array_slice($rushids, ($page - 1) * $_G['ppp'], $_G['ppp']);

foreach(C::t('forum_post')->fetch_all_by_tid_position($posttableid, $_G['tid'], $rushids) as $post) {

$postarr[$post['position']] = $post;

}

} else {

for($i = ($page - 1) * $_G['ppp'] + 1; $i <= $page * $_G['ppp']; $i++) {

$str = $str.$i.',,';

}

preg_match_all($preg_str, $str, $arr);

$arr = $arr[0];

foreach($arr as $var) {

$var = str_replace(',', '', $var);

$rushids[$var] = $var;

}

$_G['forum_thread']['replies'] = $_G['forum_thread']['replies'] - 1;

}

}

if(!empty($_GET['authorid'])) {

$maxposition = 0;

$_G['forum_thread']['replies'] = C::t('forum_post')->count_by_tid_invisible_authorid($_G['tid'], $_GET['authorid']);

$_G['forum_thread']['replies']--;

if($_G['forum_thread']['replies'] < 0) {

showmessage('undefined_action');

}

$onlyauthoradd = 1;

} elseif($_G['forum_thread']['special'] == 5) {

if(isset($_GET['stand']) && $_GET['stand'] >= 0 && $_GET['stand'] < 3) {

$_G['forum_thread']['replies'] = C::t('forum_debatepost')->count_by_tid_stand($_G['tid'], $_GET['stand']);

} else {

$_G['forum_thread']['replies'] = C::t('forum_post')->count_visiblepost_by_tid($_G['tid']);

$_G['forum_thread']['replies'] > 0 && $_G['forum_thread']['replies']--;

}

} elseif($_G['forum_thread']['special'] == 2) {

$tradenum = C::t('forum_trade')->fetch_counter_thread_goods($_G['tid']);

$_G['forum_thread']['replies'] -= $tradenum;

}

if($maxposition) {

$_G['forum_thread']['replies'] = $maxposition - 1;

}

//debug Module:HTML_CACHE 只缓存第一页。页面大小为系统默认。

$_G['ppp'] = $_G['forum']['threadcaches'] && !$_G['uid'] ? $_G['setting']['postperpage'] : $_G['ppp'];

$totalpage = ceil(($_G['forum_thread']['replies'] + 1) / $_G['ppp']);

$page > $totalpage && $page = $totalpage;

//debug 二分分页

$_G['forum_pagebydesc'] = !$maxposition && $page > 2 && $page > ($totalpage / 2) ? TRUE : FALSE;

if($_G['forum_pagebydesc']) {

$firstpagesize = ($_G['forum_thread']['replies'] + 1) % $_G['ppp'];

$_G['forum_ppp3'] = $_G['forum_ppp2'] = $page == $totalpage && $firstpagesize ? $firstpagesize : $_G['ppp'];

$realpage = $totalpage - $page + 1;

if($firstpagesize == 0) {

$firstpagesize = $_G['ppp'];

}

$start_limit = max(0, ($realpage - 2) * $_G['ppp'] + $firstpagesize);

$_G['forum_numpost'] = ($page - 1) * $_G['ppp'];

if($ordertype != 1) {

} else {

$_G['forum_numpost'] = $_G['forum_thread']['replies'] + 2 - $_G['forum_numpost'] + ($page > 1 ? 1 : 0);

}

} else {

$start_limit = $_G['forum_numpost'] = max(0, ($page - 1) * $_G['ppp']);

if($start_limit > $_G['forum_thread']['replies']) {

$start_limit = $_G['forum_numpost'] = 0;

$page = 1;

}

if($ordertype != 1) {

} else {

$_G['forum_numpost'] = $_G['forum_thread']['replies'] + 2 - $_G['forum_numpost'] + ($page > 1 ? 1 : 0);

}

}

$multipage = multi($_G['forum_thread']['replies'] + 1, $_G['ppp'], $page, 'forum.php?mod=viewthread&tid='.$_G['tid'].

($_G['forum_thread']['is_archived'] ? '&archive='.$_G['forum_thread']['archiveid'] : '').

'&extra='.$_GET['extra'].

($ordertype && $ordertype != getstatus($_G['forum_thread']['status'], 4) ? '&ordertype='.$ordertype : '').

(isset($_GET['highlight']) ? '&highlight='.rawurlencode($_GET['highlight']) : '').

(!empty($_GET['authorid']) ? '&authorid='.$_GET['authorid'] : '').

(!empty($_GET['from']) ? '&from='.$_GET['from'] : '').

(!empty($_GET['checkrush']) ? '&checkrush='.$_GET['checkrush'] : '').

(!empty($_GET['modthreadkey']) ? '&modthreadkey='.rawurlencode($_GET['modthreadkey']) : '').

$specialextra);

} else {

$_GET['viewpid'] = intval($_GET['viewpid']);

$pageadd = "AND p.pid='$_GET[viewpid]'";

}

//debug 主题内容及回复

$_G['forum_newpostanchor'] = $_G['forum_postcount'] = 0;

$_G['forum_onlineauthors'] = $_G['forum_cachepid'] = $_G['blockedpids'] = array();

$isdel_post = $cachepids = $postusers = $skipaids = array();

if($_G['forum_auditstatuson'] || in_array($_G['forum_thread']['displayorder'], array(-2, -3, -4)) && $_G['forum_thread']['authorid'] == $_G['uid']) {

$visibleallflag = 1;

}

if($maxposition) {

$start = ($page - 1) * $_G['ppp'] + 1;

$end = $start + $_G['ppp'];

if($ordertype == 1) {

$end = $maxposition - ($page - 1) * $_G['ppp'] + ($page > 1 ? 2 : 1);

$start = $end - $_G['ppp'] + ($page > 1 ? 0 : 1);

$start = max(array(1,$start));

}

$have_badpost = $realpost = $lastposition = 0;

foreach(C::t('forum_post')->fetch_all_by_tid_range_position($posttableid, $_G['tid'], $start, $end, $maxposition, $ordertype) as $post) {

if($post['invisible'] != 0) {

$have_badpost = 1;

}

$cachepids[$post[position]] = $post['pid'];

$postarr[$post[position]] = $post;

$lastposition = $post['position'];

}

$realpost = count($postarr);

if($realpost != $_G['ppp'] || $have_badpost) {

$k = 0;

for($i = $start; $i < $end; $i ++) {

if(!empty($cachepids[$i])) {

$k = $cachepids[$i];

$isdel_post[$i] = array('deleted' => 1, 'pid' => $k, 'message' => '', 'position' => $i);

} elseif($i < $maxposition || ($lastposition && $i < $lastposition)) {

$isdel_post[$i] = array('deleted' => 1, 'pid' => $k, 'message' => '', 'position' => $i);

}

$k ++;

}

}

$pagebydesc = false;

}

//抢楼贴中奖帖子ID

if($_GET['checkrush'] && $rushreply) {

$_G['forum_thread']['replies'] = $temp_reply;

}

if(!$maxposition && empty($postarr)) {

if(empty($_GET['viewpid'])) {

if($_G['forum_thread']['special'] == 2) {

$postarr = C::t('forum_post')->fetch_all_tradepost_viewthread_by_tid($_G['tid'], $visibleallflag, $_GET['authorid'], $tpids, $_G['forum_pagebydesc'], $ordertype, $start_limit, ($_G['forum_pagebydesc'] ? $_G['forum_ppp2'] : $_G['ppp']));

} elseif($_G['forum_thread']['special'] == 5) {

$postarr = C::t('forum_post')->fetch_all_debatepost_viewthread_by_tid($_G['tid'], $visibleallflag, $_GET['authorid'], $_GET['stand'], $_G['forum_pagebydesc'], $ordertype, $start_limit, ($_G['forum_pagebydesc'] ? $_G['forum_ppp2'] : $_G['ppp']));

} else {

$postarr = C::t('forum_post')->fetch_all_common_viewthread_by_tid($_G['tid'], $visibleallflag, $_GET['authorid'], $_G['forum_pagebydesc'], $ordertype, $_G['forum_thread']['replies'] + 1, $start_limit, ($_G['forum_pagebydesc'] ? $_G['forum_ppp2'] : $_G['ppp']));

}

} else {

$post = array();

if($_G['forum_thread']['special'] == 2) {

if(!in_array($_GET['viewpid'], $tpids)) {

$post = C::t('forum_post')->fetch('tid:'.$_G['tid'],$_GET['viewpid']);

}

} elseif($_G['forum_thread']['special'] == 5) {

$post = C::t('forum_post')->fetch('tid:'.$_G['tid'], $_GET['viewpid']);

$debatpost = C::t('forum_debatepost')->fetch($_GET['viewpid']);

if(!isset($_GET['stand']) || (isset($_GET['stand']) && ($post['first'] == 1 || $debatpost['stand'] == $_GET['stand']))) {

$post = array_merge($post, $debatpost);

} else {

$post = array();

}

unset($debatpost);

} else {

$post = C::t('forum_post')->fetch('tid:'.$_G['tid'], $_GET['viewpid']);

}

if($post) {

if($visibleallflag || (!$visibleallflag && !$post['invisible'])) {

$postarr[0] = $post;

}

}

}

}

if(!empty($isdel_post)) {

$updatedisablepos = false;

foreach($isdel_post as $id => $post) {

// -3 是针对草稿帖做特殊处理

if(isset($postarr[$id]['invisible']) && ($postarr[$id]['invisible'] == 0 || $postarr[$id]['invisible'] == -3 || $visibleallflag)) {

continue;

}

$postarr[$id] = $post;

$updatedisablepos = true;

}

if($updatedisablepos && !$rushreply) {

C::t('forum_threaddisablepos')->insert(array('tid' => $_G['tid']), false, true);

dheader("Location:forum.php?mod=viewthread&tid=$_G[tid]");

}

$ordertype != 1 ? ksort($postarr) : krsort($postarr);

}

$summary = '';

if($page == 1 && $ordertype == 1) {

$firstpost = C::t('forum_post')->fetch_threadpost_by_tid_invisible($_G['tid']);

if($firstpost['invisible'] == 0 || $visibleallflag == 1) {

$postarr = array_merge(array($firstpost), $postarr);

unset($firstpost);

}

}

$tagnames = $locationpids = $hotpostarr = $hotpids = $member_blackList = array();

$remainhots = ($_G['page'] == 1 && !$rushreply && !$hiddenreplies && !$_G['forum_thread']['special'] && !$_G['forum']['noforumrecommend'] && empty($_GET['authorid'])) ? $_G['setting']['threadhotreplies'] : 0;

if($remainhots) {

$hotpids = array_keys(C::t('forum_hotreply_number')->fetch_all_by_tid_total($_G['tid'], 10));

$remainhots = $remainhots - count($hotpids);

}

if($_G['setting']['nofilteredpost'] && $_G['forum_thread']['replies'] > $_G['setting']['postperpage'] && $remainhots) {

$hotpids = array_merge($hotpids, array_keys(C::t('forum_filter_post')->fetch_all_by_tid_postlength_limit($_G['tid'], $remainhots)));

}

if($hotpids) {

$hotposts = C::t('forum_post')->fetch_all_by_pid($posttableid, $hotpids);

foreach($hotpids as $hotpid) {

if($hotposts[$hotpid]) {

$hotpostarr[$hotpid] = $hotposts[$hotpid];

$hotpostarr[$hotpid]['hotrecommended'] = true;

}

}

unset($hotposts);

}

if($hotpostarr || $sticklist) {

$_newpostarr_first = array_shift($postarr);

$postarr = (array)$sticklist + (array)$hotpostarr + $postarr;

array_unshift($postarr, $_newpostarr_first);

unset($_newpostarr_first, $sticklist);

}

foreach($postarr as $post) {

if(($onlyauthoradd && empty($post['anonymous']) || !$onlyauthoradd) && !isset($postlist[$post['pid']])) {

if(isset($hotpostarr[$post['pid']])) {

$post['existinfirstpage'] = true;

}

$postusers[$post['authorid']] = array();

if($post['first']) {

if($ordertype == 1 && $page != 1) {

continue;

}

$_G['forum_firstpid'] = $post['pid'];

if(IS_ROBOT || $_G['adminid'] == 1) $summary = str_replace(array("\r", "\n"), '', messagecutstr(strip_tags($post['message']), 160));

//处理标签

$tagarray_all = $posttag_array = array();

$tagarray_all = explode("\t", $post['tags']);

if($tagarray_all) {

foreach($tagarray_all as $var) {

if($var) {

$tag = explode(',', $var);

$posttag_array[] = $tag;

$tagnames[] = $tag[1];

}

}

}

$post['tags'] = $posttag_array;

if($post['tags']) {

$post['relateitem'] = getrelateitem($post['tags'], $post['tid'], $_G['setting']['relatenum'], $_G['setting']['relatetime']);

}

if(!$_G['forum']['disablecollect']) { // 判断是否禁止淘帖

if($incollection) {

$post['relatecollection'] = getrelatecollection($post['tid'], false, $post['releatcollectionnum'], $post['releatcollectionmore']);

if($_G['group']['allowcommentcollection'] && $_GET['ctid']) {

$ctid = dintval($_GET['ctid']);

$post['sourcecollection'] = C::t('forum_collection')->fetch($ctid);

}

} else {

$post['releatcollectionnum'] = 0;

}

}

}

$postlist[$post['pid']] = $post;

}

}

unset($hotpostarr);

// SEO设置

$seodata = array('forum' => $_G['forum']['name'], 'fup' => $_G['cache']['forums'][$fup]['name'], 'subject' => $_G['forum_thread']['subject'], 'summary' => $summary, 'tags' => @implode(',', $tagnames), 'page' => intval($_GET['page']));

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

$seotype = 'viewthread';

} else {

$seotype = 'viewthread_group';

$seodata['first'] = $nav['first']['name'];

$seodata['second'] = $nav['second']['name'];

}

list($navtitle, $metadescription, $metakeywords) = get_seosetting($seotype, $seodata);

if(!$navtitle) {

$navtitle = helper_seo::get_title_page($_G['forum_thread']['subject'], $_G['page']).' - '.strip_tags($_G['forum']['name']);

$nobbname = false;

} else {

$nobbname = true;

}

if(!$metakeywords) {

$metakeywords = strip_tags($thread['subject']);

}

if(!$metadescription) {

$metadescription = $summary.' '.strip_tags($_G['forum_thread']['subject']);

}

$_G['allblocked'] = true;

$postno = & $_G['cache']['custominfo']['postno'];

$postnostick = str_replace(array('', ''), '', $postno[0]);

if($postusers) {

$member_verify = $member_field_forum = $member_status = $member_count = $member_profile = $member_field_home = array();

$uids = array_keys($postusers);

$uids = array_filter($uids);

$selfuids = $uids;

if($_G['setting']['threadblacklist'] && $_G['uid'] && !in_array($_G['uid'], $selfuids)) {

$selfuids[] = $_G['uid'];

}

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

if($_G['setting']['verify']['enabled']) {

$member_verify = C::t('common_member_verify')->fetch_all($uids);

foreach($member_verify as $uid => $data) {

foreach($_G['setting']['verify'] as $vid => $verify) {

if($verify['available'] && $verify['showicon']) {

if($data['verify'.$vid] == 1) {

$member_verify[$uid]['verifyicon'][] = $vid;

} elseif (!empty($verify['unverifyicon'])) {

$member_verify[$uid]['unverifyicon'][] = $vid;

}

}

}

}

}

$member_count = C::t('common_member_count')->fetch_all($selfuids);

$member_status = C::t('common_member_status')->fetch_all($uids);

$member_field_forum = C::t('common_member_field_forum')->fetch_all($uids);

$member_profile = C::t('common_member_profile')->fetch_all($uids);

$member_field_home = C::t('common_member_field_home')->fetch_all($uids);

}

if($_G['setting']['threadblacklist'] && $_G['uid'] && $member_count[$_G['uid']]['blacklist']) {

$member_blackList = C::t('home_blacklist')->fetch_all_by_uid_buid($_G['uid'], $uids);

}

foreach(C::t('common_member')->fetch_all($uids) as $uid => $postuser) {

$member_field_home[$uid]['privacy'] = empty($member_field_home[$uid]['privacy']) ? array() : dunserialize($member_field_home[$uid]['privacy']);

$postuser['memberstatus'] = $postuser['status'];

$postuser['authorinvisible'] = $member_status[$uid]['invisible'];

$postuser['signature'] = $member_field_forum[$uid]['sightml'];

unset($member_field_home[$uid]['privacy']['feed'], $member_field_home[$uid]['privacy']['view'], $postuser['status'], $member_status[$uid]['invisible'], $member_field_forum[$uid]['sightml']);

$postusers[$uid] = array_merge((array)$member_verify[$uid], (array)$member_field_home[$uid], (array)$member_profile[$uid], (array)$member_count[$uid], (array)$member_status[$uid], (array)$member_field_forum[$uid], $postuser);

if($postusers[$uid]['regdate'] + $postusers[$uid]['oltime'] * 3600 > TIMESTAMP) {

$postusers[$uid]['oltime'] = 0;

}

$postusers[$uid]['office'] = $postusers[$uid]['position'];

$postusers[$uid]['inblacklist'] = $member_blackList[$uid] ? true : false;

$postusers[$uid]['groupcolor'] = $_G['cache']['usergroups'][$postuser['groupid']]['color'];

unset($postusers[$uid]['position']);

}

unset($member_field_forum, $member_status, $member_count, $member_profile, $member_field_home, $member_blackList);

$_G['medal_list'] = array();

foreach($postlist as $pid => $post) {

if(getstatus($post['status'], 6)) {

$locationpids[] = $pid;

}

$post = array_merge($postlist[$pid], (array)$postusers[$post['authorid']]);

$postlist[$pid] = viewthread_procpost($post, $_G['member']['lastvisit'], $ordertype, $maxposition);

}

}

if($_G['allblocked']) {

$_G['blockedpids'] = array();

}

if($locationpids) {

$locations = C::t('forum_post_location')->fetch_all($locationpids);

}

if($postlist && $rushids) {

foreach($postlist as $pid => $post) {

$post['number'] = $post['position'];

$postlist[$pid] = checkrushreply($post);

}

}

if($_G['setting']['repliesrank'] && $postlist) {

if($postlist) {

foreach(C::t('forum_hotreply_number')->fetch_all_by_pids(array_keys($postlist)) as $pid => $post) {

$postlist[$pid]['postreview']['support'] = dintval($post['support']);

$postlist[$pid]['postreview']['against'] = dintval($post['against']);

}

}

}

if($_G['forum_thread']['special'] > 0 && (empty($_GET['viewpid']) || $_GET['viewpid'] == $_G['forum_firstpid'])) {

$_G['forum_thread']['starttime'] = gmdate($_G['forum_thread']['dateline']);

$_G['forum_thread']['remaintime'] = '';

switch($_G['forum_thread']['special']) {

case 1: require_once libfile('thread/poll', 'include'); break;

case 2: require_once libfile('thread/trade', 'include'); break;

case 3: require_once libfile('thread/reward', 'include'); break;

case 4: require_once libfile('thread/activity', 'include'); break;

case 5: require_once libfile('thread/debate', 'include'); break;

case 127:

if($_G['forum_firstpid']) {

$sppos = strpos($postlist[$_G['forum_firstpid']]['message'], chr(0).chr(0).chr(0));

$specialextra = substr($postlist[$_G['forum_firstpid']]['message'], $sppos + 3);

$postlist[$_G['forum_firstpid']]['message'] = substr($postlist[$_G['forum_firstpid']]['message'], 0, $sppos);

if($specialextra) {

if(array_key_exists($specialextra, $_G['setting']['threadplugins'])) {

@include_once DISCUZ_ROOT.'./source/plugin/'.$_G['setting']['threadplugins'][$specialextra]['module'].'.class.php';

$classname = 'threadplugin_'.$specialextra;

if(class_exists($classname) && method_exists($threadpluginclass = new $classname, 'viewthread')) {

$threadplughtml = $threadpluginclass->viewthread($_G['tid']);

}

}

}

}

break;

}

}

// 自动修复主题回复数, 当主题表记录的回复数和实际回复数不符,则自动修复

if(empty($_GET['authorid']) && empty($postlist)) {

if($rushreply) {

dheader("Location: forum.php?mod=redirect&tid=$_G[tid]&goto=lastpost");

} else {

$replies = C::t('forum_post')->count_visiblepost_by_tid($_G['tid']);

$replies = intval($replies) - 1;

if($_G['forum_thread']['replies'] != $replies && $replies > 0) {

C::t('forum_thread')->update($_G['tid'], array('replies' => $replies), false, false, $archiveid);

dheader("Location: forum.php?mod=redirect&tid=$_G[tid]&goto=lastpost");

}

}

}

if($_G['forum_pagebydesc'] && (!$savepostposition || $_GET['ordertype'] == 1)) {

$postlist = array_reverse($postlist, TRUE);

}

//关闭session时强制使用快速显示(使用lastactiviry的值判断)

if(!empty($_G['setting']['sessionclose'])) {

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

}

if($_G['setting']['vtonlinestatus'] == 2 && $_G['forum_onlineauthors']) {

foreach(C::app()->session->fetch_all_by_uid(array_keys($_G['forum_onlineauthors'])) as $author) {

if(!$author['invisible']) {

$_G['forum_onlineauthors'][$author['uid']] = 1;

}

}

} else {

$_G['forum_onlineauthors'] = array();

}

$ratelogs = $comments = $commentcount = $totalcomment = array();

if($_G['forum_cachepid']) {

foreach(C::t('forum_postcache')->fetch_all($_G['forum_cachepid']) as $postcache) {

if($postcache['rate']) {

$postcache['rate'] = dunserialize($postcache['rate']);

$postlist[$postcache['pid']]['ratelog'] = $postcache['rate']['ratelogs'];

$postlist[$postcache['pid']]['ratelogextcredits'] = $postcache['rate']['extcredits'];

$postlist[$postcache['pid']]['totalrate'] = $postcache['rate']['totalrate'];

}

if($postcache['comment']) {

$postcache['comment'] = dunserialize($postcache['comment']);

$commentcount[$postcache['pid']] = $postcache['comment']['count'];

$comments[$postcache['pid']] = $postcache['comment']['data'];

$totalcomment[$postcache['pid']] = $postcache['comment']['totalcomment'];

}

unset($_G['forum_cachepid'][$postcache['pid']]);

}

$postcache = $ratelogs = array();

if($_G['forum_cachepid']) {

list($ratelogs, $postlist, $postcache) = C::t('forum_ratelog')->fetch_postrate_by_pid($_G['forum_cachepid'], $postlist, $postcache, $_G['setting']['ratelogrecord']);

}

foreach($postlist as $key => $val) {

if(!empty($val['ratelogextcredits'])) {

ksort($postlist[$key]['ratelogextcredits']);

}

}

if($_G['forum_cachepid'] && $_G['setting']['commentnumber']) {

list($comments, $postcache, $commentcount, $totalcomment) = C::t('forum_postcomment')->fetch_postcomment_by_pid($_G['forum_cachepid'], $postcache, $commentcount, $totalcomment, $_G['setting']['commentnumber']);

}

foreach($postcache as $pid => $data) {

C::t('forum_postcache')->insert(array('pid' => $pid, 'rate' => serialize($data['rate']), 'comment' => serialize($data['comment']), 'dateline' => TIMESTAMP), false, true);

}

}

if($_G['forum_attachpids'] && !defined('IN_ARCHIVER')) {

require_once libfile('function/attachment');

if(is_array($threadsortshow) && !empty($threadsortshow['sortaids'])) {

$skipaids = $threadsortshow['sortaids'];

}

parseattach($_G['forum_attachpids'], $_G['forum_attachtags'], $postlist, $skipaids);

}

if(empty($postlist)) {

showmessage('post_not_found');

} elseif(!defined('IN_MOBILE_API')) {

foreach($postlist as $pid => $post) {

$postlist[$pid]['message'] = preg_replace("/\[attach\]\d+\[\/attach\]/i", '', $postlist[$pid]['message']);

}

}

if(defined('IN_ARCHIVER')) {

include loadarchiver('forum/viewthread');

exit();

}

$_G['forum_thread']['heatlevel'] = $_G['forum_thread']['recommendlevel'] = 0;

if($_G['setting']['heatthread']['iconlevels']) {

foreach($_G['setting']['heatthread']['iconlevels'] as $k => $i) {

if($_G['forum_thread']['heats'] > $i) {

$_G['forum_thread']['heatlevel'] = $k + 1;

break;

}

}

}

if(!empty($_G['setting']['recommendthread']['status']) && $_G['forum_thread']['recommends']) {

foreach($_G['setting']['recommendthread']['iconlevels'] as $k => $i) {

if($_G['forum_thread']['recommends'] > $i) {

$_G['forum_thread']['recommendlevel'] = $k+1;

break;

}

}

}

$allowblockrecommend = $_G['group']['allowdiy'] || getstatus($_G['member']['allowadmincp'], 4) || getstatus($_G['member']['allowadmincp'], 5) || getstatus($_G['member']['allowadmincp'], 6);

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

$allowpostarticle = $_G['group']['allowmanagearticle'] || $_G['group']['allowpostarticle'] || getstatus($_G['member']['allowadmincp'], 2) || getstatus($_G['member']['allowadmincp'], 3);

$allowpusharticle = empty($_G['forum_thread']['special']) && empty($_G['forum_thread']['sortid']) && !$_G['forum_thread']['pushedaid'];

} else {

$allowpostarticle = $allowpusharticle = false;

}

if($_G['forum_thread']['displayorder'] != -4) {

$modmenu = array(

'thread' => $_G['forum']['ismoderator'] || $allowblockrecommend || $allowpusharticle && $allowpostarticle,

'post' => $_G['forum']['ismoderator'] && ($_G['group']['allowwarnpost'] || $_G['group']['allowbanpost'] || $_G['group']['allowdelpost'] || $_G['group']['allowstickreply']) || $_G['forum_thread']['pushedaid'] && $allowpostarticle || $_G['forum_thread']['authorid'] == $_G['uid']

);

} else {

$modmenu = array();

}

if($_G['forum']['alloweditpost'] && $_G['uid']) {

$alloweditpost_status = getstatus($_G['setting']['alloweditpost'], $_G['forum_thread']['special'] + 1);

if(!$alloweditpost_status) {

$edittimelimit = $_G['group']['edittimelimit'] * 60;

}

}

if($_G['forum_thread']['replies'] > $_G['forum_thread']['views']) {

$_G['forum_thread']['views'] = $_G['forum_thread']['replies'];

}

require_once libfile('function/upload');

$swfconfig = getuploadconfig($_G['uid'], $_G['fid']);

$_G['forum_thread']['relay'] = 0;

if(getstatus($_G['forum_thread']['status'], 10)) {

//取被转播的次数

$preview = C::t('forum_threadpreview')->fetch($_G['tid']);

$_G['forum_thread']['relay'] = $preview['relay'];

}

if(empty($_GET['viewpid'])) {

$sufix = '';

if($_GET['from'] == 'portal') {

$_G['disabledwidthauto'] = 1;

$_G['widthauto'] = 0;

$sufix = '_portal';

$post = &$postlist[$_G['forum_firstpid']];

} elseif($_GET['from'] == 'preview') {

$_G['disabledwidthauto'] = 1;

$_G['widthauto'] = 0;

$sufix = '_preview';

} elseif($_GET['from'] == 'album') {

$_G['disabledwidthauto'] = 1;

$_G['widthauto'] = 0;

$sufix = '_album';

$post = &$postlist[$_G['forum_firstpid']];

$post['message'] = cutstr(strip_tags(preg_replace('/(.*)/is', '', $post['message'])), 200);

require_once libfile('thread/album', 'include');

}

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

} else {

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

$post = $postlist[$_GET['viewpid']];

if($maxposition) {

$post['number'] = $post['position'];

} else {

$post['number'] = C::t('forum_post')->count_by_tid_dateline($posttableid, $post['tid'], $post['dbdateline']);

}

if($rushreply) {

$post['number'] = $post['position'];

$preg_str = rushreply_rule($rewardfloorarr);

preg_match_all($preg_str, ",,".$post['number'].",,", $arr);

if($post['number'] == str_replace(",", '', $arr['0']['0'])) {

$post['rewardfloor'] = 1;

}

}

include template('common/header_ajax');

hookscriptoutput('viewthread');

$postcount = 0;

if($_GET['from']) {

include template($_GET['from'] == 'preview' ? 'forum/viewthread_preview_node' : 'forum/viewthread_from_node');

} else {

include template('forum/viewthread_node');

}

include template('common/footer_ajax');

}

/**

* 更新查看次数,一处用在主题缓存readfile()后,另一处用在forum.php?mod=viewthread。

*/

function viewthread_updateviews($tableid) {

global $_G;

//存档帖子直接更新

if(!$_G['setting']['preventrefresh'] || $_G['cookie']['viewid'] != 'tid_'.$_G['tid']) {

if(!$tableid && $_G['setting']['optimizeviews']) {

if($_G['forum_thread']['addviews']) {

if($_G['forum_thread']['addviews'] < 100) {

C::t('forum_threadaddviews')->update_by_tid($_G['tid']);

} else {

if(!discuz_process::islocked('update_thread_view')) {

$row = C::t('forum_threadaddviews')->fetch($_G['tid']);

C::t('forum_threadaddviews')->update($_G['tid'], array('addviews' => 0));

C::t('forum_thread')->increase($_G['tid'], array('views' => $row['addviews']+1), true);

discuz_process::unlock('update_thread_view');

}

}

} else {

C::t('forum_threadaddviews')->insert(array('tid' => $_G['tid'], 'addviews' => 1), false, true);

}

} else {

C::t('forum_thread')->increase($_G['tid'], array('views' => 1), true, $tableid);

}

}

//简单的防刷新

dsetcookie('viewid', 'tid_'.$_G['tid']);

}

/**

* 帖子处理

*

* @param aray $post 帖子信息

* @return array

*/

function viewthread_procpost($post, $lastvisit, $ordertype, $maxposition = 0) {

global $_G, $rushreply;

if(!$_G['forum_newpostanchor'] && $post['dateline'] > $lastvisit) {

$post['newpostanchor'] = '

';

$_G['forum_newpostanchor'] = 1;

} else {

$post['newpostanchor'] = '';

}

$post['lastpostanchor'] = ($ordertype != 1 && $_G['forum_numpost'] == $_G['forum_thread']['replies']) || ($ordertype == 1 && $_G['forum_numpost'] == $_G['forum_thread']['replies'] + 2) ? '' : '';

if(!$post['hotrecommended']) {

if($_G['forum_pagebydesc']) {

if($ordertype != 1) {

$post['number'] = $_G['forum_numpost'] + $_G['forum_ppp2']--;

} else {

$post['number'] = $post['first'] == 1 ? 1 : ($_G['forum_numpost'] - 1) - $_G['forum_ppp2']--;

}

} else {

if($ordertype != 1) {

$post['number'] = ++$_G['forum_numpost'];

} else {

$post['number'] = $post['first'] == 1 ? 1 : --$_G['forum_numpost'];

$post['number'] = $post['number'] - 1;

}

}

}

if($post['existinfirstpage']) {

if($_G['forum_pagebydesc']) {

$_G['forum_ppp2']--;

} else {

if($ordertype != 1) {

++$_G['forum_numpost'];

} else {

--$_G['forum_numpost'];

}

}

}

if($maxposition) {

$post['number'] = $post['position'];

}

if($post['hotrecommended']) {

$post['number'] = -1;

}

if(!$_G['forum_thread']['special'] && !$rushreply && !$hiddenreplies && $_G['setting']['threadfilternum'] && getstatus($post['status'], 11)) {

$post['isWater'] = true;

if($_G['setting']['hidefilteredpost'] && !$_G['forum']['noforumhidewater']) {

$post['inblacklist'] = true;

}

} else {

$_G['allblocked'] = false;

}

if($post['inblacklist']) {

$_G['blockedpids'][] = $post['pid'];

}

$_G['forum_postcount']++;

$post['dbdateline'] = $post['dateline'];

$post['dateline'] = dgmdate($post['dateline'], 'u', '9999', getglobal('setting/dateformat').' H:i:s');

$post['groupid'] = $_G['cache']['usergroups'][$post['groupid']] ? $post['groupid'] : 7;

if($post['username']) {

$_G['forum_onlineauthors'][$post['authorid']] = 0;

$post['usernameenc'] = rawurlencode($post['username']);

$post['readaccess'] = $_G['cache']['usergroups'][$post['groupid']]['readaccess'];

if($_G['cache']['usergroups'][$post['groupid']]['userstatusby'] == 1) {

$post['authortitle'] = $_G['cache']['usergroups'][$post['groupid']]['grouptitle'];

$post['stars'] = $_G['cache']['usergroups'][$post['groupid']]['stars'];

}

$post['upgradecredit'] = false;

if($_G['cache']['usergroups'][$post['groupid']]['type'] == 'member' && $_G['cache']['usergroups'][$post['groupid']]['creditslower'] != 999999999) {

$post['upgradecredit'] = $_G['cache']['usergroups'][$post['groupid']]['creditslower'] - $post['credits'];

$post['upgradeprogress'] = 100 - ceil($post['upgradecredit'] / ($_G['cache']['usergroups'][$post['groupid']]['creditslower'] - $_G['cache']['usergroups'][$post['groupid']]['creditshigher']) * 100);

$post['upgradeprogress'] = min(max($post['upgradeprogress'], 2), 100);

}

$post['taobaoas'] = addslashes($post['taobao']);

$post['regdate'] = dgmdate($post['regdate'], 'd');

$post['lastdate'] = dgmdate($post['lastvisit'], 'd');

$post['authoras'] = !$post['anonymous'] ? ' '.addslashes($post['author']) : '';

if($post['medals']) {

loadcache('medals');

foreach($post['medals'] = explode("\t", $post['medals']) as $key => $medalid) {

list($medalid, $medalexpiration) = explode("|", $medalid);

if(isset($_G['cache']['medals'][$medalid]) && (!$medalexpiration || $medalexpiration > TIMESTAMP)) {

$post['medals'][$key] = $_G['cache']['medals'][$medalid];

$post['medals'][$key]['medalid'] = $medalid;

// 勋章showmenu时用的

$_G['medal_list'][$medalid] = $_G['cache']['medals'][$medalid];

} else {

unset($post['medals'][$key]);

}

}

}

$post['avatar'] = avatar($post['authorid']);

$post['groupicon'] = $post['avatar'] ? g_icon($post['groupid'], 1) : '';

$post['banned'] = $post['status'] & 1;

$post['warned'] = ($post['status'] & 2) >> 1;

} else {

if(!$post['authorid']) {

$post['useip'] = substr($post['useip'], 0, strrpos($post['useip'], '.')).'.x';

}

}

//debug 帖子里面的附件

$post['attachments'] = array();

$post['imagelist'] = $post['attachlist'] = '';

if($post['attachment']) {

if((!empty($_G['setting']['guestviewthumb']['flag']) && !$_G['uid']) || $_G['group']['allowgetattach'] || $_G['group']['allowgetimage']) {

$_G['forum_attachpids'][] = $post['pid'];

$post['attachment'] = 0;

if(preg_match_all("/\[attach\](\d+)\[\/attach\]/i", $post['message'], $matchaids)) {

$_G['forum_attachtags'][$post['pid']] = $matchaids[1];

}

} else {

$post['message'] = preg_replace("/\[attach\](\d+)\[\/attach\]/i", '', $post['message']);

}

}

if($_G['setting']['ratelogrecord'] && $post['ratetimes']) {

$_G['forum_cachepid'][$post['pid']] = $post['pid'];

}

if($_G['setting']['commentnumber'] && ($post['first'] && $_G['setting']['commentfirstpost'] || !$post['first']) && $post['comment']) {

$_G['forum_cachepid'][$post['pid']] = $post['pid'];

}

$post['allowcomment'] = $_G['setting']['commentnumber'] && in_array(1, $_G['setting']['allowpostcomment']) && ($_G['setting']['commentpostself'] || $post['authorid'] != $_G['uid']) &&

($post['first'] && $_G['setting']['commentfirstpost'] && in_array($_G['group']['allowcommentpost'], array(1, 3)) ||

(!$post['first'] && in_array($_G['group']['allowcommentpost'], array(2, 3))));

$forum_allowbbcode = $_G['forum']['allowbbcode'] ? -$post['groupid'] : 0;

$post['signature'] = $post['usesig'] ? ($_G['setting']['sigviewcond'] ? (strlen($post['message']) > $_G['setting']['sigviewcond'] ? $post['signature'] : '') : $post['signature']) : '';

$imgcontent = $post['first'] ? getstatus($_G['forum_thread']['status'], 15) : 0;

if(!defined('IN_ARCHIVER')) {

if($post['first']) {

if(!defined('IN_MOBILE')) {

$messageindex = false;

if(strpos($post['message'], '[/index]') !== FALSE) {

$post['message'] = preg_replace("/\s?\[index\](.+?)\[\/index\]\s?/ies", "parseindex('\\1', '$post[pid]')", $post['message']);

$messageindex = true;

unset($_GET['threadindex']);

}

if(strpos($post['message'], '[page]') !== FALSE) {

if($_GET['cp'] != 'all') {

$postbg = '';

if(strpos($post['message'], '[/postbg]') !== FALSE) {

preg_match("/\s?\[postbg\]\s*([^\[\

$postbg = $r[0];

}

$messagearray = explode('[page]', $post['message']);

$cp = max(intval($_GET['cp']), 1);

$post['message'] = $messagearray[$cp - 1];

if($postbg && strpos($post['message'], '[/postbg]') === FALSE) {

$post['message'] = $postbg.$post['message'];

}

unset($postbg);

} else {

$cp = 0;

$post['message'] = preg_replace("/\s?\[page\]\s?/is", '', $post['message']);

}

if($_GET['cp'] != 'all' && strpos($post['message'], '[/index]') === FALSE && empty($_GET['threadindex']) && !$messageindex) {

$_G['forum_posthtml']['footer'][$post['pid']] .= '

';

}

}

}

}

if(!empty($_GET['threadindex'])) {

$_G['forum_posthtml']['header'][$post['pid']] .= '

';

}

if(!$imgcontent) {

$post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], $post['htmlon'] & 1, $_G['forum']['allowsmilies'], $forum_allowbbcode, ($_G['forum']['allowimgcode'] && $_G['setting']['showimages'] ? 1 : 0), $_G['forum']['allowhtml'], ($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0), 0, $post['authorid'], $_G['cache']['usergroups'][$post['groupid']]['allowmediacode'] && $_G['forum']['allowmediacode'], $post['pid'], $_G['setting']['lazyload'], $post['dbdateline'], $post['first']);

if($post['first']) {

$_G['relatedlinks'] = '';

$relatedtype = !$_G['forum_thread']['isgroup'] ? 'forum' : 'group';

if(!$_G['setting']['relatedlinkstatus']) {

$_G['relatedlinks'] = get_related_link($relatedtype);

} else {

$post['message'] = parse_related_link($post['message'], $relatedtype);

}

if(strpos($post['message'], '[/begin]') !== FALSE) {

$post['message'] = preg_replace("/\[begin(=\s*([^\[\

}

}

}

}

if(defined('IN_ARCHIVER') || defined('IN_MOBILE') || !$post['first']) {

if(strpos($post['message'], '[page]') !== FALSE) {

$post['message'] = preg_replace("/\s?\[page\]\s?/is", '', $post['message']);

}

if(strpos($post['message'], '[/index]') !== FALSE) {

$post['message'] = preg_replace("/\s?\[index\](.+?)\[\/index\]\s?/is", '', $post['message']);

}

if(strpos($post['message'], '[/begin]') !== FALSE) {

$post['message'] = preg_replace("/\[begin(=\s*([^\[\

}

}

if($imgcontent) {

$post['message'] = ''.stringtopic('',%20%24post%5B'tid'%5D).'';

}

$_G['forum_firstpid'] = intval($_G['forum_firstpid']);

$post['numbercard'] = viewthread_numbercard($post);

$post['mobiletype'] = getstatus($post['status'], 4) ? base_convert(getstatus($post['status'], 10).getstatus($post['status'], 9).getstatus($post['status'], 8), 2, 10) : 0;

return $post;

}

function viewthread_loadcache() {

global $_G;

$_G['forum']['livedays'] = ceil((TIMESTAMP - $_G['forum']['dateline']) / 86400);

$_G['forum']['lastpostdays'] = ceil((TIMESTAMP - $_G['forum']['lastthreadpost']) / 86400);

//debug 置顶:0-45, 精华:0-30 查看数&帖子存在时间:0-50 回复数&最后回复天数:15天以内的回复

$threadcachemark = 100 - (

$_G['forum']['displayorder'] * 15 +

$_G['thread']['digest'] * 10 +

min($_G['thread']['views'] / max($_G['forum']['livedays'], 10) * 2, 50) +

max(-10, (15 - $_G['forum']['lastpostdays'])) +

min($_G['thread']['replies'] / $_G['setting']['postperpage'] * 1.5, 15));

//debug 如果满足缓存系数

if($threadcachemark < $_G['forum']['threadcaches']) {

//debug 检查缓存文件,如果不存在相应目录则创建目录。

$threadcache = getcacheinfo($_G['tid']);

//debug 如果过期或者不存在,则定义缓存文件。output() 将其缓存到 CACHE_FILE 。

if(TIMESTAMP - $threadcache['filemtime'] > $_G['setting']['cachethreadlife']) {

@unlink($threadcache['filename']);

define('CACHE_FILE', $threadcache['filename']);

} else {

readfile($threadcache['filename']);

//debug 更新点击数

viewthread_updateviews($_G['forum_thread']['threadtableid']);

$_G['setting']['debug'] && debuginfo();

$_G['setting']['debug'] ? die('') : die();

}

}

}

/**

* 获取主题的被管理信息或被使用道具信息

* @global $_G

* @param array $thread 主题数据

* @return array

*/

function viewthread_lastmod(&$thread) {

global $_G;

if(!$thread['moderated']) {

return array();

}

$lastmod = array();

$lastlog = C::t('forum_threadmod')->fetch_by_tid($thread['tid']);

if($lastlog) {

$lastmod = array(

'moduid' => $lastlog['uid'],

'modusername' => $lastlog['username'],

'moddateline' => $lastlog['dateline'],

'modaction' => $lastlog['action'],

'magicid' => $lastlog['magicid'],

'stamp' => $lastlog['stamp'],

'reason' => $lastlog['reason']

);

}

if($lastmod) {

$modactioncode = lang('forum/modaction');

$lastmod['modusername'] = $lastmod['modusername'] ? $lastmod['modusername'] : 'System';

$lastmod['moddateline'] = dgmdate($lastmod['moddateline'], 'u');

$lastmod['modactiontype'] = $lastmod['modaction'];

if($modactioncode[$lastmod['modaction']]) {

$lastmod['modaction'] = $modactioncode[$lastmod['modaction']].($lastmod['modaction'] != 'SPA' ? '' : ' '.$_G['cache']['stamps'][$lastmod['stamp']]['text']);

} elseif(substr($lastmod['modaction'], 0, 1) == 'L' && preg_match('/L(\d\d)/', $lastmod['modaction'], $a)) {

$lastmod['modaction'] = $modactioncode['SLA'].' '.$_G['cache']['stamps'][intval($a[1])]['text'];

} else {

$lastmod['modaction'] = '';

}

if($lastmod['magicid']) {

loadcache('magics');

$lastmod['magicname'] = $_G['cache']['magics'][$lastmod['magicid']]['name'];

}

} else {

C::t('forum_thread')->update($thread['tid'], array('moderated' => 0), false, false, $thread['threadtableid']);

$thread['moderated'] = 0;

}

return $lastmod;

}

function viewthread_baseinfo($post, $extra) {

global $_G;

list($key, $type) = $extra;

$v = '';

if(substr($key, 0, 10) == 'extcredits') {

$i = substr($key, 10);

$extcredit = $_G['setting']['extcredits'][$i];

if($extcredit) {

$v = $type ? ($extcredit['img'] ? $extcredit['img'].' ' : '').$extcredit['title'] : $post['extcredits'.$i].' '.$extcredit['unit'];

}

} elseif(substr($key, 0, 6) == 'field_') {

$field = substr($key, 6);

if(!empty($post['privacy']['profile'][$field])) {

return '';

}

require_once libfile('function/profile');

if($field != 'qq') {

$v = profile_show($field, $post);

} elseif(!empty($post['qq'])) {

$v = 'QQ';

}

if($v) {

if(!isset($_G['cache']['profilesetting'])) {

loadcache('profilesetting');

}

$v = $type ? $_G['cache']['profilesetting'][$field]['title'] : $v;

}

} elseif($key == 'eccredit_seller') {

$v = $type ? lang('space', 'viewthread_userinfo_sellercredit') : ''.countlevel(%24post%5B'buyercredit'%5D).'.gif';

} elseif($key == 'eccredit_buyer') {

$v = $type ? lang('space', 'viewthread_userinfo_buyercredit') : ''.countlevel(%24post%5B'sellercredit'%5D).'.gif';

} else {

$v = getLinkByKey($key, $post);

if($v !== '') {

$v = $type ? lang('space', 'viewthread_userinfo_'.$key) : $v;

}

}

return $v;

}

function viewthread_profile_nodeparse($param) {

list($name, $s, $e, $extra, $post) = $param;

if(strpos($name, ':') === false) {

if(function_exists('profile_node_'.$name)) {

return call_user_func('profile_node_'.$name, $post, $s, $e, explode(',', $extra));

} else {

return '';

}

} else {

list($plugin, $pluginid) = explode(':', $name);

if($plugin == 'plugin') {

global $_G;

static $pluginclasses;

if(isset($_G['setting']['plugins']['profile_node'][$pluginid])) {

@include_once DISCUZ_ROOT.'./source/plugin/'.$_G['setting']['plugins']['profile_node'][$pluginid].'.class.php';

$classkey = 'plugin_'.$pluginid;

if(!class_exists($classkey, false)) {

return '';

}

if(!isset($pluginclasses[$classkey])) {

$pluginclasses[$classkey] = new $classkey;

}

return call_user_func(array($pluginclasses[$classkey], 'profile_node'), $post, $s, $e, explode(',', $extra));

}

}

}

}

function viewthread_profile_node($type, $post) {

global $_G;

$tpid = false;

if($post['verifyicon']) {

$tpid = isset($_G['setting']['profilenode']['groupid'][-$post['verifyicon'][0]]) ? $_G['setting']['profilenode']['groupid'][-$post['verifyicon'][0]] : false;

}

if($tpid === false) {

$tpid = isset($_G['setting']['profilenode']['groupid'][$post['groupid']]) ? $_G['setting']['profilenode']['groupid'][$post['groupid']] : 0;

}

$template = $_G['setting']['profilenode']['template'][$tpid][$type];

$code = $_G['setting']['profilenode']['code'][$tpid][$type];

include_once template('forum/viewthread_profile_node');

foreach($code as $k => $p) {

$p[] = $post;

$template = str_replace($k, call_user_func('viewthread_profile_nodeparse', $p), $template);

}

echo $template;

}

function viewthread_numbercard($post) {

global $_G;

if(!is_array($_G['setting']['numbercard'])) {

$_G['setting']['numbercard'] = dunserialize($_G['setting']['numbercard']);

}

$numbercard = array();

foreach($_G['setting']['numbercard']['row'] as $key) {

if(substr($key, 0, 10) == 'extcredits') {

$numbercard[] = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=profile', 'value' => $post[$key], 'lang' => $_G['setting']['extcredits'][substr($key, 10)]['title']);

} else {

$getLink = getLinkByKey($key, $post, 1);

$numbercard[] = array('link' => $getLink['link'], 'value' => $getLink['value'], 'lang' => lang('space', 'viewthread_userinfo_'.$key));

}

}

return $numbercard;

}

function getLinkByKey($key, $post, $returnarray = 0) {

switch($key) {

case 'uid': $v = array('link' => '?'.$post['uid'], 'value' => $post['uid']);break;

case 'posts': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=thread&type=reply&view=me&from=space', 'value' => $post['posts']);break;

case 'threads': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=thread&type=thread&view=me&from=space', 'value' => $post['threads']);break;

case 'digestposts': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=thread&type=thread&view=me&from=space', 'value' => $post['digestposts']);break;

case 'feeds': $v = array('link' => 'home.php?mod=follow&uid='.$post['uid'].'&do=view', 'value' => $post['feeds']);break;

case 'doings': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=doing&view=me&from=space', 'value' => $post['doings']);break;

case 'blogs': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=blog&view=me&from=space', 'value' => $post['blogs']);break;

case 'albums': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=album&view=me&from=space', 'value' => $post['albums']);break;

case 'sharings': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=share&view=me&from=space', 'value' => $post['sharings']);break;

case 'friends': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=friend&view=me&from=space', 'value' => $post['friends']);break;

case 'follower': $v = array('link' => 'home.php?mod=follow&do=follower&uid='.$post['uid'], 'value' => $post['follower']);break;

case 'following': $v = array('link' => 'home.php?mod=follow&do=following&uid='.$post['uid'], 'value' => $post['following']);break;

case 'credits': $v = array('link' => 'home.php?mod=space&uid='.$post['uid'].'&do=profile', 'value' => $post['credits']);break;

case 'digest': $v = array('value' => $post['digestposts']);break;

case 'readperm': $v = array('value' => $post['readaccess']);break;

case 'regtime': $v = array('value' => $post['regdate']);break;

case 'lastdate': $v = array('value' => $post['lastdate']);break;

case 'oltime': $v = array('value' => $post['oltime'].' '.lang('space', 'viewthread_userinfo_hour'));break;

}

if(!$returnarray) {

if($v['link']) {

$v = ''.$v['value'].'';

} else {

$v = $v['value'];

}

}

return $v;

}

function countlevel($usercredit) {

global $_G;

$rank = 0;

if($usercredit){

foreach($_G['setting']['ec_credit']['rank'] AS $level => $credit) {

if($usercredit <= $credit) {

$rank = $level;

break;

}

}

}

return $rank;

}

function remaintime($time) {

$days = intval($time / 86400);

$time -= $days * 86400;

$hours = intval($time / 3600);

$time -= $hours * 3600;

$minutes = intval($time / 60);

$time -= $minutes * 60;

$seconds = $time;

return array((int)$days, (int)$hours, (int)$minutes, (int)$seconds);

}

function getrelateitem($tagarray, $tid, $relatenum, $relatetime, $relatecache = '', $type = 'tid') {

$tagidarray = $relatearray = $relateitem = array();

$updatecache = 0;

$limit = $relatenum;

if(!$limit) {

return '';

}

foreach($tagarray as $var) {

$tagidarray[] = $var['0'];

}

if(!$tagidarray) {

return '';

}

if(empty($relatecache)) {

$thread = C::t('forum_thread')->fetch($tid);

$relatecache = $thread['relatebytag'];

}

if($relatecache) {

$relatecache = explode("\t", $relatecache);

if(TIMESTAMP > $relatecache[0] + $relatetime * 60) {

$updatecache = 1;

} else {

if(!empty($relatecache[1])) {

$relatearray = explode(',', $relatecache[1]);

}

}

} else {

$updatecache = 1;

}

if($updatecache) {

$query = C::t('common_tagitem')->select($tagidarray, $tid, $type, 'itemid', 'DESC', $limit, 0, '<>');

foreach($query as $result) {

if($result['itemid']) {

$relatearray[] = $result['itemid'];

}

}

if($relatearray) {

$relatebytag = implode(',', $relatearray);

}

C::t('forum_thread')->update($tid, array('relatebytag'=>TIMESTAMP."\t".$relatebytag));

}

if(!empty($relatearray)) {

rsort($relatearray);

foreach(C::t('forum_thread')->fetch_all_by_tid($relatearray) as $result) {

if($result['displayorder'] >= 0) {

$relateitem[] = $result;

}

}

}

return $relateitem;

}

/*

* 抢楼规则正则制作

*/

function rushreply_rule () {

global $rushresult;

if(!empty($rushresult['rewardfloor'])) {

$rushresult['rewardfloor'] = preg_replace('/\*+/', '*', $rushresult['rewardfloor']);

$rewardfloorarr = explode(',', $rushresult['rewardfloor']);

if($rewardfloorarr) {

foreach($rewardfloorarr as $var) {

$var = trim($var);

if(strlen($var) > 1) {

$var = str_replace('*', '[^,]?[\d]*', $var);

} else {

$var = str_replace('*', '\d+', $var);

}

$preg[] = "(,$var,)";

}

$preg_str = "/".implode('|', $preg)."/";

}

}

return $preg_str;

}

function checkrushreply($post) {

global $_G, $rushids;

if($_GET['authorid']) {

return $post;

}

if(in_array($post['number'], $rushids)) {

$post['rewardfloor'] = 1;

}

return $post;

}

function parseindex($nodes, $pid) {

global $_G;

$nodes = dhtmlspecialchars($nodes);

$nodes = preg_replace('/(\**?)\[#(\d+)\](.+?)[\r\n]/', "\\3", $nodes);

$nodes = preg_replace('/(\**?)\[#(\d+),(\d+)\](.+?)[\r\n]/', "\\4", $nodes);

$_G['forum_posthtml']['header'][$pid] .= '

'.$nodes.'
';

return '';

}

function parsebegin($linkaddr, $imgflashurl, $w = 0, $h = 0, $type = 0, $s = 0) {

static $begincontent;

if($begincontent || $_GET['from'] == 'preview') {

return '';

}

preg_match("/((https?){1}:\/\/|www\.)[^\[\"']+/i", $imgflashurl, $matches);

$imgflashurl = $matches[0];

$fileext = fileext($imgflashurl);

$randomid = 'swf_'.random(3);

$w = ($w >=400 && $w <=1024) ? $w : 900;

$h = ($h >=300 && $h <=640) ? $h : 500;

$s = $s ? $s*1000 : 5000;

switch($fileext) {

case 'jpg':

case 'jpeg':

case 'gif':

case 'png':

$content = ''.%24imgflashurl.'';

break;

case 'flv':

$content = ''.

'

'AC_FL_RunContent(\'width\', \''.$w.'\', \'height\', \''.$h.'\', '.

'\'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', '.

'\'src\', \''.STATICURL.'image/common/flvplayer.swf\', '.

'\'flashvars\', \'file='.rawurlencode($imgflashurl).'\', \'quality\', \'high\', '.

'\'wmode\', \'transparent\', \'allowfullscreen\', \'true\');';

break;

case 'swf':

$content = ''.

'

'AC_FL_RunContent(\'width\', \''.$w.'\', \'height\', \''.$h.'\', '.

'\'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', '.

'\'src\', encodeURI(\''.$imgflashurl.'\'), \'quality\', \'high\', \'bgcolor\', \'#ffffff\', '.

'\'wmode\', \'transparent\', \'allowfullscreen\', \'true\');';

break;

default:

$content = '';

}

if($content) {

if($type == 1) {

$content = '

'.

'

'.lang('core', 'close').'
'.

$content.'

'.

'

'.

'';

} else {

$content = '

'.

'

'.lang('core', 'close').'
'.

$content.'

'.

'

'.

'';

}

}

$begincontent = $content;

return $content;

}

function _checkviewgroup() {

global $_G;

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

require_once libfile('function/group');

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

if($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']);

}

}

?>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

discuz viewthread.php,discuzx/forum_viewthread.php at master · xianhuawei/discuzx · GitHub 的相关文章

  • Symfony 4.1 组件 - 依赖注入问题

    我正在用 PHP 重构旧应用程序 我正在尝试使用 Symfony 依赖注入组件将服务注入控制器 或其他服务 但我不知道如何实现这一点 因为 symphony 文档比框架组件更适合使用框架 我已经有了自己的内核 包含所有服务和控制器的容器 控
  • 使用 PHP 将子项添加到 XML 文件

    添加子项时 抛出此错误 无法添加孩子 父级不是 XML 树的永久成员 我无法解决这个问题 这是我的代码 if visited FIRST xml new SimpleXMLElement
  • php paypal 服务器端 REST 集成失败

    我无法发布代码 错误等 因为 你需要至少 10 个声誉才能发布 2 个以上的链接 并且所有内容都包含很多链接 只是花了几个小时写了一篇完整详细的帖子 我在这里 和其他地方 读过类似的帖子 但它们没有帮助 我基本上遵循 https devel
  • PHP - SQLite 与 SQLite3

    我已经使用 SQLite 2 8 17 制作了一个 Web 应用程序 我现在才发现有一个 SQLite3 在制作 Web 应用程序时 它以某种方式逃避了我的注意 可能是由于缺少 php 函数的文档 我想知道 使用 SQLite3 比 SQL
  • 此集合实例 Laravel 关系中不存在属性 [X]

    我在 Laravel 5 6 中使用了很多 Realtions 当我添加 phonebooks 时 我看到所有关系都工作正常 一切都很好 但是当我尝试在视图中显示它们时 我得到了属性在此集合上不存在的错误 这是关系代码 public fun
  • mvc 中的模型(最佳实践,PHP)

    我知道有很多关于 MVC 和最佳实践的文章和问题 但我找不到这样的简单示例 假设我必须用 PHP 开发一个 Web 应用程序 我想遵循 MVC 模式 没有框架 该应用程序应该有一个简单的书籍 CRUD 我想从控制器获取我商店中的所有书籍 保
  • laravel Blade 模板不渲染

    进入 Laravel 后 我尝试使用 Blade 模板 但它没有渲染 我的所有示例都来自 Laravel 文档 UPDATE 所以这是我的master blade php 文件位于资源 gt 视图 gt master blade php y
  • PHP三元运算符错误[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 三元运算符未按预期工作 https stackoverflow com questions 14214427 php ternary operator not working as expec
  • 如何捕获 Symfony2/Silex 中的错误和异常?

    我想在我的 Silex 应用程序中捕获错误和异常 将它们包装在始终返回给客户端的自定义 JSON 响应中 我发现了三种基本方法 app gt error Symfony Component Debug ErrorHandler regist
  • PHP Imagick - “-量化透明”等效项

    是否有 PHP Imagick 等效项 quantize transparent 量化透明使用示例 http www imagemagick org Usage quantize color trans注意 在页面中搜索 量化透明 Quan
  • php_zip 在 php 5.3.5 中不存在

    我正在使用 PHPExcel 要求之一是我需要启用 php zip 如果您需要 PHPExcel 来处理 xlsx 或 ods 文件 您将需要 邮政编码扩展名 我正在使用 PHP v5 3 5 并在我的php ini文件中 我有以下几行 e
  • 自动安排并执行 PHP 脚本

    我编写了一个 PHP 脚本 它生成一个包含数据库中所有表的 SQL 文件 我想要做的是每天或每 n 天执行这个脚本 我读过有关 cron 作业的内容 但我使用的是 Windows 如何在服务器上自动执行脚本 您需要添加计划任务来调用 URL
  • 撇号 php 问题

    我正在做一项涉及喊话箱的学校作业 一个很棒的教程 它使用 jquery ajax mysql 和 php 现在我遇到了以下句子的一个小问题 result li strong row user strong img src alt row m
  • Woocommerce 预订中每人和每件商品的动态结账自定义字段

    对于预订网站 我正在尝试创建一个功能 可以根据人数添加与会者列表 感谢 LoicTheAztec 我已经获得了单次预订的代码 那部分工作正常 我还需要相同的功能来进行多次预订 我怎样才能实现这个目标 这是代码 Add a new check
  • 使用 PHP 比较两个字符串的相似度

    嘿伙计们 我想寻求一些解决方案 现在我有字典了单词 txt 这里有一些例子 happy laugh sad 我有俚语字符串 hppy 我想要搜索和匹配那个俚语字符串我的字典这意味着它将返回 happy 因为这些字符串参考 快乐 in 字典
  • 在php中将数组写入文件并获取数据

    我有一个数组 使用后如下所示print r Array 0 gt Array 0 gt piklu name gt piklu 1 gt Array 0 gt arindam name gt arindam 2 gt Array 0 gt
  • 关闭旧的 php websocket

    我在用PHP Websockets https github com ghedipunk PHP Websockets创建一个简单的聊天服务器 当我第一次运行在我的服务器上创建 websocket 的 php 脚本时 一切正常 如果脚本由于
  • 如何测试“If-Modified-Since”HTTP 标头支持

    使用 PHP 如何准确测试远程网站supports If Modified Since HTTP 标头 据我所知 如果您获取的远程文件自标头请求中指定的日期以来已被修改 它应该返回 200 OK 状态 如果尚未修改 则应返回 304 Not
  • 如何使用 php 创建谷歌双因素身份验证?

    我想在我的 PHP 项目中使用 Google 2FA 用户登录时需要输入6位2fa代码 您可以画出一些关于该朝哪个方向走的提示吗 步骤 1 创建长度为 16 个字符的唯一密码 PHPGangsta 为 Google Authenticato
  • PHPExcel输出乱码

    我正在尝试 PHPExcel 附带的简单示例 01simple xls 我得到乱码输出 它 LibreOffice 想要导入文件 它认为字符集是西欧 DOS OS2 861 icelandic 输出是这样的

随机推荐