1

(24 replies, posted in News)

I'm upgrading my 1.3.2 site and getting a very loopy error.  When I run db_update via the admin panel (with fancy directory routing on) I get the following error:

An error was encountered

Your PunBB database is out-of-date and must be upgraded in order to continue. Please run db_update.php in order to complete the upgrade process.

Of course, since I got the error by running the db_update there's nothing I can do.  (I don't think the script is timing out.)


Edit:

I'll leave this here for anyone else who encounters the trouble, but this comes from not clearing the cache directory.  I thought that came after the upgrade, though I can't see how I got this idea. roll

2

(124 replies, posted in News)

I'm surprised.  It might still be buggier than midsummer in the USA, but it does look impressive.  I agree, PunBB better step on it! wink

Elbekko, there's nothing wrong with filing a voluntary bug report for something unsupported.  Doubtless they'd have found and fixed it without me, but until they actually try it someone else might and it would be reported then too.

I don't see why there's a problem with posting this.

As a side note, how do I disable the debug information?  So much gets dumped below the footer that I don't want to always see, yet I cannot find the option to turn it off. (Nevermind, it was a define in a script after all.)

Yeah, but I can't commit to fix it either.  I still figure they needed to know, though they'd figure it out quickly. wink

Hey guys,

Just trying out the latest SVN of 1.3--even better work now!--and seeing if, this time, the mod_rewrite code works right.  I use a XAMP server, WAMP technically, as my localhost testing area and I just got this with the fancy mode just trying to activate the thing:

Parse error: syntax error, unexpected '.', expecting ')' in C:\Program Files\XAMPP\xampp\htdocs\punbb1.3\upload\include\url\File_based_(fancy).php on line 52

And lookie what I found on line 52! lol I thought only I did this...!

    .profile_about'                    =>    'user$1-about.html',

As a side note, correcting the typo doesn't grant functioning SEO rewrites though.  After a few tests I've determined that none of the rewrite options work on my WAMP localhost server.  I guess it's time to break down and attempt it on my LAMP out there on the web, just to see.

Edit: How do I disable debug info in this build?  Can't find the option, and I know it's ready to leap from my monitor and bite me in the nose...

6

(5 replies, posted in PunBB 1.2 show off)

It looks junked up...? hmm I don't see how, the design is really clean and uncluttered.  They've done a good job of theme integration.

7

(124 replies, posted in News)

Some people are really suggestible and they just read the wrong posts. roll

But hey, at least the panic has subsided. big_smile I for one am glad to hear that you guys have been sponsored ... that's a pretty tough thing to get sometimes!  And since you get some money while developing, hey, I am glad we get a better product. smile

Lucas Malor wrote:

1) why the choose of cookie is in profile and not at login? It's not better for an user that login to forum also from other PCs?

You can login from multiple computers easily regardless of cookie settings.  However this isn't a profile feature of PunBB--there are no cookie settings a user can change in their profile.

Lucas Malor wrote:

2) there's a way to automatically install a mod (like phpBB)?

Until 1.3, no.  That is a very new thing for phpBB, as it sat stagnant for ~4 years with the manual modifications.

It's not quite what I'm after, as this is a plugin for front page news generation and acting as a "blog".  I hate the speed of Wordpress, so I'm going to switch to PunBB and integrate the concept of forum with blogging. wink I'll twiddle with CronJobs to make the news "cache" refresh every six hours or so.

And you know what it's like ... learning this way is the best!  I want a very narrow featureset, and not half the things I found in the brief search I made at Punres.

Awesome. smile Thanks for your help.  I'll probably make a blog-style new generator based off the standard PunBB news generator plugin.

Hey all.

I had this utterly brilliant idea to use PunBB both as my forum and my blog and kill two birds with one highly efficient stone.  I am a novice/intermediate guy at database programming, and I'm looking to design a query that is as efficient as possible to do this.  I think I can figure out how to turn what I get into posts and HTML code easily enough (I kid, that's a cakewalk), but I do need help with this query.  From what I understand I'll be crossing as many as 3 tables, and that seems really messy to me.

Here's the code I've been using to grab the latest posts within the forum on my localhost test server.  It grabs the last five posts, the poster, message, subject, and date--and sorts that by date and topic ID.  In the end I'd like to sort by forum ID and date. wink  Here's the code:

