(5 replies, posted in PunBB 1.3 discussion)

They are still doing commits every now and then, but no new version release for awhile. I havent decided whether to upgrade a 1.2 board i have to the newest punbb or fluxbb yet though.

http://punbb.informer.com/trac/timeline … format=rss


(3 replies, posted in PunBB 1.3 discussion)

Slavok wrote:

This post was removed after the e-mail had been sent to you.

Why is this happening so much? Is it because they are spam posts?


(3 replies, posted in PunBB 1.3 discussion)

I keep getting emails "Reply to topic: ..." notifying me of new posts to a link and then the link is broken?

I reported this awhile back, please fix this bug, its annoying!


(52 replies, posted in PunBB 1.2 discussion)

Yes, I had these backedup



(52 replies, posted in PunBB 1.2 discussion)

I think I have these backed up somewhere. I'll see if I can remember to upload on here sometime


(58 replies, posted in PunBB.NET discussion)

I'm sad to see your development team broken in half, this will only slow down PunBB development. I've never heard of a company support a web product for 2 platforms. sad Especially if you try to keep them at the same level with the same features, I just dont see that working out good at all. Building more extensions for PunBB would of increased its popularity a lot more than any .NET version. neutral

Just want to mention that their should only be link to PunBB, instead of 2, at the bottom. wink

I know this is a small issue, but can you please take it down to 1 link?
thanks wink


(27 replies, posted in News)

Is there a 1.3.0 to 1.3.2 hdiff?

I dont see that or the 1.3.1 to 1.3.2 conversion on the downloads page sad


(41 replies, posted in PunBB 1.3 extensions)

Anatoly wrote:
s0me0ne wrote:

Also do you have the source files to the icons?

Is it OK?

Everything is flattened, but this isnt a big issue, so dont wory about it. wink

If you have SEO urls turned on, it still emails the link as normal

I got an email, letting me know there was a reply to a thread and it gave me this link

"Currently used extensions" in the page footer

The post is located at http://punbb.informer.com/forums/post/120517/#p120517

However when I clicked on it the page wasnt found, because of the SEO urls enabled here, but I searched by the title of the post and found it.

The email part needs to be updated, either that or it needs to know how to convert it to the new url


(41 replies, posted in PunBB 1.3 extensions)

I meant the source files for the icons (bold, picture) as in PSD or something

I'd like to disable the text Currently used extensions: in the footer with a option in the admin. I think this would be better placed on the

Administration  » Start  » Information page

I have to agree, they should do what wordpress does and put them as a HTML comment and so if you really want to see them, you look at the source code

The admin has this:

User info in posts Show poster location, register date, post count, e-mail and URL in posts.

But I'd like for it to seperate the email address and url options into their own options. I'd dont mind showing the user info but I dont want to show thier email or url, if they put it in their profile and saved it to be public


(3 replies, posted in PunBB 1.3 discussion)

The following is in the admin

URL Scheme (SEF URLs) for your board's pages

WARNING! If you select any scheme other than the default scheme you must copy/upload the file .htaccess from the extras directory into the forum root directory. The server that hosts the forums must be configured with mod_rewrite support and must allow the use of .htaccess files. For servers other than Apache, please refer to your servers documentation.

However there is no .htaccess in the extras folder, You rename the .htaccess.dist to just .htaccess

You might want to update that notice there


(41 replies, posted in PunBB 1.3 extensions)

Can you please make the next version force a space before and after the smilies? Many people click on it and if there isn't a space before it, it wont show up right and its safe to throw one after it too, since they might add a smiley into a huge paragraph without bothering to add a space.

Also do you have the source files to the icons? I was wondering if they had a color version of them or not, otherwise I'll just change the palette in photoshop, but it would be nice if you did have full color versions of them too.

Thanks a lot. smile


(2 replies, posted in PunBB 1.3 discussion)

Will there be a SpinkBB or simililar setup for fast color changing of PunBB 1.3?

