I made an installable extension out of it... yay!
But since there is no documentation on how to create an extension (which I'm sure is a huge hangup in the extensions community, not to mention the obscure and impossible to manipulate choice of using a fully CSS-based page design), I took an existing broken beta extension, and wrapped the code around it with a hook.
<?xml version="1.0" encoding="utf-8"?>
<extension engine="1.0">
<id>active_topics</id>
<title>Active Topics List on Index</title>
<version>1.1</version>
<description>This will add the x most recent posts to the index page of the forum for easy navigation and attention-grabbing.</description>
<author>Slavok and FalconFour</author>
<minversion>1.3</minversion>
<maxtestedon>1.3</maxtestedon>
<install>
<![CDATA[
]]>
</install>
<uninstall>
<![CDATA[
]]>
</uninstall>
<hooks>
<hook id="in_main_output_start"><![CDATA[
$topics_count = 5;
$query_active_topics= array(
'SELECT' => 't.id AS tid, t.poster, t.subject, t.posted AS has_posted, t.last_post, t.last_post_id, t.num_replies, t.num_views, t.closed, t.sticky, t.forum_id, t.last_poster',
'FROM' => 'topics AS t',
'JOINS' => array(
array(
'INNER JOIN' => 'forums AS f',
'ON' => 'f.id=t.forum_id'
),
array(
'LEFT JOIN' => 'forum_perms AS fp',
'ON' => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
)
),
'ORDER BY' => 't.last_post DESC',
'LIMIT' => $topics_count
);
$result_active = $forum_db->query_build($query_active_topics) or error(__FILE__, __LINE__);
if ($forum_db->num_rows($result_active) == 0) {
?>
<div class="main-content main-message">
<p>There is no message.</p>
</div>
<?php
} else {
require_once FORUM_ROOT.'lang/'.$forum_user['language'].'/forum.php';
?>
<div class="main-subhead">
<p class="item-summary">
<span>
<strong class="subject-title"><?php echo $lang_index['Topics']; ?></strong>
<strong class="info-replies"><?php echo $lang_forum['Replies']; ?></strong>
<strong class="info-views"><?php echo $lang_forum['Views']; ?></strong>
<strong class="info-lastpost"><?php echo $lang_index['last post']; ?></strong>
</span>
</p>
</div>
<div class="main-content main-forum">
<?php
$item_num = 1;
while ($cur_set = $forum_db->fetch_assoc($result_active))
{
// Start from scratch
$item_subject = $item_body = $item_status = $item_nav = $item_title = array();
$item_indicator = '';
if (!$forum_user['is_guest'] && $forum_config['o_show_dot'] == '1' && $cur_set['has_posted'] > 0)
{
$item_title['posted'] = '<span class="posted-mark">'.$lang_forum['You posted indicator'].'</span>';
$item_status['posted'] = 'posted';
}
$item_title['link'] = '<a href="'.forum_link($forum_url['post'], $cur_set['last_post_id']).'">'.forum_htmlencode($cur_set['subject']).'</a>';
if (!empty($item_nav))
$item_title['nav'] = '<span class="item-nav">'.sprintf($lang_forum['Topic navigation'], implode('  ', $item_nav)).'</span>';
$item_body['subject']['title'] = '<h3 class="hn"><span class="item-num">'.forum_number_format(++$item_num).'</span> '.implode(' ', $item_title).'</h3> <em> by '.forum_htmlencode($cur_set['poster']).'</em>';
if ($cur_set['sticky'] == '1')
{
$item_subject_status['sticky'] = $lang_forum['Sticky'];
$item_status['sticky'] = 'sticky';
}
if ($cur_set['closed'] != '0')
{
$item_subject_status['closed'] = $lang_forum['Closed'];
$item_status['closed'] = 'closed';
}
// Does this topic contain posts we haven't read? If so, tag it accordingly.
if (!$forum_user['is_guest'] && $cur_set['last_post'] > $forum_user['last_visit'] && (!isset($tracked_topics['topics'][$cur_set['tid']]) || $tracked_topics['topics'][$cur_set['tid']] < $cur_set['last_post']) && (!isset($tracked_topics['forums'][$cur_set['forum_id']]) || $tracked_topics['forums'][$cur_set['forum_id']] < $cur_set['last_post']))
{
$item_status['new'] = 'new';
}
if (!empty($item_subject_status))
$item_subject['status'] = '<span class="item-status">'.sprintf($lang_forum['Item status'], implode(' ', $item_subject_status)).'</span>';
// $item_subject['starter'] = '<span class="item-starter">'.sprintf($lang_forum['Topic starter'], '<cite>'.forum_htmlencode($cur_set['poster']).'</cite>').'</span>';
$item_body['subject']['desc'] = implode(' ', $item_subject);
if (empty($item_status))
$item_status['normal'] = 'normal';
$item_style = (($item_num % 2 != 0) ? ' odd' : ' even').(($item_num == 1) ? ' main-first-item' : '').((!empty($item_status)) ? ' '.implode(' ', $item_status) : '');
$item_body['info']['replies'] = '<li class="info-replies"><strong>'.forum_number_format($cur_set['num_replies']).'</strong> <span class="label">'.(($cur_set['num_replies'] == 1) ? $lang_forum['Reply'] : $lang_forum['Replies']).'</span></li>';
$item_body['info']['views'] = '<li class="info-replies"><strong>'.forum_number_format($cur_set['num_views']).'</strong> <span class="label">'.(($cur_set['num_views'] == 1) ? $lang_forum['View'] : $lang_forum['Views']).'</span></li>';
$item_body['info']['last_post'] = '<li class="info-lastpost"><span class="label">'.$lang_index['Last post'].'</span> <strong><a href="'.forum_link($forum_url['post'], $cur_set['last_post_id']).'">'.format_time($cur_set['last_post']).'</a></strong> <cite>'.sprintf($lang_index['Last poster'], forum_htmlencode($cur_set['last_poster'])).'</cite></li>';
?>
<div class="main-item<?php echo $item_style ?>">
<span class="icon <?php echo implode(' ', $item_status) ?>"><!-- --></span>
<div class="item-subject">
<?php echo implode("\n\t\t\t\t", $item_body['subject'])."\n" ?>
</div>
<ul class="item-info">
<?php echo implode("\n\t\t\t\t", $item_body['info'])."\n" ?>
</ul>
</div>
<?php
}
}
]]></hook>
</hooks>
</extension>
Create a new folder in "extensions" called "active_topics", and save the above code as "manifest.xml".
Honestly though, I think I might be switching to either PunBB 1.2, which is more properly and cleanly supported, or just dropping PunBB altogether, since it seems its developers don't even know what's going on!