SELECT t.id, p.poster, p.message, p.posted, t.subject FROM `pun_posts` AS p INNER JOIN `pun_topics` AS t WHERE t.id=p.topic_id AND t.posted=p.posted AND t.moved_to IS NULL ORDER BY p.topic_id, p.posted LIMIT 5;

I know this isn't portable as you'll have to tailor the table prefix, however it works really well and only uses 2 simple queries.

So, I want to select a category ID, the name isn't important, and save that as a "configuration" variable.  But how do I blend the _forum selection into this whole query I've been making?  Lets just use ID 1 as a category basis for good measure.

Is this (roughly) correct?  And if so, is there anything I can do to increase its efficiency?  I just tried it in phpMyAdmin, but I got duplicate results (IE, post 1 twice, post 2 twice, etc.)...

SELECT pf.forum_name, pp.poster, pp.message, pp.posted, pt.id, pt.subject FROM `pun_forums` AS pf INNER JOIN `pun_posts` AS pp INNER JOIN `pun_topics` AS pt WHERE pt.id=pp.topic_id AND pt.posted=pp.posted AND pt.moved_to IS NULL AND pf.cat_id=1 ORDER BY pf.id, pp.posted LIMIT 5;

As far as I can tell this is right, but duplicitous results tells me I'm wrong.  Can a fresh set of eyes give me a bit of help?  I know for absolute certain there are only two rows in the DB.  The following is a picture of my results for those away from their respective testbeds:
http://img444.imageshack.us/img444/9356/strangequeryph7.th.jpg

12

(27 replies, posted in PunBB 1.2 discussion)

It works in Firefox for me. big_smile I have Feedreader as my aggregator and associated with the feeds URL types, so it works just fine.

I don't see how, but commenting out the lines I was replacing somehow blew the whole thing up.  It seems the errors weren't really, but just strange nitpicks from apache.  I'll soon be updating this thing to have PMs and other things, but thanks for confirming nothing was really wrong, Matt.

Okay, after fiddling with this for a little I think I'm going to reset my DB and do a fresh install.  Then add in the subforum modification only and see if that works.  If not, then the code is incompatible with PHP5 (or at least my version of it) so I'll attempt a .htaccess switch to turn PHP4 on.  Hopefully either of those will work.

Maybe it is with the database or another file?  Index.php is required by viewforum.php and has to be modified.  I'll try that one then.

Thanks for your help MattF. smile

I have not modified the footer.  Putting a closing tag into viewforum.php does nothing; I still get the footer only.

MattF wrote:

You can't nick parts from a Mini to repair a Jaguar. That's about as much use as me diff'ing against your file would be.

I didn't know that difference comparison varied between OSes. big_smile  (I have and use both Linux and Windows XP, really.)

I've made no alteration from any files except as dictated by the subforum modification and the style installer, thing.  Even on *nix you can diff something pretty readily though.

I honestly don't know what is happening.  If I go directly to viewforum.php it tells me invalid query, which is completely true.  However the page shows perfectly!  If I specify a forum it chokes and shows the footer block only.

That's the funny thing.  I configured PHP to write the logfile externally, that isn't a default XAMPP configuration feature, and yet I see no log file.  Apache's log file says nothing, and no error is output to the page.

Please use X-WinMerge (Freeware) and compare my file (above) against yours.  Maybe I have it right and need to revert to PHP4.

19

(27 replies, posted in PunBB 1.2 discussion)

The odd thing is that mod_rewrite is installed, and the file is correctly named.  hmm  It seems to be throwing a normal 404 error in spite of that.

The htaccess file I got straight from SVN, by the way.

[Tue Sep 18 19:34:38 2007] [error] [client 127.0.0.1] File does not exist: C:/Program Files/xampp/htdocs/punbb1.3/admin-options-content.html, referer: http://localhost/punBB1.3/admin/options.php?section=essentials

20

(27 replies, posted in PunBB 1.2 discussion)

