Re: QUERIES

p0wer, we all have lives as well: you can't expect unpaid people on a support forum to code your website for you. wink
And phpMyAdmin lets you administer your database and execute queries: queries aren't stored someplace where you can delete them.

27

Re: QUERIES

Hmmm...

What's bad if I just leave them?

28

Re: QUERIES

p0Wer wrote:

I don't have time I have coursework to do sad

Can't you just quickly just delete the queries throgh phpmyadmin?

LOL! A recipe for disaster smile

Upgrading the script should take you 30 minutes, at the most.

Just patiently re-do the instructions from the readme.txt in the latest version of the mod, being VERY careful to place things in the right locations etc.

I sure hope you aren't on shared hosting, BTW.

With that amount of queries running per page, multiplied by the number of visitors you say you are having and the page views they generate, then you are hammering MySQL and the server pretty hard.

Some shared hosts would be giving you a warning on your resource utilization with that amount of MySQL usage.

If really need the sub-forums mod, and you find you are stuck with using that many queries in using sub-forums, I'd seriously consider upgrading to a forum package that has sub-forum support built-in. phpBB or vBulletin or Invision, for example.

The latter two in particular can do the job much more efficiently than your current setup.

29

Re: QUERIES

p0Wer wrote:

Hmmm...

What's bad if I just leave them?

As I said, your host might decide that you are a resource hog, and suspend your account. Since you seem to be hosted with GoDaddy, it has been known to happen.

Also all those queries mean extra work on the web server, extra work for PHP, extra work for MySQL, extra memory being used etc etc, which = delays in page loading and server responsiveness which = greater risk of crashes and also = slow site = annoyed users.

Re: QUERIES

But yeah, try upgrading the mod first and see if that addresses some of the issues wink

Re: QUERIES

I really wonder how hard it can be to make a non-resource intensive subforum mod =P

32

Re: QUERIES

Bah, I'll not bother with subforums...

I only have one forum subforumed anyway lol

So... Do I need to manually remove the lines of text from the files and/or remove the install from phpmyadmin?

33

Re: QUERIES

OK GUYS I DID IT, WHOOO!

But one thing... neutral

Look at the index of my forum: www.game-warp.com/forums/index.php

It's not showing the last poster in that forum hmm

Please can someone help.

Thank you.

Re: QUERIES

We would need to see the code

35

Re: QUERIES

Here's my index.php:

<?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']);


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

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

// Print the categories and forums
$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.forum_desc, f.redirect_url, f.moderators, f.num_topics, f.num_posts, f.last_post, f.last_post_id, f.last_poster 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='.$pun_user['g_id'].') WHERE fp.read_forum IS NULL OR fp.read_forum=1 ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());

