<?php
/**
* Copyright (C) 2011 CRLin
* License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
*/
define('PUN_ROOT', dirname(__FILE__).'/');
require PUN_ROOT.'include/common.php';
if ($pun_user['g_read_board'] == '0')
message($lang_common['No view']);
$bid = 1; // Put forum ID here
// Load the viewtopic.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/forum.php';
require PUN_ROOT.'lang/'.$pun_user['language'].'/topic.php';
// Load the viewforum.php language file
if (file_exists(PUN_ROOT.'lang/'.$pun_user['language'].'/blog.php'))
require PUN_ROOT.'lang/'.$pun_user['language'].'/blog.php';
else
require PUN_ROOT.'lang/English/blog.php';
$message_len = 200; // Short message for Not Admin
$pun_user['disp_topics'] = 10; // Number of topics to display per page
// Display topics number
$last_topics = 10;
$most_replies = 10;
$most_views = 10;
$cut_str = 17; // Topics subject
// Fetch some info about the forum
if (!$pun_user['is_guest'])
$result = $db->query('SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, fp.post_topics, s.user_id AS is_subscribed FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_subscriptions AS s ON (f.id=s.forum_id AND s.user_id='.$pun_user['id'].') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$bid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
else
$result = $db->query('SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, fp.post_topics, 0 AS is_subscribed FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$bid) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
$cur_forum = $db->fetch_assoc($result);
if ($cur_forum['redirect_url'] != '')
{
header('Location: '.$cur_forum['redirect_url']);
exit;
}
// Can we or can we not post new topics?
$post_link = '';
if ($bid > 0)
{
// Sort out who the moderators are and if we are currently a moderator (or an admin)
$mods_array = ($cur_forum['moderators'] != '') ? unserialize($cur_forum['moderators']) : array();
$is_admmod = ($pun_user['g_id'] == PUN_ADMIN || ($pun_user['g_moderator'] == '1' && array_key_exists($pun_user['username'], $mods_array))) ? true : false;
if (($cur_forum['post_topics'] == '' && $pun_user['g_post_topics'] == '1') || $cur_forum['post_topics'] == '1' || $is_admmod)
$post_link = "\t\t\t".'<p class="postlink conr"><a href="post.php?fid='.$bid.'">'.$lang_forum['Post topic'].'</a></p>'."\n";
else
$post_link = '';
}
// Count topics
if ($pun_user['g_id'] == PUN_ADMIN)
{
$result = $db->query('SELECT COUNT(t.id), t.forum_id, t.moved_to FROM '.$db->prefix.'topics as t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE t.moved_to IS NULL'.$sql_fid) or error('Unable to get the admin\'s topic list', __FILE__, __LINE__, $db->error());
}
elseif ($pun_user['is_guest'])
{
$result = $db->query('SELECT COUNT(t.id), t.forum_id, t.moved_to FROM '.$db->prefix.'topics as t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$sql_fid) or error('Unable to get the guest\'s topic list', __FILE__, __LINE__, $db->error());
}
else
{
$result = $db->query('SELECT COUNT(t.id), t.forum_id, t.moved_to FROM '.$db->prefix.'topics as t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$sql_fid) or error('Unable to get the member\'s topic list', __FILE__, __LINE__, $db->error());
}
$num_topics = $db->result($result);
$num_pages = ceil($num_topics / $pun_user['disp_topics']);//$pun_user['disp_posts'];
$p = (!isset($_GET['p']) || $_GET['p'] <= 1 || $_GET['p'] > $num_pages) ? 1 : intval($_GET['p']);
$start_from = $pun_user['disp_topics'] * ($p - 1);
// Generate paging links
$paging_links = '<span class="pages-label">'.$lang_common['Pages'].' </span>'.paginate($num_pages, $p, 'viewblog.php?bid='.$bid);
$page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_common['Blog']);
define('PUN_ALLOW_INDEX', 1);
define('PUN_ACTIVE_PAGE', 'index');
require PUN_ROOT.'header.php';
?>
<div class="linkst">
<div class="inbox crumbsplus">
<ul class="crumbs">
<li><a href="viewblog.php"><?php echo $lang_common['Blog'] ?></a></li>
<?php
if ($bid >= 1)
{
?>
<li><span>» </span><a href="viewblog.php?bid=<?php echo $bid ?>"><strong><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></strong></a></li>
<?php
}
?>
</ul>
<div class="pagepost">
<p class="pagelink conl"><?php echo $paging_links ?></p>
<?php echo $post_link ?>
</div>
<div class="clearer"></div>
</div>
</div>
<div class="blogright">
<?php
generate_forumlinks($pun_user['g_id']);
most_topics('last', $last_topics);
most_topics('most_replies', $most_replies);
most_topics('most_views', $most_views);
?>
</div>
<div class="blogleft">
<?php
require PUN_ROOT.'include/parser.php';
$post_count = 0; // Keep track of post numbers
if ($pun_user['g_id'] == PUN_ADMIN)
{
$result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.first_post_id, t.last_post, t.last_post_id, t.last_poster, t.closed, t.num_replies, t.num_views, t.moved_to, t.forum_id, p.poster_id, p.topic_id, p.message, p.hide_smilies FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE t.first_post_id=p.id AND t.moved_to IS NULL'.$sql_fid.' ORDER BY t.posted DESC LIMIT '.$start_from.', '.$pun_user['disp_topics']) or error('Unable to get the admin\'s topic list', __FILE__, __LINE__, $db->error());
}
elseif ($pun_user['is_guest'])
{
$result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.first_post_id, t.last_post, t.last_post_id, t.last_poster, t.closed, t.num_replies, t.num_views, t.moved_to, t.forum_id, p.poster_id, p.topic_id, p.message, p.hide_smilies FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE t.first_post_id=p.id AND (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$sql_fid.' ORDER BY t.posted DESC LIMIT '.$start_from.', '.$pun_user['disp_topics']) or error('Unable to get the guest\'s topic list', __FILE__, __LINE__, $db->error());
}
else
{
$result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.first_post_id, t.last_post, t.last_post_id, t.last_poster, t.closed, t.num_replies, t.num_views, t.moved_to, t.forum_id, p.poster_id, p.topic_id, p.message, p.hide_smilies FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE t.first_post_id=p.id AND (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$sql_fid.' ORDER BY t.posted DESC LIMIT '.$start_from.', '.$pun_user['disp_topics']) or error('Unable to get the member\'s topic list', __FILE__, __LINE__, $db->error());
}
if ($db->num_rows($result)) // If there are topics
{
while ($cur_topic = $db->fetch_assoc($result)) {
$post_count++;
$post_actions = array();
if ($pun_config['o_censoring'] == '1')
$cur_topic['subject'] = censor_words($cur_topic['subject']);
// Generation post action array (quote, edit, delete etc.)
if ($pun_user['g_id'] == PUN_ADMIN)
{
$post_actions[] = '<li class="postreport"><span><a href="misc.php?report='.$cur_topic['id'].'">'.$lang_topic['Report'].'</a></span></li>';
$post_actions[] = '<li class="postdelete"><span><a href="delete.php?id='.$cur_topic['first_post_id'].'">'.$lang_topic['Delete'].'</a></span></li>';
$post_actions[] = '<li class="postedit"><span><a href="edit.php?id='.$cur_topic['first_post_id'].'">'.$lang_topic['Edit'].'</a></span></li>';
$post_actions[] = '<li class="postquote"><span><a href="post.php?tid='.$cur_topic['id'].'&qid='.$cur_topic['first_post_id'].'">'.$lang_topic['Quote'].'</a></span></li>';
if ($cur_topic['closed'] == '0')
$post_actions[] = '<li class="postreply"><span><a href="post.php?tid='.$cur_topic['id'].'">'.$lang_topic['Post reply'].'</a></span></li>';
}
else
{
if (!$pun_user['is_guest'])
$post_actions[] = '<li class="postreport"><span><a href="misc.php?report='.$cur_topic['first_post_id'].'">'.$lang_topic['Report'].'</a></span></li>';
if ($cur_topic['closed'] == '0')
{
if ($cur_topic['poster_id'] == $pun_user['id'])
{
if (($pun_user['g_delete_topics'] == '1') || $pun_user['g_delete_posts'] == '1')
$post_actions[] = '<li class="postdelete"><span><a href="delete.php?id='.$cur_topic['first_post_id'].'">'.$lang_topic['Delete'].'</a></span></li>';
if ($pun_user['g_edit_posts'] == '1')
$post_actions[] = '<li class="postedit"><span><a href="edit.php?id='.$cur_topic['first_post_id'].'">'.$lang_topic['Edit'].'</a></span></li>';
}
if (($cur_topic['post_replies'] == '' && $pun_user['g_post_replies'] == '1') || $cur_topic['post_replies'] == '1')
$post_actions[] = '<li class="postquote"><span><a href="post.php?tid='.$cur_topic['id'].'&qid='.$cur_topic['first_post_id'].'">'.$lang_topic['Quote'].'</a></span></li>';
if (($cur_topic['post_replies'] == '' && $pun_user['g_post_replies'] == '1') || $cur_topic['post_replies'] == '1')
$post_actions[] = '<li class="postreply"><span><a href="post.php?tid='.$cur_topic['id'].'">'.$lang_topic['Post reply'].'</a></span></li>';
}
}
// Short message for Not Admin
$short = false;
if ((mb_strlen($cur_topic['message'], 'UTF-8') > $message_len) && ($pun_user['g_id'] != PUN_ADMIN))
{
$message_len++;
$tmp = mb_substr($cur_topic['message'], 0, $message_len, 'UTF-8');
while(!parse_message($tmp, $cur_topic['hide_smilies']))
{
$message_len++;
$tmp = mb_substr($cur_topic['message'], 0, $message_len, 'UTF-8');
}
if ($cur_topic['message'] != $tmp) $short = true;
// Perform the main parsing of the message (BBCode, smilies, censor words etc)
$cur_topic['message'] = parse_message($tmp, $cur_topic['hide_smilies']);
}
else
{
// Perform the main parsing of the message (BBCode, smilies, censor words etc)
$cur_topic['message'] = parse_message($cur_topic['message'], $cur_topic['hide_smilies']);
}
?>
<div id="p<?php echo $cur_topic['first_post_id'] ?>" class="blockpost<?php echo ($post_count % 2 == 0) ? ' roweven' : ' rowodd' ?>">
<h2><span><span class="conr">(<a href="viewtopic.php?pid=<?php echo $cur_topic['first_post_id'].'#p'.$cur_topic['first_post_id'] ?>"><?php echo format_time($cur_topic['posted']) ?></a>) #<?php echo ($start_from + $post_count) ?></span> <a href="viewtopic.php?pid=<?php echo $cur_topic['first_post_id'].'#p'.$cur_topic['first_post_id'] ?>"><?php echo pun_htmlspecialchars($cur_topic['subject']) ?></a></span></h2>
<div class="box">
<div class="inbox">
<div class="blogpostmsg">
<?php echo $cur_topic['message']."\n" ?>
<?php
if($short) echo "(<a href='viewtopic.php?pid=".$cur_topic['first_post_id']."#p".$cur_topic['first_post_id']."'>".$lang_blog['Read full']."</a>)\n"
?>
<div class="postfoot">
<?php if (count($post_actions)) echo "\t\t\t\t".'<div class="postfootright">'."\n\t\t\t\t\t".'<ul>'."\n\t\t\t\t\t\t".implode("\n\t\t\t\t\t\t", $post_actions)."\n\t\t\t\t\t".'</ul>'."\n\t\t\t\t".'</div>'."\n" ?>
</div>
</div>
</div>
</div>
</div>
<?php
}
}
else
{
?>
<div id="p0" class="blockpost rowodd">
<h2><span><?php echo $lang_common['Topic']; ?></span></h2>
<div class="box">
<div class="inbox">
<div class="blogpostmsg">
<?php echo $lang_common['Never'] ?>
</div>
</div>
</div>
</div>
<?php
}
?>
<div class="postlinksb">
<div class="inbox crumbsplus">
<div class="pagepost">
<p class="pagelink conl"><?php echo $paging_links ?></p>
<?php echo $post_link ?>
</div>
<ul class="crumbs">
<li><a href="viewblog.php"><?php echo $lang_common['Blog'] ?></a></li>
<?php
if ($bid >= 1)
{
?>
<li><span>» </span><a href="viewblog.php?bid=<?php echo $bid ?>"><strong><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></strong></a></li>
<?php
}
?>
</ul>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="viewblogfoot"></div>
<?php
//$footer_style = 'viewblog';
$pun_config['o_quickjump'] = '0';
require PUN_ROOT.'footer.php';
//
// Generate forum links PHP scripts
//
function generate_forumlinks($group_id = false)
{
global $db, $lang_blog, $pun_user;
$groups = array();
// If a group_id was supplied, we generate the forum links cache for that group only
if ($group_id !== false)
{
// Is this group even allowed to read forums?
$result = $db->query('SELECT g_read_board FROM '.$db->prefix.'groups WHERE g_id='.$group_id) or error('Unable to fetch user group read permission', __FILE__, __LINE__, $db->error());
$read_board = $db->result($result);
$groups[$group_id] = $read_board;
}
else
{
// A group_id was not supplied, so we generate the forum links cache for all groups
$result = $db->query('SELECT g_id, g_read_board FROM '.$db->prefix.'groups') or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error());
$num_groups = $db->num_rows($result);
while ($row = $db->fetch_row($result))
$groups[$row[0]] = $row[1];
}
// Loop through the groups in $groups and output the cache for each of them
foreach ($groups as $group_id => $read_board)
{
if ($read_board == '1')
{
$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$group_id.') WHERE fp.read_forum IS NULL OR fp.read_forum=1 ORDER BY c.disp_position, c.id, f.disp_position') or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
if ($db->num_rows($result))
{
?>
<div id="vf" class="blocktable">
<!--h2><span><?php echo $lang_blog['All forums'] ?></span></h2-->
<div class="box">
<div class="inbox">
<table cellspacing="0">
<thead>
<tr><th class="tcl" scope="col">
<?php echo $lang_blog['All forums'] ?>
</th></tr>
</thead>
<tbody>
<?php
while ($cur_forum = $db->fetch_assoc($result))
{
if ($cur_forum['redirect_url'] == '')
{
$output = "\t\t\t\t\t".'<tr><td class="tcl"><div class="tclcon">'."\n";
$output .= "\t\t\t\t\t\t".'<a href="viewblog.php?bid='.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</a>'."\n";
$output .= "\t\t\t\t\t".'</div></td></tr>'."\n";
echo $output;
}
}
?>
</tbody>
</table>
</div>
</div>
</div>
<?php
}
}
}
}
function most_topics($query, $topics_num)
{
global $db, $lang_blog, $pun_user, $cut_str;
switch ($query)
{
case 'last':
$sort_by = 't.last_post DESC';
$title = $lang_blog['Last topics'];
break;
case 'most_replies':
$sort_by = 't.num_replies DESC';
$where_sql = ' AND t.num_replies > 0';
$title = $lang_blog['Most replies'];
break;
case 'most_views':
$sort_by = 't.num_views DESC';
$where_sql = ' AND t.num_views > 0';
$title = $lang_blog['Most views'];
break;
default:
$sort_by = 't.last_post DESC';
$title = $lang_blog['Last topics'];
break;
}
if ($pun_user['g_id'] == PUN_ADMIN)
{
$result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.num_views, t.moved_to, t.forum_id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE t.moved_to IS NULL'.$where_sql.' ORDER BY '.$sort_by.' LIMIT '.$topics_num) or error('Unable to get the admin\'s topic list', __FILE__, __LINE__, $db->error());
}
elseif ($pun_user['is_guest'])
{
$result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.num_views, t.moved_to, t.forum_id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$where_sql.' ORDER BY '.$sort_by.' LIMIT '.$topics_num) or error('Unable to get the guest\'s topic list', __FILE__, __LINE__, $db->error());
}
else
{
$result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_replies, t.num_views, t.moved_to, t.forum_id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$where_sql.' ORDER BY '.$sort_by.' LIMIT '.$topics_num) or error('Unable to get the member\'s topic list', __FILE__, __LINE__, $db->error());
}
?>
<div id="most<?php echo $query; ?>" class="blockpost">
<h2><span><?php echo $title ?></span></h2>
<div class="box">
<div class="inbox">
<table cellspacing="0">
<tbody>
<tr><td>
<?php
if ($db->num_rows($result))
{
while ($cur_topic = $db->fetch_assoc($result)) {
if ($pun_config['o_censoring'] == '1')
$cur_topic['subject'] = censor_words($cur_topic['subject']);
if (mb_strlen($cur_topic['subject'])>$cut_str && strlen($cur_topic['subject'])>$cut_str)
{
$cur_topic['subject'] = mb_substr($cur_topic['subject'], 0,$cut_str).'...';
}
$subject = '<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'" title="'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['last_poster']).' '.format_time($cur_topic['last_post']).'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
?>
<!--tr><td-->
<div class="tclcon1">
<?php echo $subject ?>
</div>
<!--/td></tr-->
<?php
}
}
else
{
?>
<!--tr><td-->
<div class="tclcon1">
<?php echo $lang_common['Never'] ?>
</div>
<!--/td></tr-->
<?php
}
?>
</td></tr>
</tbody></table></div></div></div>
<?php
}