Well, it's not working at all.  Now, I can view the index via the standard "forum" directory style.  However, should I click any link the page does not show with a server error.  Neither the standard file style formatting, nor the fancy file style formatting work.  Unfortunately to revert my settings I have to enter the actual standard url address into the location bar to access the page, and then use Firebug to mangle the post action into the valid address -- just to revert back to the default no rewrite settings.

As I said I'm on a WAMP system, using XAMPP, with PHP 5.2.1 and MySQL Improved 5.0.33.

21

(27 replies, posted in PunBB 1.2 discussion)

I used RapidSVN to grab a copy of the latest SVN snapshot, and I must say that I like it.  A little unstable on a WAMP system with using the mod_rewrite stuff, not sure why, and only the oxygen theme is updated ... but those are to be expected.

Nice work Smartys.  Keep it up, because it feels just the same as the PunBB 1.2.15 I've been toying with.  I will probably use 1.3 instead, actually, so long as database changes aren't needed between the pre-alpha copies. wink

22

(2 replies, posted in PunBB 1.2 modifications, plugins and integrations)

You'll find lots of modifications linked in the "How do I..." topic.  The one you're after is: http://punbb.org/forums/viewtopic.php?id=8988

I've been working with punBB on my own private system to learn it and modify it into what I want.  However something went wrong in the long modification process in viewforum.php; whenever I try to view a forum it gives me a page consisting of this:

<div id="brdfooter" class="block">
    <h2><span>Board footer</span></h2>
    <div class="box">
        <div class="inbox">

            <div class="conl">

Will someone with a working copy of 1.2.15 with 1.0.9.2 of the subforum mod be so kind as to do a diff with my viewforum.php and help me find what's wrong?  As far as I can tell this is the only location that is currently having trouble. hmm

Update: I have tried taking a vanilla copy of the 1.2.15 viewtopic.php file and modifying it over again, but the error persists.  It seems the 1.0.9.2 release of Sub Forum doesn't like the latest PunBB release. sad

<?php
/***********************************************************************

  Copyright (C) 2002-2005  Rickard Andersson (rickard@punbb.org)

  This file is part of PunBB.

  PunBB 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.

  PunBB 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

************************************************************************/


define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';


if ($pun_user['g_read_board'] == '0')
    message($lang_common['No view']);


$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
if ($id < 1)
    message($lang_common['Bad request']);

// Load the viewforum.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/forum.php';
require PUN_ROOT.'lang/'.$pun_user['language'].'/index.php';

// Fetch some info about the forum
$result = $db->query('SELECT f.forum_name, pf.forum_name AS parent_forum, f.redirect_url, f.moderators, f.num_topics, f.sort_by, f.parent_forum_id, fp.post_topics 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'].') LEFT JOIN '.$db->prefix.'forums AS pf ON f.parent_forum_id=pf.id WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
if (!$db->num_rows($result))
    message($lang_common['Bad request']);

$cur_forum = $db->fetch_assoc($result);

// Is this a redirect forum? In that case, redirect!
if ($cur_forum['redirect_url'] != '')
{
    header('Location: '.$cur_forum['redirect_url']);
    exit;
}

// Sort out who the moderators are and if we are currently a moderator (or an admin)
$mods_array = array();
if ($cur_forum['moderators'] != '')
    $mods_array = unserialize($cur_forum['moderators']);

$is_admmod = ($pun_user['g_id'] == PUN_ADMIN || ($pun_user['g_id'] == PUN_MOD && array_key_exists($pun_user['username'], $mods_array))) ? true : false;

// Can we or can we not post new topics?
if (($cur_forum['post_topics'] == '' && $pun_user['g_post_topics'] == '1') || $cur_forum['post_topics'] == '1' || $is_admmod)
    $post_link = "\t\t".'<p class="postlink conr"><a href="post.php?fid='.$id.'">'.$lang_forum['Post topic'].'</a></p>'."\n";
else
    $post_link = '';


// Determine the topic offset (based on $_GET['p'])
$num_pages = ceil($cur_forum['num_topics'] / $pun_user['disp_topics']);

$p = (!isset($_GET['p']) || $_GET['p'] <= 1 || $_GET['p'] > $num_pages) ? 1 : $_GET['p'];
$start_from = $pun_user['disp_topics'] * ($p - 1);