$cur_category = 0;
$cat_count = 0;
while ($cur_forum = $db->fetch_assoc($result))
{
    $moderators = '';

    if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
    {
        if ($cur_category != 0)
            echo "\t\t\t".'</tbody>'."\n\t\t\t".'</table>'."\n\t\t".'</div>'."\n\t".'</div>'."\n".'</div>'."\n\n";

        ++$cat_count;

?>
<div id="idx<?php echo $cat_count ?>" class="blocktable">
    <h2><span><?php echo pun_htmlspecialchars($cur_forum['cat_name']) ?></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

        $cur_category = $cur_forum['cid'];
    }

    $item_status = '';
    $icon_text = $lang_common['Normal icon'];
    $icon_type = 'icon';

    // Are there new posts?
    if (!$pun_user['is_guest'] && $cur_forum['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_forum['redirect_url']).'" title="'.$lang_index['Link to'].' '.pun_htmlspecialchars($cur_forum['redirect_url']).'">'.pun_htmlspecialchars($cur_forum['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_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</a></h3>';
        $num_topics = $cur_forum['num_topics'];
        $num_posts = $cur_forum['num_posts'];
    }

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


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

    if ($cur_forum['moderators'] != '')
    {
        $mods_array = unserialize($cur_forum['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."\n" ?>
                            </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

}

// Did we output any categories and forums?
if ($cur_category > 0)
    echo "\t\t\t".'</tbody>'."\n\t\t\t".'</table>'."\n\t\t".'</div>'."\n\t".'</div>'."\n".'</div>'."\n\n";
else
    echo '<div id="idx0" class="block"><div class="box"><div class="inbox"><p>'.$lang_index['Empty board'].'</p></div></div></div>';


// Collect some statistics from the database
$result = $db->query('SELECT COUNT(id)-1 FROM '.$db->prefix.'users') or error('Unable to fetch total user count', __FILE__, __LINE__, $db->error());
$stats['total_users'] = $db->result($result);

$result = $db->query('SELECT id, username FROM '.$db->prefix.'users ORDER BY registered DESC LIMIT 1') or error('Unable to fetch newest registered user', __FILE__, __LINE__, $db->error());
$stats['last_user'] = $db->fetch_assoc($result);

$result = $db->query('SELECT SUM(num_topics), SUM(num_posts) FROM '.$db->prefix.'forums') or error('Unable to fetch topic/post count', __FILE__, __LINE__, $db->error());
list($stats['total_topics'], $stats['total_posts']) = $db->fetch_row($result);

?>
<div id="brdstats" class="block">
    <h2><span><?php echo $lang_index['Board info'] ?></span></h2>
    <div class="box">
        <div class="inbox">
            <dl class="conr">
                <dt><strong><?php echo $lang_index['Board stats'] ?></strong></dt>
                <dd class="stats"><a class="stats" href="stats.php">Post/Topic/User History Status</a></dd>
                <dd><?php echo $lang_index['No of users'].': <strong>'. $stats['total_users'] ?></strong></dd>
                <dd><?php echo $lang_index['No of topics'].': <strong>'.$stats['total_topics'] ?></strong></dd>
                <dd><?php echo $lang_index['No of posts'].': <strong>'.$stats['total_posts'] ?></strong></dd>
                                <?php
                // Begin: Activity Barometer mod
                $result = $db->query("SELECT COUNT(*) FROM ".$db->prefix."posts WHERE posted > ".(time()-7*24*3600)) or error('Unable to fetch online list', __FILE__, __LINE__, $db->error());
                $posts_week = $db->result($result);
                $result = $db->query("SELECT COUNT(*) FROM ".$db->prefix."posts WHERE posted > ".(time()-24*3600)) or error('Unable to fetch online list', __FILE__, __LINE__, $db->error());
                $posts_day = $db->result($result);
                $posts_h = $posts_day/24;
                ?>
                <dd>
                <?php
                if ($posts_h<1)
                       if ($posts_day<1)
                        if ($posts_week<1)
                            echo $lang_index['dormant'];
                        else
                                      echo $lang_index['number week'].': <strong>'.$posts_week;
                       else
                              echo  $lang_index['number day'].': <strong>'.$posts_day;
                else
                       echo $lang_index['average h'].': <strong>'.number_format($posts_h,1);
                ?>
                </strong></dd>
                <?php // End: Activity Barometer mod ?>
            </dl>
            <dl class="conl">
                <dt><strong><?php echo $lang_index['User info'] ?></strong></dt>
                <dd><?php echo $lang_index['Newest user'] ?>: <a href="profile.php?id=<?php echo $stats['last_user']['id'] ?>"><?php echo pun_htmlspecialchars($stats['last_user']['username']) ?></a></dd>
<?php

if ($pun_config['o_users_online'] == '1')
{
    // Fetch users online info and generate strings for output
    $num_guests = 0;
    $users = array();
    $result = $db->query('SELECT user_id, ident FROM '.$db->prefix.'online WHERE idle=0 ORDER BY ident', true) or error('Unable to fetch online list', __FILE__, __LINE__, $db->error());

    while ($pun_user_online = $db->fetch_assoc($result))
    {
        if ($pun_user_online['user_id'] > 1)
            $users[] = "\n\t\t\t\t".'<dd><a href="profile.php?id='.$pun_user_online['user_id'].'">'.pun_htmlspecialchars($pun_user_online['ident']).'</a>';
        else
            ++$num_guests;
    }

    $num_users = count($users);    if($num_users > $pun_config['o_max_users_online'])
    {
        $db->query("UPDATE ".$db->prefix."config SET conf_value = '".$num_users."' WHERE conf_name = 'o_max_users_online'");
        echo $lang_index['Max users online'].": <strong>".$num_users."</strong>\n";
        unlink(PUN_ROOT.'cache/cache_config.php');
    }
    else
        echo $lang_index['Max users online'].": <strong>".$pun_config['o_max_users_online']."</strong>\n";
    
    /* To disable guest counting, remove the last 2 characters of this line */
    if($num_guests > $pun_config['o_max_guests_online'])
    {
        $db->query("UPDATE ".$db->prefix."config SET conf_value = '".$num_users."' WHERE conf_name = 'o_max_guests_online'");
        echo "<br />".$lang_index['Max guests online'].": <strong>".$num_guests."</strong>\n";
        unlink(PUN_ROOT.'cache/cache_config.php');
    }
    else
        echo $lang_index['Max guests online'].": <strong>".$pun_config['o_max_guests_online']."</strong>\n";
    // */
        // users on line today 
    $date = getdate(time());
    $todaystamp = mktime(0,0,0, $date['mon'], $date['mday'], $date['year']);

$result = $db->query("SELECT username, id, last_visit from ".$db->prefix."users WHERE last_visit >= '".$todaystamp."' ORDER by last_visit DESC") or error("Unable to find the list of the users online today", __FILE__, __LINE__, $db->error());

    $users_today = array();
    while ($pun_user_online_today = $db->fetch_assoc($result))
        $users_today[] .=  "\n\t\t\t\t".'<dd><a href="profile.php?id='.$pun_user_online_today['id'].'" title="Last visit of '.$pun_user_online_today['username'].' : '.format_time($pun_user_online_today['last_visit']).'">'.$pun_user_online_today['username'].'</a>';
        
    $num_users_today = count($users_today);
    echo "\t\t\t\t".'<dd>'. $lang_index['Users online'].': <strong>'.$num_users.'</strong></dd>'."\n\t\t\t\t".'<dd>'.$lang_index['Users today'].': <strong>'.$num_users_today.'</strong></dd>'."\n\t\t\t\t".'<dd>'.$lang_index['Guests online'].': <strong>'.$num_guests.'</strong></dd>'."\n\t\t\t".'</dl>'."\n";


    if ($num_users > 0)
        echo "\t\t\t".'<dl id="onlinelist" class= "clearb">'."\n\t\t\t\t".'<dt><strong>'.$lang_index['Online'].': </strong></dt>'."\t\t\t\t".implode(',</dd> ', $users).'</dd>'."\n\t\t\t".'</dl>'."\n";
    else
        echo "\t\t\t".'<div class="clearer"></div>'."\n";// list users on line today
    echo "\t\t\t".'<dl id="onlinetodaylist">'."\n\t\t\t\t".'<dt><strong>'.$lang_index['Online today'].': </strong></dt>';
                
    if ($num_users_today > 0) 
        echo implode(',</dd> ', $users_today).'</dd>'."\n\t\t\t".'</dl>'."\n";
    else
        echo '<dd><em></em></dd>'."\n\t\t\t".'</dl>'."\n";

}
else
    echo "\t\t".'</dl>'."\n\t\t\t".'<div class="clearer"></div>'."\n";


?>
        </div>
    </div>
</div>
<?php

$footer_style = 'index';
require PUN_ROOT.'footer.php';

36 (edited by sirena 2007-04-16 23:45)

Re: QUERIES

Well, aside from ensuring that in Administration you have all those user display options on, from a quick look at the code it seems that line 111, which reads like this in a vanilla 1.2.15 punBB:

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

looks like this in your code:

$last_post = '<a href="viewtopic.php?pid='.$l_pid.'#p'.$l_pid.'">'.format_time($l_post).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($l_pr).'</span>';

I think that may be the problem.  An expert like Smartys might like to confirm this.

Winmerge - http://winmerge.org - is your friend! I recommend it to you. It can make your life easier.

37

Re: QUERIES

Viewforum queries:

Time (s)      Query
0.00150     SELECT u.*, g.*, o.logged FROM pspdowngradesusers AS u INNER JOIN pspdowngradesgroups AS g ON u.group_id=g.g_id LEFT JOIN pspdowngradesonline AS o ON o.ident='82.5.41.16' WHERE u.id=1
0.00059     UPDATE pspdowngradesonline SET logged=1177247398 WHERE ident='82.5.41.16'
0.00038     SELECT * FROM pspdowngradesonline WHERE logged<1177247098
0.00039     UPDATE pspdowngradesusers SET last_visit=1177246690 WHERE id=330
0.00031     DELETE FROM pspdowngradesonline WHERE user_id=330
0.00088     SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, fp.post_topics FROM pspdowngradesforums AS f LEFT JOIN pspdowngradesforum_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 f.id=14
0.02105     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 pspdowngradestopics AS t LEFT JOIN pspdowngradesposts AS p ON t.id=p.topic_id WHERE t.forum_id=14 GROUP BY t.id ORDER BY sticky DESC, last_post DESC LIMIT 0, 30
0.00029     SELECT search_for, replace_with FROM pspdowngradescensoring
0.00062     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 2566
0.00041     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 1475
0.00030     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 838
0.00029     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 48
0.00028     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 49
0.00042     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 102
0.00027     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 426
0.00028     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 51
0.00027     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3290
0.00048     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3309
0.00127     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3301
0.00052     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3308
0.00051     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3284
0.00027     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3299
0.00033     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3289
0.00032     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3261
0.00028     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3282
0.00030     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3176
0.00036     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3254
0.00029     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3222
0.00050     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3214
0.00028     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3206
0.00042     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3196
0.00035     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3183
0.00043     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3128
0.00069     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3159
0.00067     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3158
0.00027     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3137
0.00060     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3131
0.00047     SELECT rate, user_id FROM pspdowngradesRatings WHERE topic_id = 3127
Total query time: 0.03814 s

38

Re: QUERIES

viewforum.php:

<?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';// Load poll language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/polls.php';

// Fetch some info about the forum
$result = $db->query('SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, 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'].') 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;
//=========================
//=====RATE TOPIC CODE=====
//=========================
//Eric Subach (kha0s@comcast.net)
//=========================

$rate_topic = 0;

//Make sure Rate Topic is installed, enabled, and the user is not a guest.
if (isset ($pun_config['o_rt_cur_version']) && $pun_config['o_rt_enabled'] && !$pun_user['is_guest'])
{
    $rate_topic = 1;

    //Check for a language pack.
    if (file_exists (PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php';
    else if (file_exists (PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php';
    else
        $rate_topic = 0;
}

//If it's enabled, create the link to rate the topic.
if ($rate_topic)
    $pre_link = '<a href="rate.php?r_id=' . $id . '">' . $lang_rt['Rate topic'] . '</a> / ';

//==================
//=====END CODE=====
//==================

// 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> <BR /> <a href="poll.php?fid='.$id.'">'.$lang_polls['New poll'].'</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';
//=========================
//=====RATE TOPIC CODE=====
//=========================
//Eric Subach (kha0s@comcast.net)
//=========================

$rate_topic = 0;
$rate_stars = 0;

//Check if Rate Topic is installed and enabled.
if (isset ($pun_config['o_rt_cur_version']) && $pun_config['o_rt_enabled'])
{
    $rate_topic = 1;

    //Check for language pack.
    if (file_exists (PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php';
    else if (file_exists (PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php';
    else
        $rate_topic = 0;

    //Check if using stars or numbers.
    if ($pun_config['o_rt_use_stars'])
        if (file_exists (PUN_ROOT . 'img/rate_stars/' . $pun_config['o_rt_cur_stars']))
            $rate_stars = 1;
}

//==================
//=====END CODE=====
//==================
?>
<div class="linkst">
    <div class="inbox">
        <p class="pagelink conl"><?php echo $paging_links ?></p>
<?php echo $post_link ?>
        <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><?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>
                                        <!-- MOD AUTHOR COLUMN 1 line folowing added -->
                    <th class="tc2" scope="col"  style="WIDTH: 12%"><?php echo $lang_common['Author'] ?></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
// <!-- MOD AUTHOR COLUMN - SWITCH BLOCK -->
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 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 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 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';
                // MOD AUTHOR COLUMN 1 following line added
        $author = '<a href="profile.php?id='.$cur_topic['has_posted'].'">'.pun_htmlspecialchars($cur_topic['poster']).'</a>';

        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['question'] != '') {
            if ($pun_config['o_censoring'] == '1')
                $cur_topic['question'] = censor_words($cur_topic['question']);
        
        
            if ($cur_topic['moved_to'] != 0)
                $subject = $lang_forum['Moved'].': '.$lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['moved_to'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br /> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
            else if ($cur_topic['closed'] == '0')
                $subject = $lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br \> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
            else
            {
                $subject = $lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br /> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$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="viewpoll.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;
            }
                    // MOD AUTHOR COLUMN 2 following lines added
        else
            $subject = '  '.$subject;
        } else {
        if ($cur_topic['moved_to'] != 0)
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = $lang_forum['Moved'].': <a href="viewtopic.php?id='.$cur_topic['moved_to'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
        else if ($cur_topic['closed'] == '0')
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
        else
        {
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
                $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)
        {
            if ($cur_topic['question'] != '') 
                $subject_multipage = '[ '.paginate($num_pages_topic, -1, 'viewpoll.php?id='.$cur_topic['id']).' ]';
            else
                $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 : '';
        }
        //=========================
        //=====RATE TOPIC CODE=====
        //=========================
        //Eric Subach (kha0s@comcast.net)
        //=========================

        if ($rate_topic)
        {
            //Select the rating and user_id for all ratings of the current topic.
            $sql = $db->query ('SELECT rate, user_id FROM ' . $db->prefix . 'Ratings WHERE topic_id = ' . $cur_topic['id']) or error ($lang_rt['Error select user_id and rate'], __FILE__, __LINE__, $db->error ());

            $num_rows = $db->num_rows ($sql);

            if ($num_rows > 0)
            {
                $total_rating = 0;

                //Parse data of ratings and user_ids for all ratings of current topic.
                while ($sql_data = $db->fetch_assoc ($sql))
                {
                    //Should we add the rating to total?
                    $flag = 1;

                    //Get username of user of specific rating.
                    $sql2 = $db->query ('SELECT username FROM ' . $db->prefix . 'users WHERE id = ' . $sql_data['user_id']) or error ($lang_rt['Error select username'], __FILE__, __LINE__, $db->error ());
                    $sql2_data = $db->fetch_assoc ($sql2);

                    //Check if user is banned.
                    foreach ($pun_bans as $ban)
                    {
                        if ($sql2_data['username'] == $ban['username'])
                            $flag = 0;
                    }

                    //If user isn't banned, add rating to total.
                    if ($flag)
                        $total_rating += $sql_data['rate'];
                    else
                        $num_rows--;
                }

                //If any ratings, calculate the overall rating.
                if ($num_rows > 0)
                {
                    $rating = $total_rating / $num_rows;
                    $rating = round ($rating, 2);

                    $subject .= ' ';

                    //If the user is not a guest, make the rating clickable to view who voted.
                    if (!$pun_user['is_guest'])
                        $subject .= '<a href="rate.php?v_id=' . $cur_topic['id'] . '">';

                    //Rating is rounded to the closest star or half-star.
                    //If stars are enabled, find what image file to load.
                    if ($rate_stars)
                    {
                        if ($rating >= 0.0 && $rating < 0.25)
                            $file_name = 'Star_0';
                        else if ($rating >= 0.25 && $rating < 0.75)
                            $file_name = 'Star_0_Half';
                        else if ($rating >= 0.75 && $rating < 1.25)
                            $file_name = 'Star_1';
                        else if ($rating >= 1.25 && $rating < 1.75)
                            $file_name = 'Star_1_Half';
                        else if ($rating >= 1.75 && $rating < 2.25)
                            $file_name = 'Star_2';
                        else if ($rating >= 2.25 && $rating < 2.75)
                            $file_name = 'Star_2_Half';
                        else if ($rating >= 2.75 && $rating < 3.25)
                            $file_name = 'Star_3';
                        else if ($rating >= 3.25 && $rating < 3.75)
                            $file_name = 'Star_3_Half';
                        else if ($rating >= 3.75 && $rating < 4.25)
                            $file_name = 'Star_4';
                        else if ($rating >= 4.25 && $rating < 4.75)
                            $file_name = 'Star_4_Half';
                        else
                            $file_name = 'Star_5';

                        $subject .= '<img src="' . PUN_ROOT . 'img/rate_stars/' . $pun_config['o_rt_cur_stars'] . '/' . $file_name . '.gif" />';
                    }
                    //Otherwise, use numbers.
                    else
                    {
                        $decimal = ($rating - floor ($rating)) * 100;
                        $rating = floor ($rating);

                        if ($decimal >= 25 && $decimal < 75)
                            $rating += 0.5;
                        if ($decimal >= 75)
                            $rating += 1;

                        $subject .= '<strong><small>' . $rating . ' / 5</small></strong>';
                    }

                    //If the link was made clickable, end the tag.
                    if (!$pun_user['is_guest'])
                        $subject .= '</a>';
                }
            }
        }

        //==================
        //=====END CODE=====
        //==================
?>
                <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>
                    <!-- MOD AUTHOR COLUMN 1 line folowing added -->
                    <td class="tc2"  style="WIDTH: 12%"><?php echo ($cur_topic['moved_to'] == null) ? $author : ' ' ?></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 ?>
        <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>
<?php

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

Re: QUERIES

<?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';// Load poll language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/polls.php';

// Fetch some info about the forum
$result = $db->query('SELECT f.forum_name, f.redirect_url, f.moderators, f.num_topics, f.sort_by, 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'].') 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;
//=========================
//=====RATE TOPIC CODE=====
//=========================
//Eric Subach (kha0s@comcast.net)
//=========================

$rate_topic = 0;

//Make sure Rate Topic is installed, enabled, and the user is not a guest.
if (isset ($pun_config['o_rt_cur_version']) && $pun_config['o_rt_enabled'] && !$pun_user['is_guest'])
{
    $rate_topic = 1;

    //Check for a language pack.
    if (file_exists (PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php';
    else if (file_exists (PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php';
    else
        $rate_topic = 0;
}

//If it's enabled, create the link to rate the topic.
if ($rate_topic)
    $pre_link = '<a href="rate.php?r_id=' . $id . '">' . $lang_rt['Rate topic'] . '</a> / ';

//==================
//=====END CODE=====
//==================

// 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> <BR /> <a href="poll.php?fid='.$id.'">'.$lang_polls['New poll'].'</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';
//=========================
//=====RATE TOPIC CODE=====
//=========================
//Eric Subach (kha0s@comcast.net)
//=========================

$rate_topic = 0;
$rate_stars = 0;

//Check if Rate Topic is installed and enabled.
if (isset ($pun_config['o_rt_cur_version']) && $pun_config['o_rt_enabled'])
{
    $rate_topic = 1;

    //Check for language pack.
    if (file_exists (PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php';
    else if (file_exists (PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php';
    else
        $rate_topic = 0;

    //Check if using stars or numbers.
    if ($pun_config['o_rt_use_stars'])
        if (file_exists (PUN_ROOT . 'img/rate_stars/' . $pun_config['o_rt_cur_stars']))
            $rate_stars = 1;
}

//==================
//=====END CODE=====
//==================
?>
<div class="linkst">
    <div class="inbox">
        <p class="pagelink conl"><?php echo $paging_links ?></p>
<?php echo $post_link ?>
        <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><?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>
                                        <!-- MOD AUTHOR COLUMN 1 line folowing added -->
                    <th class="tc2" scope="col"  style="WIDTH: 12%"><?php echo $lang_common['Author'] ?></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
// <!-- MOD AUTHOR COLUMN - SWITCH BLOCK -->
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, sum(r.rate) AS rate, count(r.user_id) AS num_ratings FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'Ratings AS r ON t.id=r.topic_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, sum(r.rate) AS rate, count(r.user_id) AS num_ratings FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_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, sum(r.rate) AS rate, count(r.user_id) AS num_ratings FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'Ratings AS r ON t.id=r.topic_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';
                // MOD AUTHOR COLUMN 1 following line added
        $author = '<a href="profile.php?id='.$cur_topic['has_posted'].'">'.pun_htmlspecialchars($cur_topic['poster']).'</a>';

        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['question'] != '') {
            if ($pun_config['o_censoring'] == '1')
                $cur_topic['question'] = censor_words($cur_topic['question']);
        
        
            if ($cur_topic['moved_to'] != 0)
                $subject = $lang_forum['Moved'].': '.$lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['moved_to'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br /> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
            else if ($cur_topic['closed'] == '0')
                $subject = $lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br \> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
            else
            {
                $subject = $lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br /> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$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="viewpoll.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;
            }
                    // MOD AUTHOR COLUMN 2 following lines added
        else
            $subject = '  '.$subject;
        } else {
        if ($cur_topic['moved_to'] != 0)
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = $lang_forum['Moved'].': <a href="viewtopic.php?id='.$cur_topic['moved_to'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
        else if ($cur_topic['closed'] == '0')
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
        else
        {
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
                $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)
        {
            if ($cur_topic['question'] != '') 
                $subject_multipage = '[ '.paginate($num_pages_topic, -1, 'viewpoll.php?id='.$cur_topic['id']).' ]';
            else
                $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 : '';
        }
        //=========================
        //=====RATE TOPIC CODE=====
        //=========================
        //Eric Subach (kha0s@comcast.net)
        //=========================

        if ($rate_topic)
        {
            //If any ratings, calculate the overall rating.
            if ($cur_topic['num_ratings'] > 0)
            {
                $rating = $cur_topic['rate'] / $cur_topic['num_ratings'];
                $rating = round ($rating, 2);

                $subject .= ' ';

                //If the user is not a guest, make the rating clickable to view who voted.
                if (!$pun_user['is_guest'])
                    $subject .= '<a href="rate.php?v_id=' . $cur_topic['id'] . '">';

                //Rating is rounded to the closest star or half-star.
                //If stars are enabled, find what image file to load.
                if ($rate_stars)
                {
                    if ($rating >= 0.0 && $rating < 0.25)
                        $file_name = 'Star_0';
                    else if ($rating >= 0.25 && $rating < 0.75)
                        $file_name = 'Star_0_Half';
                    else if ($rating >= 0.75 && $rating < 1.25)
                        $file_name = 'Star_1';
                    else if ($rating >= 1.25 && $rating < 1.75)
                        $file_name = 'Star_1_Half';
                    else if ($rating >= 1.75 && $rating < 2.25)
                        $file_name = 'Star_2';
                    else if ($rating >= 2.25 && $rating < 2.75)
                        $file_name = 'Star_2_Half';
                    else if ($rating >= 2.75 && $rating < 3.25)
                        $file_name = 'Star_3';
                    else if ($rating >= 3.25 && $rating < 3.75)
                        $file_name = 'Star_3_Half';
                    else if ($rating >= 3.75 && $rating < 4.25)
                        $file_name = 'Star_4';
                    else if ($rating >= 4.25 && $rating < 4.75)
                        $file_name = 'Star_4_Half';
                    else
                        $file_name = 'Star_5';

                    $subject .= '<img src="' . PUN_ROOT . 'img/rate_stars/' . $pun_config['o_rt_cur_stars'] . '/' . $file_name . '.gif" />';
                }
                //Otherwise, use numbers.
                else
                {
                    $decimal = ($rating - floor ($rating)) * 100;
                    $rating = floor ($rating);

                    if ($decimal >= 25 && $decimal < 75)
                        $rating += 0.5;
                    if ($decimal >= 75)
                        $rating += 1;

                    $subject .= '<strong><small>' . $rating . ' / 5</small></strong>';
                }

                //If the link was made clickable, end the tag.
                if (!$pun_user['is_guest'])
                    $subject .= '</a>';
            }
        }

        //==================
        //=====END CODE=====
        //==================
?>
                <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>
                    <!-- MOD AUTHOR COLUMN 1 line folowing added -->
                    <td class="tc2"  style="WIDTH: 12%"><?php echo ($cur_topic['moved_to'] == null) ? $author : ' ' ?></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 ?>
        <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>
<?php

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

40

Re: QUERIES

viewforum with out link to create new thread:

<?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'].'/index.php';// Load poll language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/polls.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;
//=========================
//=====RATE TOPIC CODE=====
//=========================
//Eric Subach (kha0s@comcast.net)
//=========================

$rate_topic = 0;

//Make sure Rate Topic is installed, enabled, and the user is not a guest.
if (isset ($pun_config['o_rt_cur_version']) && $pun_config['o_rt_enabled'] && !$pun_user['is_guest'])
{
    $rate_topic = 1;

    //Check for a language pack.
    if (file_exists (PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php';
    else if (file_exists (PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php';
    else
        $rate_topic = 0;
}

//If it's enabled, create the link to rate the topic.
if ($rate_topic)
    $pre_link = '<a href="rate.php?r_id=' . $id . '">' . $lang_rt['Rate topic'] . '</a> / ';

//==================
//=====END CODE=====
//==================

// 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> <BR /> <a href="poll.php?fid='.$id.'">'.$lang_polls['New poll'].'</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
}
//=========================
//=====RATE TOPIC CODE=====
//=========================
//Eric Subach (kha0s@comcast.net)
//=========================

$rate_topic = 0;
$rate_stars = 0;

//Check if Rate Topic is installed and enabled.
if (isset ($pun_config['o_rt_cur_version']) && $pun_config['o_rt_enabled'])
{
    $rate_topic = 1;

    //Check for language pack.
    if (file_exists (PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_user['language'] . '/rate_topic.php';
    else if (file_exists (PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php'))
        require PUN_ROOT . 'lang/' . $pun_config['o_rt_default_lang'] . '/rate_topic.php';
    else
        $rate_topic = 0;

    //Check if using stars or numbers.
    if ($pun_config['o_rt_use_stars'])
        if (file_exists (PUN_ROOT . 'img/rate_stars/' . $pun_config['o_rt_cur_stars']))
            $rate_stars = 1;
}

//==================
//=====END CODE=====
//==================
?>
<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>
                                        <!-- MOD AUTHOR COLUMN 1 line folowing added -->
                    <th class="tc2" scope="col"  style="WIDTH: 12%"><?php echo $lang_common['Author'] ?></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
// <!-- MOD AUTHOR COLUMN - SWITCH BLOCK -->
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, sum(r.rate) AS rate, count(r.user_id) AS num_ratings FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'Ratings AS r ON t.id=r.topic_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, sum(r.rate) AS rate, count(r.user_id) AS num_ratings FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_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, sum(r.rate) AS rate, count(r.user_id) AS num_ratings FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'posts AS p ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'Ratings AS r ON t.id=r.topic_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';
                // MOD AUTHOR COLUMN 1 following line added
        $author = '<a href="profile.php?id='.$cur_topic['has_posted'].'">'.pun_htmlspecialchars($cur_topic['poster']).'</a>';

        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['question'] != '') {
            if ($pun_config['o_censoring'] == '1')
                $cur_topic['question'] = censor_words($cur_topic['question']);
        
        
            if ($cur_topic['moved_to'] != 0)
                $subject = $lang_forum['Moved'].': '.$lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['moved_to'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br /> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
            else if ($cur_topic['closed'] == '0')
                $subject = $lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br \> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
            else
            {
                $subject = $lang_polls['Poll'].': <a href="viewpoll.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['question']).'</a><br /> <span class="byuser"><b>'.pun_htmlspecialchars($cur_topic['subject']).'</b> '.$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="viewpoll.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;
            }
                    // MOD AUTHOR COLUMN 2 following lines added
        else
            $subject = '  '.$subject;
        } else {
        if ($cur_topic['moved_to'] != 0)
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = $lang_forum['Moved'].': <a href="viewtopic.php?id='.$cur_topic['moved_to'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
        else if ($cur_topic['closed'] == '0')
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
        else
        {
            // <!-- MOD AUTHOR COLUMN 1 line folowing modified -->
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a>';
                $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)
        {
            if ($cur_topic['question'] != '') 
                $subject_multipage = '[ '.paginate($num_pages_topic, -1, 'viewpoll.php?id='.$cur_topic['id']).' ]';
            else
                $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 : '';
        }
        //=========================
        //=====RATE TOPIC CODE=====
        //=========================
        //Eric Subach (kha0s@comcast.net)
        //=========================

        if ($rate_topic)
        {
            //If any ratings, calculate the overall rating.
            if ($cur_topic['num_ratings'] > 0)
            {
                $rating = $cur_topic['rate'] / $cur_topic['num_ratings'];
                $rating = round ($rating, 2);

                $subject .= ' ';

                //If the user is not a guest, make the rating clickable to view who voted.
                if (!$pun_user['is_guest'])
                    $subject .= '<a href="rate.php?v_id=' . $cur_topic['id'] . '">';

                //Rating is rounded to the closest star or half-star.
                //If stars are enabled, find what image file to load.
                if ($rate_stars)
                {
                    if ($rating >= 0.0 && $rating < 0.25)
                        $file_name = 'Star_0';
                    else if ($rating >= 0.25 && $rating < 0.75)
                        $file_name = 'Star_0_Half';
                    else if ($rating >= 0.75 && $rating < 1.25)
                        $file_name = 'Star_1';
                    else if ($rating >= 1.25 && $rating < 1.75)
                        $file_name = 'Star_1_Half';
                    else if ($rating >= 1.75 && $rating < 2.25)
                        $file_name = 'Star_2';
                    else if ($rating >= 2.25 && $rating < 2.75)
                        $file_name = 'Star_2_Half';
                    else if ($rating >= 2.75 && $rating < 3.25)
                        $file_name = 'Star_3';
                    else if ($rating >= 3.25 && $rating < 3.75)
                        $file_name = 'Star_3_Half';
                    else if ($rating >= 3.75 && $rating < 4.25)
                        $file_name = 'Star_4';
                    else if ($rating >= 4.25 && $rating < 4.75)
                        $file_name = 'Star_4_Half';
                    else
                        $file_name = 'Star_5';

                    $subject .= '<img src="' . PUN_ROOT . 'img/rate_stars/' . $pun_config['o_rt_cur_stars'] . '/' . $file_name . '.gif" />';
                }
                //Otherwise, use numbers.
                else
                {
                    $decimal = ($rating - floor ($rating)) * 100;
                    $rating = floor ($rating);

                    if ($decimal >= 25 && $decimal < 75)
                        $rating += 0.5;
                    if ($decimal >= 75)
                        $rating += 1;

                    $subject .= '<strong><small>' . $rating . ' / 5</small></strong>';
                }

                //If the link was made clickable, end the tag.
                if (!$pun_user['is_guest'])
                    $subject .= '</a>';
            }
        }

        //==================
        //=====END CODE=====
        //==================
?>
                <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>
                    <!-- MOD AUTHOR COLUMN 1 line folowing added -->
                    <td class="tc2"  style="WIDTH: 12%"><?php echo ($cur_topic['moved_to'] == null) ? $author : ' ' ?></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';