I know its not hard to do it manually, but that site made it so fast to do. cool


(6 replies, posted in News)

Please no more future updates that only change the copyright year.

Copyrights do not have to have the year, they can just say
copyright punbb
and thats it.

That would save a lot of us, lots of headaches. I use a lot of hacks on my forum and dont like having to compare all my files. THanks.

I take that as a Yes I suppose hmm

if I only use the javascript for the easy bbcode, i can just make a note about the gpl in the JS right? and keep the project the way it is, i dont plan on selling it, just using it for my own use for now, but it might go gpl later on

I would give credit in the readme, I just need to know what to put, or if I can even do this.



(89 replies, posted in PunBB 1.2 discussion)

I'll agree spam filtering and captcha should be options for the default installation, too many newcomers to punbb and people that dont konw php wont have time or know how to implement some of the plugins and mods

i doubt it will happen though, the team here has decided in keeping the core super clean, although spam filters are being put in almost every modern web app now

i think in a way it hurts punbb, i see a lot of old links in old posts that are now using phpbb/smf/vbulletin and I'm sure they switched because of spam and fake registering


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



  This script is used to include information about your board from
  pages outside the forums and to syndicate news about recent
  discussions via RSS. The script can display a list of recent
  discussions (sorted by post time or last post time), a list of
  active users or a collection of general board statistics. The
  script can be called directly via an URL (for RSS), from a PHP
  include command or through the use of Server Side Includes (SSI).

  The scripts behaviour is controlled via variables supplied in the
  URL to the script. The different variables are: action (what to
  output), show (how many topics to display), fid (the ID or ID's of
  the forum(s) to poll for topics), nfid (the ID or ID's of forums
  that should be excluded) and type (output as HTML or RSS). The
  only mandatory variable is action. Possible/default values are:

    action: active (show most recently active topics) (HTML or RSS)
            new (show newest topics) (HTML or RSS)
            online (show users online) (HTML)
            online_full (as above, but includes a full list) (HTML)
            stats (show board statistics) (HTML)

    show:   Any integer value between 1 and 50. This variables is
            ignored for RSS output. The default is 15.

    fid:    One or more forum ID's (comma-separated). If ignored,
            topics from all guest-readable forums will be polled.

    nfid:   One or more forum ID's (comma-separated) that are to be
            excluded. E.g. the ID of a a test forum.

    type:   RSS. Anything else means HTML output.

  Here are some examples using PHP include().

    Show the 15 most recently active topics from all forums:

    Show the 10 newest topics from forums with ID 5, 6 and 7:

    Show users online:

    Show users online with full listing of users:

    Show board statistics:

  Here are some examples using SSI.

    Show the 5 newest topics from forums with ID 11 and 22:
    <!--#include virtual="forums/extern.php?action=new&show=5&fid=11,22" -->

    Show board statistics:
    <!--#include virtual="forums/extern.php?action=stats" -->

  And finally some examples using extern.php to output an RSS 0.91

    Output the 15 most recently active topics:

    Output the 15 newest topics from forum with ID=2:

  Below you will find some variables you can edit to tailor the
  scripts behaviour to your needs.


// The maximum number of topics that will be displayed
$show_max_topics = 60;

// The length at which topic subjects will be truncated (for HTML output)
$max_subject_length = 30;

// If you exceed max number of allowed topics, how many to display?
$show_default_topics = 10;

// Define the location of your punBB install
$forums = "";


// DO NOT EDIT ANYTHING BELOW THIS LINE! (unless you know what you are doing)

define('PUN_ROOT', './');
@include PUN_ROOT.'config.php';
require PUN_ROOT.'include/parser.php';

// If PUN isn't defined, config.php is missing or corrupt
if (!defined('PUN'))
    exit('The file \'config.php\' doesn\'t exist or is corrupt. Please run install.php to install PunBB first.');

// Make sure PHP reports all errors except E_NOTICE
error_reporting(E_ALL ^ E_NOTICE);

