//
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// Author: Kazumi Ono (AKA onokazu) //
// URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ //
// Project: The XOOPS Project //
// ------------------------------------------------------------------------- //
include 'header.php';
$forum = isset($_GET['forum']) ? intval($_GET['forum']) : 0;
$topic_id = isset($_GET['topic_id']) ? intval($_GET['topic_id']) : 0;
if ( empty($forum) ) {
redirect_header(XOOPS_URL."/modules/".$xoopsModule->getVar('dirname')."/index.php",2,_MD_ERRORFORUM);
exit();
} elseif ( empty($topic_id) ) {
redirect_header('viewforum.php?forum='.$forum,2,_MD_ERRORTOPIC);
exit();
}
$topic_time = (isset($_GET['topic_time'])) ? intval($_GET['topic_time']) : 0;
$post_id = !empty($_GET['post_id']) ? intval($_GET['post_id']) : 0;
//use users preferences
if (is_object($xoopsUser)) {
$viewmode = $xoopsUser->getVar('umode');
$order = ($xoopsUser->getVar('uorder') == 1) ? 'DESC' : 'ASC';
} else {
$viewmode = 'flat';
$order = 'ASC';
}
// newbb does not have nested mode
if ($viewmode == 'nest') {
$viewmode = 'thread';
}
// override mode/order if any requested
if (isset($_GET['viewmode']) && ($_GET['viewmode'] == 'flat' || $_GET['viewmode'] == 'thread')) {
$viewmode = $_GET['viewmode'];
}
if (isset($_GET['order']) && ($_GET['order'] == 'ASC' || $_GET['order'] == 'DESC')) {
$order = $_GET['order'];
}
if ($viewmode != 'flat') {
$xoopsOption['template_main'] = 'newbb_viewtopic_thread.html';
} else {
$xoopsOption['template_main'] = 'newbb_viewtopic_flat.html';
}
include XOOPS_ROOT_PATH.'/header.php';
include_once 'class/class.forumposts.php';
if ( isset($_GET['move']) && 'next' == $_GET['move'] ) {
$sql = 'SELECT t.topic_id, t.topic_title, t.topic_time, t.topic_status, t.topic_sticky, t.topic_last_post_id, f.forum_id, f.forum_name, f.forum_access, f.forum_type, f.allow_html, f.allow_sig, f.posts_per_page, f.hot_threshold, f.topics_per_page FROM '.$xoopsDB->prefix('bb_topics').' t LEFT JOIN '.$xoopsDB->prefix('bb_forums').' f ON f.forum_id = t.forum_id WHERE t.topic_time > '.$topic_time.' AND t.forum_id = '.$forum.' ORDER BY t.topic_time ASC LIMIT 1';
} elseif ( isset($_GET['move']) && 'prev' == $_GET['move']) {
$sql = 'SELECT t.topic_id, t.topic_title, t.topic_time, t.topic_status, t.topic_sticky, t.topic_last_post_id, f.forum_id, f.forum_name, f.forum_access, f.forum_type, f.allow_html, f.allow_sig, f.posts_per_page, f.hot_threshold, f.topics_per_page FROM '.$xoopsDB->prefix('bb_topics').' t LEFT JOIN '.$xoopsDB->prefix('bb_forums').' f ON f.forum_id = t.forum_id WHERE t.topic_time < '.$topic_time.' AND t.forum_id = '.$forum.' ORDER BY t.topic_time DESC LIMIT 1';
} else {
$sql = 'SELECT t.topic_id, t.topic_title, t.topic_time, t.topic_status, t.topic_sticky, t.topic_last_post_id, f.forum_id, f.forum_name, f.forum_access, f.forum_type, f.allow_html, f.allow_sig, f.posts_per_page, f.hot_threshold, f.topics_per_page FROM '.$xoopsDB->prefix('bb_topics').' t LEFT JOIN '.$xoopsDB->prefix('bb_forums').' f ON f.forum_id = t.forum_id WHERE t.topic_id = '.$topic_id.' AND t.forum_id = '.$forum;
}
if ( !$result = $xoopsDB->query($sql) ) {
redirect_header('viewforum.php?forum='.$forum,2,_MD_ERROROCCURED);
exit();
}
if ( !$forumdata = $xoopsDB->fetchArray($result) ) {
redirect_header('viewforum.php?forum='.$forum,2,_MD_FORUMNOEXIST);
exit();
}
$xoopsTpl->assign('topic_id', $forumdata['topic_id']);
$topic_id = $forumdata['topic_id'];
$xoopsTpl->assign('forum_id', $forumdata['forum_id']);
$forum = $forumdata['forum_id'];
$can_post = 0;
$show_reg = 0;
if ( $forumdata['forum_type'] == 1 ) {
// this is a private forum.
$accesserror = 0;
if ( $xoopsUser ) {
if ( !$xoopsUser->isAdmin($xoopsModule->mid()) ) {
if ( !check_priv_forum_auth($xoopsUser->getVar('uid'), $forum, false) ) {
$accesserror = 1;
}
} else {
$isadminormod = 1;
}
} else {
$accesserror = 1;
}
if ( $accesserror == 1 ) {
redirect_header(XOOPS_URL."/modules/".$xoopsModule->getVar('dirname')."/index.php",2,_MD_NORIGHTTOACCESS);
exit();
}
$can_post = 1;
$show_reg = 1;
} else {
// this is not a priv forum
if ( $forumdata['forum_access'] == 1 ) {
// this is a reg user only forum
if ( $xoopsUser ) {
$can_post = 1;
} else {
$show_reg = 1;
}
} elseif ( $forumdata['forum_access'] == 2 ) {
// this is an open forum
$can_post = 1;
} else {
// this is an admin/moderator only forum
if ( $xoopsUser ) {
if ( $xoopsUser->isAdmin($xoopsModule->mid()) || is_moderator($forum, $xoopsUser->getVar('uid')) ) {
$can_post = 1;
$isadminormod = 1;
}
}
}
}
$myts =& MyTextSanitizer::getInstance();
$forumdata['topic_title'] = $myts->makeTboxData4Show($forumdata['topic_title']);$forumdata['forum_name'] = $myts->makeTboxData4Show($forumdata['forum_name']);
$xoopsTpl->assign(array('topic_title' => ''.$forumdata['topic_title'].'', 'forum_name' => $forumdata['forum_name'], 'topic_time' => $forumdata['topic_time'], 'lang_nexttopic' => _MD_NEXTTOPIC, 'lang_prevtopic' => _MD_PREVTOPIC));
// add image links to admin page if the user viewing this page is a forum admin
if ( $xoopsUser ) {
$xoopsTpl->assign('viewer_userid', $xoopsUser->getVar('uid'));
if ( !empty($isadminormod) || $xoopsUser->isAdmin($xoopsModule->mid()) || is_moderator( $forum, $xoopsUser->getVar('uid')) ) {
// yup, the user is admin
// the forum is locked?
if ( $forumdata['topic_status'] != 1 ) {
// nope
$xoopsTpl->assign('topic_lock_image', '');
} else {
// yup, it is..
$xoopsTpl->assign('topic_lock_image', '
');
}
$xoopsTpl->assign('topic_move_image', '
');
$xoopsTpl->assign('topic_delete_image', '
');
// is the topic sticky?
if ( $forumdata['topic_sticky'] != 1 ) {
// nope, not yet..
$xoopsTpl->assign('topic_sticky_image', '
');
} else {
// yup it is sticking..
$xoopsTpl->assign('topic_sticky_image', '
');
}
// need to set this also
$xoopsTpl->assign('viewer_is_admin', true);
} else {
// nope, the user is not a forum admin..
$xoopsTpl->assign('viewer_is_admin', false);
}
} else {
// nope, the user is not a forum admin, not even registered
$xoopsTpl->assign(array('viewer_is_admin' => false, 'viewer_userid' => 0));
}
function showTree(&$arr, $current=0, $key=0, $prefix='', $foundusers=array()){
global $xoopsConfig;
if ($key != 0) {
if ( 0 != $arr[$key]['obj']->uid() ) {
if (!isset($foundusers[$arr[$key]['obj']->uid()])) {
$eachposter = new XoopsUser($arr[$key]['obj']->uid());
$foundusers[$arr[$key]['obj']->uid()] =& $eachposter;
} else {
$eachposter =& $foundusers[$arr[$key]['obj']->uid()];
}
$poster_rank = $eachposter->rank();
if ( $poster_rank['image'] != '' ) {
$poster_rank['image'] = '
';
}
if ( $eachposter->isActive() ) {
$posterarr = array('poster_uid' => $eachposter->getVar('uid'), 'poster_uname' => ''.$eachposter->getVar('uname').'');
} else {
$posterarr = array('poster_uid' =>0, 'poster_uname' => $xoopsConfig['anonymous']);
}
} else {
$posterarr = array('poster_uid' =>0, 'poster_uname' => $xoopsConfig['anonymous']);
}
$posticon = $arr[$key]['obj']->icon();
if ( isset($posticon) && $posticon != '' ) {
$post_image = '
';
} else {
$post_image = '
';
}
if ($current != $key) {
$subject = ''.$arr[$key]['obj']->subject().'';
$GLOBALS['xoopsTpl']->append("topic_trees", array_merge($posterarr, array("post_id" => $arr[$key]['obj']->postid(), "post_parent_id" => $arr[$key]['obj']->parent(), "post_date" => formatTimestamp($arr[$key]['obj']->posttime(), "m"), "post_image" => $post_image, "post_title" => $subject, "post_prefix" => $prefix)));
} else {
$subject = ''.$arr[$key]['obj']->subject().'';
$thisprefix = substr($prefix, 0, -6)."»";
$GLOBALS['xoopsTpl']->append("topic_trees", array_merge($posterarr, array("post_id" => $arr[$key]['obj']->postid(), "post_parent_id" => $arr[$key]['obj']->parent(), "post_date" => formatTimestamp($arr[$key]['obj']->posttime(), "m"), "post_image" => $post_image, "post_title" => $subject, "post_prefix" => $thisprefix)));
}
}
if ( isset($arr[$key]['replies']) && !empty($arr[$key]['replies']) ){
$prefix .= " ";
foreach($arr[$key]['replies'] as $replykey) {
$current = ( $current == 0 ) ? $replykey : $current;
showTree($arr, $current, $replykey, $prefix, $foundusers);
}
}
}
if ($order == 'DESC') {
$xoopsTpl->assign(array('order_current' => 'DESC', 'order_other' => 'ASC', 'lang_order_other' => _OLDESTFIRST));
} else {
$xoopsTpl->assign(array('order_current' => 'ASC', 'order_other' => 'DESC', 'lang_order_other' => _NEWESTFIRST));
}
// initialize the start number of select query
$start = !empty($_GET['start']) ? intval($_GET['start']) : 0;
$total_posts = get_total_posts($topic_id, 'topic');
if ($total_posts > 50) {
$viewmode ="flat";
// hide link to theaded view
$xoopsTpl->assign('lang_threaded', "" );
$xoopsTpl->assign('lang_flat', _FLAT );
} else {
$xoopsTpl->assign(array('lang_threaded' => _THREADED, 'lang_flat' => _FLAT));
}
if ( $can_post == 1 ) {
$xoopsTpl->assign(array('viewer_can_post' => true, 'forum_post_or_register' => "
"));
} else {
$xoopsTpl->assign('viewer_can_post', false);
if ( $show_reg == 1 ) {
$xoopsTpl->assign('forum_post_or_register', ''._MD_REGTOPOST.'');
} else {
$xoopsTpl->assign('forum_post_or_register', '');
}
}
if ( $viewmode == "thread" ) {
$start = 0;
$postsArray = ForumPosts::getAllPosts($topic_id, "ASC", $total_posts, $start);
$xoopsTpl->assign('topic_viewmode', 'thread');
$newObjArr = array();
foreach ( $postsArray as $eachpost ) {
$key1 = $eachpost->postid();
if ( (!empty($post_id) && $post_id == $key1) || ( empty($post_id) && $eachpost->parent() == 0 ) ) {
$post_text = $eachpost->text();
if ( 0 != $eachpost->uid() ) {
$eachposter = new XoopsUser($eachpost->uid());
$poster_rank = $eachposter->rank();
if ( $poster_rank['image'] != "" ) {
$poster_rank['image'] = "
";
}
if ( $eachposter->isActive() ) {
$poster_status = $eachposter->isOnline() ? _MD_ONLINE : '';
$posterarr = array('poster_uid' => $eachposter->getVar('uid'), 'poster_uname' => ''.$eachposter->getVar('uname').'', 'poster_avatar' => $eachposter->getVar('user_avatar'), 'poster_from' => $eachposter->getVar('user_from'), 'poster_regdate' => formatTimestamp($eachposter->getVar('user_regdate'), 's'), 'poster_postnum' => $eachposter->getVar('posts'), 'poster_sendpmtext' => sprintf(_SENDPMTO,$eachposter->getVar('uname')), 'poster_rank_title' => $poster_rank['title'], 'poster_rank_image' => $poster_rank['image'], 'poster_status' => $poster_status);
if ( 1 == $forumdata['allow_sig'] && $eachpost->attachsig() == 1 && $eachposter->attachsig() == 1 ) {
$myts =& MytextSanitizer::getInstance();
$post_text .= "
----------------
". $myts->makeTareaData4Show($eachposter->getVar("user_sig", "N"), 0, 1, 1)."
----------------
'. $myts->makeTareaData4Show($eachposter->getVar('user_sig', 'N'), 0, 1, 1).'