DiscuzX/upload/source/include/space/space_thread.php

361 lines
10 KiB
PHP

<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: space_thread.php 31365 2012-08-20 03:19:33Z zhengqingpeng $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
$minhot = $_G['setting']['feedhotmin']<1?3:$_G['setting']['feedhotmin'];
$page = empty($_GET['page'])?1:intval($_GET['page']);
if($page<1) $page=1;
$id = empty($_GET['id'])?0:intval($_GET['id']);
$opactives['thread'] = 'class="a"';
if(empty($_GET['view'])) $_GET['view'] = 'me';
$_GET['order'] = empty($_GET['order']) ? 'dateline' : $_GET['order'];
$allowviewuserthread = $_G['setting']['allowviewuserthread'];
$perpage = 20;
$start = ($page-1)*$perpage;
ckstart($start, $perpage);
$list = array();
$userlist = array();
$hiddennum = $count = $pricount = 0;
$_GET['from'] = dhtmlspecialchars(preg_replace("/[^\[A-Za-z0-9_\]]/", '', $_GET['from']));
$gets = array(
'mod' => 'space',
'uid' => $space['uid'],
'do' => 'thread',
'fid' => $_GET['fid'],
'view' => $_GET['view'],
'type' => $_GET['type'],
'order' => $_GET['order'],
'fuid' => $_GET['fuid'],
'searchkey' => $_GET['searchkey'],
'from' => $_GET['from'],
'filter' => $_GET['filter']
);
$theurl = 'home.php?'.url_implode($gets);
unset($gets['fid']);
$forumurl = 'home.php?'.url_implode($gets);
$multi = '';
$authorid = 0;
$replies = $closed = $displayorder = null;
$dglue = '=';
$vfid = $_GET['fid'] ? intval($_GET['fid']) : null;
require_once libfile('function/misc');
require_once libfile('function/forum');
loadcache(array('forums'));
$fids = $comma = '';
if($_GET['view'] != 'me') {
$displayorder = 0;
$dglue = '>=';
}
$f_index = '';
$ordersql = 't.dateline DESC';
$need_count = true;
$viewuserthread = false;
$listcount = 0;
if($_GET['view'] == 'me') {
if($_GET['from'] == 'space') $diymode = 1;
$allowview = true;
$viewtype = in_array($_GET['type'], array('reply', 'thread', 'postcomment')) ? $_GET['type'] : 'thread';
$filter = in_array($_GET['filter'], array('recyclebin', 'ignored', 'save', 'aduit', 'close', 'common')) ? $_GET['filter'] : '';
if($space['uid'] != $_G['uid'] && in_array($viewtype, array('reply', 'thread'))) {
if($allowviewuserthread === -1 && $_G['adminid'] != 1) {
$allowview = false;
}
if($allowview) {
$viewuserthread = true;
$viewfids = str_replace("'", '', $allowviewuserthread);
if(!empty($viewfids)) {
$viewfids = explode(',', $viewfids);
}
}
}
if($viewtype == 'thread' && $allowview) {
$authorid = $space['uid'];
if($filter == 'recyclebin') {
$displayorder = -1;
} elseif($filter == 'aduit') {
$displayorder = -2;
} elseif($filter == 'ignored') {
$displayorder = -3;
} elseif($filter == 'save') {
$displayorder = -4;
} elseif($filter == 'close') {
$closed = 1;
} elseif($filter == 'common') {
$closed = 0;
$displayorder = 0;
$dglue = '>=';
}
$ordersql = 't.tid DESC';
} elseif($viewtype == 'postcomment') {
$posttable = getposttable();
require_once libfile('function/post');
$pids = $tids = array();
$postcommentarr = C::t('forum_postcomment')->fetch_all_by_authorid($_G['uid'], $start, $perpage);
foreach($postcommentarr as $value) {
$pids[] = $value['pid'];
$tids[] = $value['tid'];
}
$pids = C::t('forum_post')->fetch_all(0, $pids);
$tids = C::t('forum_thread')->fetch_all($tids);
$list = $fids = array();
foreach($postcommentarr as $value) {
$value['authorid'] = $pids[$value['pid']]['authorid'];
$value['fid'] = $pids[$value['pid']]['fid'];
$value['invisible'] = $pids[$value['pid']]['invisible'];
$value['dateline'] = $pids[$value['pid']]['dateline'];
$value['message'] = $pids[$value['pid']]['message'];
$value['special'] = $tids[$value['tid']]['special'];
$value['status'] = $tids[$value['tid']]['status'];
$value['subject'] = $tids[$value['tid']]['subject'];
$value['digest'] = $tids[$value['tid']]['digest'];
$value['attachment'] = $tids[$value['tid']]['attachment'];
$value['replies'] = $tids[$value['tid']]['replies'];
$value['views'] = $tids[$value['tid']]['views'];
$value['lastposter'] = $tids[$value['tid']]['lastposter'];
$value['lastpost'] = $tids[$value['tid']]['lastpost'];
$value['tid'] = $pids[$value['pid']]['tid'];
$fids[] = $value['fid'];
$value['comment'] = messagecutstr($value['comment'], 100);
$list[] = procthread($value);
}
unset($pids, $tids, $postcommentarr);
if($fids) {
$fids = array_unique($fids);
$query = C::t('forum_forum')->fetch_all($fids);
foreach($query as $forum) {
$forums[$forum['fid']] = $forum['name'];
}
}
$multi = simplepage(count($list), $perpage, $page, $theurl);
$need_count = false;
} elseif($allowview) {
$invisible = null;
$postsql = $threadsql = '';
if($filter == 'recyclebin') {
$invisible = -5;
} elseif($filter == 'aduit') {
$invisible = -2;
} elseif($filter == 'save' || $filter == 'ignored') {
$invisible = -3;
$displayorder = -4;
} elseif($filter == 'close') {
$closed = 1;
} elseif($filter == 'common') {
$invisible = 0;
$displayorder = 0;
$dglue = '>=';
$closed = 0;
} else {
if($space['uid'] != $_G['uid']) {
$invisible = 0;
}
}
require_once libfile('function/post');
$posts = C::t('forum_post')->fetch_all_by_authorid(0, $space['uid'], true, 'DESC', $start, $perpage, 0, $invisible, $vfid);
$listcount = count($posts);
foreach($posts as $pid => $post) {
$delrow = false;
if($post['anonymous'] && $post['authorid'] != $_G['uid']) {
$delrow = true;
} elseif($viewuserthread && $post['authorid'] != $_G['uid']) {
if(($_G['adminid'] != 1 && !empty($viewfids) && !in_array($post['fid'], $viewfids))) {
$delrow = true;
}
}
if($delrow) {
unset($posts[$pid]);
$hiddennum++;
continue;
} else {
$tids[$post['tid']][] = $pid;
$post['message'] = !getstatus($post['status'], 2) || $post['authorid'] == $_G['uid'] ? messagecutstr($post['message'], 100) : '';
$posts[$pid] = $post;
}
}
if(!empty($tids)) {
$threads = C::t('forum_thread')->fetch_all_by_tid_displayorder(array_keys($tids), $displayorder, $dglue, array(), $closed);
foreach($threads as $tid => $thread) {
$delrow = false;
if($_G['adminid'] != 1 && $thread['displayorder'] < 0) {
$delrow = true;
} elseif($_G['adminid'] != 1 && $_G['uid'] != $thread['authorid'] && getstatus($thread['status'], 2)) {
$delrow = true;
} elseif(!isset($_G['cache']['forums'][$thread['fid']])) {
if(!$_G['setting']['groupstatus']) {
$delrow = true;
} else {
$gids[$thread['fid']] = $thread['tid'];
}
}
if($delrow) {
foreach($tids[$tid] as $pid) {
unset($posts[$pid]);
$hiddennum++;
}
unset($tids[$tid]);
unset($threads[$tid]);
continue;
} else {
$threads[$tid] = procthread($thread);
$forums[$thread['fid']] = $threads[$tid]['forumname'];
}
}
if(!empty($gids)) {
$groupforums = C::t('forum_forum')->fetch_all_name_by_fid(array_keys($gids));
foreach($gids as $fid => $tid) {
$threads[$tid]['forumname'] = $groupforums[$fid]['name'];
$forums[$fid] = $groupforums[$fid]['name'];
}
}
if(!empty($tids)) {
foreach($tids as $tid => $pids) {
foreach($pids as $pid) {
if(!isset($threads[$tid])) {
unset($posts[$pid]);
unset($tids[$tid]);
$hiddennum++;
continue;
}
}
}
}
$list = &$threads;
}
$multi = simplepage($listcount, $perpage, $page, $theurl);
$need_count = false;
}
if(!$allowview) {
$need_count = false;
}
$orderactives = array($viewtype => ' class="a"');
} else {
space_merge($space, 'field_home');
if($space['feedfriend']) {
$fuid_actives = array();
require_once libfile('function/friend');
$fuid = intval($_GET['fuid']);
if($fuid && friend_check($fuid, $space['uid'])) {
$authorid = $fuid;
$fuid_actives = array($fuid=>' selected');
} else {
$authorid = explode(',', $space['feedfriend']);
}
$query = C::t('home_friend')->fetch_all_by_uid($_G['uid'], 0, 100, true);
foreach($query as $value) {
$userlist[] = $value;
}
} else {
$need_count = false;
}
}
$actives = array($_GET['view'] =>' class="a"');
if($need_count) {
if($searchkey = stripsearchkey($_GET['searchkey'])) {
$searchkey = dhtmlspecialchars($searchkey);
}
loadcache('forums');
$gids = $fids = $forums = array();
foreach(C::t('forum_thread')->fetch_all_by_authorid_displayorder($authorid, $displayorder, $dglue, $closed, $searchkey, $start, $perpage, $replies, $vfid) as $tid => $value) {
if(empty($value['author']) && $value['authorid'] != $_G['uid']) {
$hiddennum++;
continue;
} elseif($viewuserthread && $value['authorid'] != $_G['uid']) {
if(($_G['adminid'] != 1 && !empty($viewfids) && !in_array($value['fid'], $viewfids)) || $value['displayorder'] < 0) {
$hiddennum++;
continue;
}
} elseif(!isset($_G['cache']['forums'][$value['fid']])) {
if(!$_G['setting']['groupstatus']) {
$hiddennum++;
continue;
} else {
$gids[$value['fid']] = $value['tid'];
}
}
$list[$value['tid']] = procthread($value);
$forums[$value['fid']] = $list[$value['tid']]['forumname'];
}
if(!empty($gids)) {
$gforumnames = C::t('forum_forum')->fetch_all_name_by_fid(array_keys($gids));
foreach($gids as $fid => $tid) {
$list[$tid]['forumname'] = $gforumnames[$fid]['name'];
$forums[$fid] = $gforumnames[$fid]['name'];
}
}
$threads = &$list;
if($_GET['view'] != 'all') {
$listcount = count($list)+$hiddennum;
$multi = simplepage($listcount, $perpage, $page, $theurl);
}
}
require_once libfile('function/forumlist');
$forumlist = forumselect(FALSE, 0, intval($_GET['fid']));
dsetcookie('home_diymode', $diymode);
if($_G['uid']) {
$_GET['view'] = !$_GET['view'] ? 'we' : $_GET['view'];
$navtitle = lang('core', 'title_'.$_GET['view'].'_thread');
} else {
$navtitle = lang('core', 'title_thread');
}
if($space['username']) {
$navtitle = lang('space', 'sb_thread', array('who' => $space['username']));
}
$metakeywords = $navtitle;
$metadescription = $navtitle;
if(!$_G['follow']) {
include_once template("diy:home/space_thread");
}
?>