// Turn off magic_quotes_runtime

// Load the functions script
require PUN_ROOT.'include/functions.php';

// Load DB abstraction layer and try to connect
require PUN_ROOT.'include/dblayer/common_db.php';

// Load cached config
@include PUN_ROOT.'cache/cache_config.php';
if (!defined('PUN_CONFIG_LOADED'))
    require PUN_ROOT.'include/cache.php';
    require PUN_ROOT.'cache/cache_config.php';

// Make sure we (guests) have permission to read the forums
$result = $db->query('SELECT g_read_board FROM '.$db->prefix.'groups WHERE g_id=3') or error('Unable to fetch group info', __FILE__, __LINE__, $db->error());
if ($db->result($result) == '0')
    exit('No permission');

// Attempt to load the common language file
@include PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/common.php';
if (!isset($lang_common))
    exit('There is no valid language pack \''.$pun_config['o_default_lang'].'\' installed. Please reinstall a language of that name.');

if (!isset($_GET['action']))
    exit('No parameters supplied. See extern.php for instructions.');

// Converts the CDATA end sequence ]]> into ]]>
function escape_cdata($str)
    return str_replace(']]>', ']]>', $str);

// Show recent discussions
if ($_GET['action'] == 'active' || $_GET['action'] == 'new')
    $order_by = ($_GET['action'] == 'active') ? 't.last_post' : 't.posted';
    $forum_sql = '';

    // Was any specific forum ID's supplied?
    if (isset($_GET['fid']) && $_GET['fid'] != '')
        $fids = explode(',', trim($_GET['fid']));
        $fids = array_map('intval', $fids);

        if (!empty($fids))
            $forum_sql = ' AND f.id IN('.implode(',', $fids).')';

    // Any forum ID's to exclude?
    if (isset($_GET['nfid']) && $_GET['nfid'] != '')
        $nfids = explode(',', trim($_GET['nfid']));
        $nfids = array_map('intval', $nfids);

        if (!empty($nfids))
            $forum_sql = ' AND f.id NOT IN('.implode(',', $nfids).')';

    // Should we output this as RSS?
    if (isset($_GET['type']) && strtoupper($_GET['type']) == 'RSS')
        $rss_description = ($_GET['action'] == 'active') ? $lang_common['RSS Desc Active'] : $lang_common['RSS Desc New'];
        $url_action = ($_GET['action'] == 'active') ? '&action=new' : '';

        // Send XML/no cache headers
        header('Content-Type: text/xml');
        header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');

        // It's time for some syndication!
        echo '<?xml version="1.0" encoding="'.$lang_common['lang_encoding'].'"?>'."\r\n";
        echo '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">'."\r\n";
        echo '<rss version="0.91">'."\r\n";
        echo '<channel>'."\r\n";
        echo "\t".'<title>'.pun_htmlspecialchars($pun_config['o_board_title']).'</title>'."\r\n";
        echo "\t".'<link>'.$pun_config['o_base_url'].'/</link>'."\r\n";
        echo "\t".'<description>'.pun_htmlspecialchars($rss_description.' '.$pun_config['o_board_title']).'</description>'."\r\n";
        echo "\t".'<language>en-us</language>'."\r\n";

        // Fetch 15 topics
        $result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, f.id AS fid, f.forum_name FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT 15') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

        while ($cur_topic = $db->fetch_assoc($result))
            if ($pun_config['o_censoring'] == '1')
                $cur_topic['subject'] = censor_words($cur_topic['subject']);

            echo "\t".'<item>'."\r\n";
            echo "\t\t".'<title>'.pun_htmlspecialchars($cur_topic['subject']).'</title>'."\r\n";
            echo "\t\t".'<link>'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].$url_action.'</link>'."\r\n";
            echo "\t\t".'<description><![CDATA['.escape_cdata($lang_common['Forum'].': <a href="'.$pun_config['o_base_url'].'/viewforum.php?id='.$cur_topic['fid'].'">'.$cur_topic['forum_name'].'</a><br />'."\r\n".$lang_common['Author'].': '.$cur_topic['poster'].'<br />'."\r\n".$lang_common['Posted'].': '.date('r', $cur_topic['posted']).'<br />'."\r\n".$lang_common['Last post'].': '.date('r', $cur_topic['last_post'])).']]></description>'."\r\n";
            echo "\t".'</item>'."\r\n";

        echo '</channel>'."\r\n";
        echo '</rss>';

    // Output regular HTML
        $show = isset($_GET['show']) ? intval($_GET['show']) : 15;
        if ($show < 1 || $show > 50)
            $show = 15;

        // Fetch $show topics
        $result = $db->query('SELECT t.id, t.subject FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT '.$show) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

        while ($cur_topic = $db->fetch_assoc($result))
            if ($pun_config['o_censoring'] == '1')
                $cur_topic['subject'] = censor_words($cur_topic['subject']);

            if (pun_strlen($cur_topic['subject']) > $max_subject_length)
                $subject_truncated = pun_htmlspecialchars(trim(substr($cur_topic['subject'], 0, ($max_subject_length-5)))).' …';
                $subject_truncated = pun_htmlspecialchars($cur_topic['subject']);

            echo '<li><a href="'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].'&action=new" title="'.pun_htmlspecialchars($cur_topic['subject']).'">'.$subject_truncated.'</a></li>'."\n";