// Generate paging links
$paging_links = $lang_common['Pages'].': '.paginate($num_pages, $p, 'viewforum.php?id='.$id);


$page_title = pun_htmlspecialchars($pun_config['o_board_title'].' / '.$cur_forum['forum_name']);
define('PUN_ALLOW_INDEX', 1);
require PUN_ROOT.'header.php';

$subforum_result = $db->query('SELECT forum_desc, forum_name, id, last_post, last_post_id, last_poster, moderators, num_posts, num_topics, redirect_url FROM '.$db->prefix.'forums WHERE parent_forum_id='.$id.' ORDER BY disp_position') or error('Unable to fetch sub forum info',__FILE__,__LINE__,$db->error());
if($db->num_rows($subforum_result))
{
?>
<div class="linkst">
    <div class="inbox">
        <ul><li><a href="index.php"><?php echo $lang_common['Index'] ?></a> </li><li>» <?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></li></ul>
        <div class="clearer"></div>
    </div>
</div>

<div id="vf" class="blocktable">
    <h2><span>Sub forums</span></h2>
    <div class="box">
        <div class="inbox">
            <table cellspacing="0">
            <thead>
                <tr>
                    <th class="tcl" scope="col"><?php echo $lang_common['Forum'] ?></th>
                    <th class="tc2" scope="col"><?php echo $lang_index['Topics'] ?></th>
                    <th class="tc3" scope="col"><?php echo $lang_common['Posts'] ?></th>
                    <th class="tcr" scope="col"><?php echo $lang_common['Last post'] ?></th>
                </tr>
            </thead>
            <tbody>
<?php

while($cur_subforum = $db->fetch_assoc($subforum_result))
{
    $item_status = '';
    $icon_text = $lang_common['Normal icon'];
    $icon_type = 'icon';

    // Are there new posts?
    if (!$pun_user['is_guest'] && $cur_subforum['last_post'] > $pun_user['last_visit'])
    {
        $item_status = 'inew';
        $icon_text = $lang_common['New icon'];
        $icon_type = 'icon inew';
    }

    // Is this a redirect forum?
    if ($cur_forum['redirect_url'] != '')
    {
        $forum_field = '<h3><a href="'.pun_htmlspecialchars($cur_subforum['redirect_url']).'" title="'.$lang_index['Link to'].' '.pun_htmlspecialchars($cur_subforum['redirect_url']).'">'.pun_htmlspecialchars($cur_subforum['forum_name']).'</a></h3>';
        $num_topics = $num_posts = ' ';
        $item_status = 'iredirect';
        $icon_text = $lang_common['Redirect icon'];
        $icon_type = 'icon';
    }
    else
    {
        $forum_field = '<h3><a href="viewforum.php?id='.$cur_subforum['id'].'">'.pun_htmlspecialchars($cur_subforum['forum_name']).'</a></h3>';
        $num_topics = $cur_subforum['num_topics'];
        $num_posts = $cur_subforum['num_posts'];
    }

    if ($cur_subforum['forum_desc'] != '')
        $forum_field .= "\n\t\t\t\t\t\t\t\t".$cur_subforum['forum_desc'];


    // If there is a last_post/last_poster.
    if ($cur_subforum['last_post'] != '')
        $last_post = '<a href="viewtopic.php?pid='.$cur_subforum['last_post_id'].'#p'.$cur_subforum['last_post_id'].'">'.format_time($cur_subforum['last_post']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_subforum['last_poster']).'</span>';
    else
        $last_post = ' ';

    if ($cur_subforum['moderators'] != '')
    {
        $mods_array = unserialize($cur_subforum['moderators']);
        $moderators = array();

        while (list($mod_username, $mod_id) = @each($mods_array))
            $moderators[] = '<a href="profile.php?id='.$mod_id.'">'.pun_htmlspecialchars($mod_username).'</a>';

        $moderators = "\t\t\t\t\t\t\t\t".'<p><em>('.$lang_common['Moderated by'].'</em> '.implode(', ', $moderators).')</p>'."\n";
    }
?>
                <tr<?php if ($item_status != '') echo ' class="'.$item_status.'"'; ?>>
                    <td class="tcl">
                        <div class="intd">
                            <div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo $icon_text ?></div></div>
                            <div class="tclcon">
                                <?php echo $forum_field;
                                if ($cur_subforum['moderators'] != '') {
                                    echo "\n".$moderators;
                                }
                                ?>
                            </div>
                        </div>
                    </td>
                    <td class="tc2"><?php echo $num_topics ?></td>
                    <td class="tc3"><?php echo $num_posts ?></td>
                    <td class="tcr"><?php echo $last_post ?></td>
                </tr>
<?php
    }
?>
            </tbody>
            </table>
        </div>
    </div>
</div>
<?php
}

?>
<div class="linkst">
    <div class="inbox">
        <p class="pagelink conl"><?php echo $paging_links ?></p>
<?php

echo $post_link;
if($cur_forum['parent_forum'])
    echo "\t\t".'<ul><li><a href="index.php">'.$lang_common['Index'].'</a> </li><li>» <a href="viewforum.php?id='.$cur_forum['parent_forum_id'].'">'.pun_htmlspecialchars($cur_forum['parent_forum']).'</a> </li><li>» '.pun_htmlspecialchars($cur_forum['forum_name']).'</li></ul>';
else
    echo "\t\t".'<ul><li><a href="index.php">'.$lang_common['Index'].' </a> </li><li>» '.pun_htmlspecialchars($cur_forum['forum_name']).'</li></ul>';

?>
        <div class="clearer"></div>
    </div>
</div>

<div id="vf" class="blocktable">
    <h2><span><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></span></h2>
    <div class="box">
        <div class="inbox">
            <table cellspacing="0">
            <thead>
                <tr>
                    <th class="tcl" scope="col"><?php echo $lang_common['Topic'] ?></th>
                    <th class="tc2" scope="col"><?php echo $lang_common['Replies'] ?></th>
                    <th class="tc3" scope="col"><?php echo $lang_forum['Views'] ?></th>
                    <th class="tcr" scope="col"><?php echo $lang_common['Last post'] ?></th>
                </tr>
            </thead>
            <tbody>
<?php

// Fetch list of topics to display on this page
if ($pun_user['is_guest'] || $pun_config['o_show_dot'] == '0')
{
    // Without "the dot"
    $sql = 'SELECT id, poster, subject, posted, last_post, last_post_id, last_poster, num_views, num_replies, closed, sticky, moved_to FROM '.$db->prefix.'topics WHERE forum_id='.$id.' ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];
}
else
{
    // With "the dot"
    switch ($db_type)
    {
        case 'mysql':
        case 'mysqli':
            $sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_views, t.num_replies, t.closed, t.sticky, t.moved_to FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].' WHERE t.forum_id='.$id.' GROUP BY t.id ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];
            break;

        case 'sqlite':
            $sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_views, t.num_replies, t.closed, t.sticky, t.moved_to FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].' WHERE t.id IN(SELECT id FROM '.$db->prefix.'topics WHERE forum_id='.$id.' ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'].') GROUP BY t.id ORDER BY t.sticky DESC, t.last_post DESC';
            break;

        default:
            $sql = 'SELECT p.poster_id AS has_posted, t.id, t.subject, t.poster, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_views, t.num_replies, t.closed, t.sticky, t.moved_to FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id AND p.poster_id='.$pun_user['id'].' WHERE t.forum_id='.$id.' GROUP BY t.id, t.subject, t.poster, t.posted, t.last_post, t.last_post_id, t.last_poster, t.num_views, t.num_replies, t.closed, t.sticky, t.moved_to, p.poster_id ORDER BY sticky DESC, '.(($cur_forum['sort_by'] == '1') ? 'posted' : 'last_post').' DESC LIMIT '.$start_from.', '.$pun_user['disp_topics'];
            break;

    }
}

$result = $db->query($sql) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