// Show users online
else if ($_GET['action'] == 'online' || $_GET['action'] == 'online_full')
    // Load the index.php language file
    require PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/index.php';
    // Fetch users online info and generate strings for output
    $num_guests = $num_users = 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[] = '<a href="'.$pun_config['o_base_url'].'/profile.php?id='.$pun_user_online['user_id'].'">'.pun_htmlspecialchars($pun_user_online['ident']).'</a>';

    echo $lang_index['Guests online'].': '.$num_guests.'<br />';

    if ($_GET['action'] == 'online_full')
        echo $lang_index['Users online'].': '.implode(', ', $users).'<br />';
        echo $lang_index['Users online'].': '.$num_users.'<br />';


// Show board statistics
else if ($_GET['action'] == 'stats')
    // Load the index.php language file
    require PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/index.php';

    // 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);

    echo $lang_index['No of users'].': '.$stats['total_users'].'<br />';
    echo $lang_index['Newest user'].': <a href="'.$pun_config['o_base_url'].'/profile.php?id='.$stats['last_user']['id'].'">'.pun_htmlspecialchars($stats['last_user']['username']).'</a><br />';
    echo $lang_index['No of topics'].': '.$stats['total_topics'].'<br />';
    echo $lang_index['No of posts'].': '.$stats['total_posts'];


// Use this to display 'news' - the recent topics from a specific forum
// expanded to include the first post text, posters, comments, etc.