// If there are topics in this forum.
if ($db->num_rows($result))
{
    while ($cur_topic = $db->fetch_assoc($result))
    {
        $icon_text = $lang_common['Normal icon'];
        $item_status = '';
        $icon_type = 'icon';

        if ($cur_topic['moved_to'] == null)
            $last_post = '<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'">'.format_time($cur_topic['last_post']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['last_poster']).'</span>';
        else
            $last_post = ' ';

        if ($pun_config['o_censoring'] == '1')
            $cur_topic['subject'] = censor_words($cur_topic['subject']);

        if ($cur_topic['moved_to'] != 0)
            $subject = $lang_forum['Moved'].': <a href="viewtopic.php?id='.$cur_topic['moved_to'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
        else if ($cur_topic['closed'] == '0')
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
        else
        {
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
            $icon_text = $lang_common['Closed icon'];
            $item_status = 'iclosed';
        }

        if (!$pun_user['is_guest'] && $cur_topic['last_post'] > $pun_user['last_visit'] && $cur_topic['moved_to'] == null)
        {
            $icon_text .= ' '.$lang_common['New icon'];
            $item_status .= ' inew';
            $icon_type = 'icon inew';
            $subject = '<strong>'.$subject.'</strong>';
            $subject_new_posts = '<span class="newtext">[ <a href="viewtopic.php?id='.$cur_topic['id'].'&action=new" title="'.$lang_common['New posts info'].'">'.$lang_common['New posts'].'</a> ]</span>';
        }
        else
            $subject_new_posts = null;

        // Should we display the dot or not? :)
        if (!$pun_user['is_guest'] && $pun_config['o_show_dot'] == '1')
        {
            if ($cur_topic['has_posted'] == $pun_user['id'])
                $subject = '<strong>·</strong> '.$subject;
            else
                $subject = '  '.$subject;
        }

        if ($cur_topic['sticky'] == '1')
        {
            $subject = '<span class="stickytext">'.$lang_forum['Sticky'].': </span>'.$subject;
            $item_status .= ' isticky';
            $icon_text .= ' '.$lang_forum['Sticky'];
        }

        $num_pages_topic = ceil(($cur_topic['num_replies'] + 1) / $pun_user['disp_posts']);

        if ($num_pages_topic > 1)
            $subject_multipage = '[ '.paginate($num_pages_topic, -1, 'viewtopic.php?id='.$cur_topic['id']).' ]';
        else
            $subject_multipage = null;

        // Should we show the "New posts" and/or the multipage links?
        if (!empty($subject_new_posts) || !empty($subject_multipage))
        {
            $subject .= '  '.(!empty($subject_new_posts) ? $subject_new_posts : '');
            $subject .= !empty($subject_multipage) ? ' '.$subject_multipage : '';
        }

?>
                <tr<?php if ($item_status != '') echo ' class="'.trim($item_status).'"'; ?>>
                    <td class="tcl">
                        <div class="intd">
                            <div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo trim($icon_text) ?></div></div>
                            <div class="tclcon">
                                <?php echo $subject."\n" ?>
                            </div>
                        </div>
                    </td>
                    <td class="tc2"><?php echo ($cur_topic['moved_to'] == null) ? $cur_topic['num_replies'] : ' ' ?></td>
                    <td class="tc3"><?php echo ($cur_topic['moved_to'] == null) ? $cur_topic['num_views'] : ' ' ?></td>
                    <td class="tcr"><?php echo $last_post ?></td>
                </tr>
<?php

    }
}
else
{

?>
                <tr>
                    <td class="tcl" colspan="4"><?php echo $lang_forum['Empty forum'] ?></td>
                </tr>
<?php

}

?>
            </tbody>
            </table>
        </div>
    </div>
</div>

<div class="linksb">
    <div class="inbox">
        <p class="pagelink conl"><?php echo $paging_links ?></p>
<?php

echo $post_link;
if($cur_forum['parent_forum'])
    echo "\t\t".'<ul><li><a href="index.php">'.$lang_common['Index'].'</a> </li><li>» <a href="viewforum.php?id='.$cur_forum['parent_forum_id'].'">'.pun_htmlspecialchars($cur_forum['parent_forum']).'</a> </li><li>» '.pun_htmlspecialchars($cur_forum['forum_name']).'</li></ul>';
else
    echo "\t\t".'<ul><li><a href="index.php">'.$lang_common['Index'].' </a> </li><li>» '.pun_htmlspecialchars($cur_forum['forum_name']).'</li></ul>';

?>
        <div class="clearer"></div>
    </div>
</div>
<?php

$forum_id = $id;
$footer_style = 'viewforum';
require PUN_ROOT.'footer.php';