else if ($_GET['action'] == 'news')
    $order_by = ($_GET['action'] == 'active') ? 't.last_post' : 't.posted';
    $forum_sql = '';

    // Get the forum id(s) you'd like to post news from
    if (isset($_GET['fid']) && $_GET['fid'] != '')
        $fids = explode(',', trim($_GET['fid']));
        $fids = array_map('intval', $fids);

        if (!empty($fids))
            $forum_sql = ' AND f.id IN('.implode(',', $fids).')';

    // RSS support not implemented, if anyone wants to do it, feel free..
    if (isset($_GET['type']) && strtoupper($_GET['type']) == 'RSS')
    // Regular HTML output
        $show = isset($_GET['show']) ? intval($_GET['show']) : $show_default_topics;
        if ($show < 1 || $show > $show_max_topics)
            $show = $show_default_topics;        

        $result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, t.num_replies, t.num_views, f.id AS fid, f.forum_name FROM '.$db_prefix.'topics AS t INNER JOIN '.$db_prefix.'forums AS f ON t.forum_id=f.id WHERE t.moved_to IS NULL '.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT '.$show.' ') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
        $show_count = 0;

            echo "No news to display";

            while ( ($show_count < $show) && ($cur_topic = $db->fetch_assoc($result)) ) 
                echo "<div class=newsblock>";
                $temp = '';
                if ($pun_config['o_censoring'] == '1')
                    $cur_topic['subject'] = censor_words($cur_topic['subject']);
                if (pun_strlen($cur_topic['subject']) > $max_subject_length)
                    $subject_truncated = trim(substr($cur_topic['subject'], 0, ($max_subject_length-5))).' ...';
                    $subject_truncated = $cur_topic['subject'];

                // Simplify frequently required display information
                $thisdate = date('l, d F Y', $cur_topic['posted']);
                $poster = $cur_topic['poster'];
                $comments = $cur_topic['num_replies'];
                $views = $cur_topic['num_views'];

                // If using headlines, then after first item only show headlines...
                if(isset($_GET['headlines']) && $show_count > 0)
                    echo "<p class=\"newsheadline\"><a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">$subject_truncated</a> ($comments)</p> \n";
                    // DISPLAY FOR TITLE OF NEWS
                    echo "<p class=\"newstitle\"><a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">$subject_truncated</a></p> \n";

                    $id = $cur_topic['id'];
                    $msg = $db->query('SELECT id, poster, poster_id, poster_ip, poster_email, message, posted, edited, edited_by FROM '.$db_prefix.'posts WHERE topic_id='.$id.' ORDER BY id LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
                    if ( !$db->num_rows($msg) ) continue;

                    $cur_post = $db->fetch_assoc($msg);
                    $posterid = $cur_post['poster_id']; 
                    $user_avatar = '';
                // Call Avatars Code
                    if ($img_size = @getimagesize($pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.gif'))
                        $user_avatar = '<img src="'.$forums.'/'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.gif" '.$img_size[3].' alt="" />';
                    else if ($img_size = @getimagesize($pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.jpg'))
                         $user_avatar = '<img src="'.$forums.'/'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.jpg" '.$img_size[3].' alt="" />';
                    else if ($img_size = @getimagesize($pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.png'))
                        $user_avatar = '<img src="'.$forums.'/'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.png" '.$img_size[3].' alt="" />';

                    // DISPLAY FOR "Posted on DATE by POSTER"
                    echo "<p class=\"newsdetails\">Posted on $thisdate by <a href=".$pun_config['o_base_url']."/profile.php?id=$posterid>$poster</a> $user_avatar</p> \n";

                    $truncate = isset($_GET['summary']) ? 1 : 0;
                    if ($truncate == 1)
                        $paragraph = preg_split("/\s*\n+/", $cur_post['message']);
                        if (isset($paragraph[1])) 
                            $cur_post['message'] = $paragraph[0] . "...";

                    // parse BBCode, smilies and HTML
                    $cur_post['message'] = parse_message($cur_post['message'], 0);
                    if ($pun_config['o_smilies'] == '1')
                    $message = do_smilies($cur_post['message']);        
                    echo str_replace("img/smilies", $forums."/img/smilies", "<p class=\"newstext\">$message");
                    if ($truncate == 1) { echo "<p><a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">Read More...</a></p>"; }
                    echo "</p> \n";

                    echo "<p class=\"newsextra\">Comments (<a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">$comments</a>)</p> \n";
                    /* | Views (<a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">$views</a>) </p> \n";*/
                echo "</div>"; // end newsblock div

    exit('Bad request');

I figured out my problem the avatar bug, the avatar code was before the query which is why it was giving wierd results, edited this post with the working code

Ive since made this option default to "Hide your e-mail address and disallow form e-mail." but is there a way to set everyone to that options, im sure some people are set to: "Hide your e-mail address but allow form e-mail." because that was the default beforehand