Topic: DB Query error with attachment mod

I am using a piece of code that normally resides in viewtopic.php but I am trying to get it to work in viewforum.php. - It works to a certain degree, but it appears to have a problem with the "allow" query of the code.

    // Attachment Mod Block Start
    $attach_allow_download = false;
    $attach_output = '';
    $attach_num = 0;
    // Check if this post has any attachments
    $result_attach = $db->query('SELECT af.id, af.filename, af.size, af.downloads FROM '.$db->prefix.'attach_2_files AS af WHERE af.post_id='.$cur_topic['id']) or error('Unable to fetch if there were any attachments to the post', __FILE__, __LINE__, $db->error());
    $attach_num = $db->num_rows($result_attach);
    if($attach_num > 0){
        if($pun_user['g_id']==PUN_ADMIN)$attach_allow_download=true;
        else{         //fetch the rules of the forum, and check so that the user is allowed to download.
            $result_attach_two = $db->query('SELECT ar.rules FROM '.$db->prefix.'attach_2_rules AS ar WHERE ar.group_id=\''.$pun_user['group_id'].'\' AND ar.forum_id='.$cur_topic['forum_id'].' LIMIT 1')or error('Unable to fetch rules for the attachments', __FILE__, __LINE__, $db->error());
            if($db->num_rows($result_attach_two)==1){
                list($attach_rules)=$db->fetch_row($result_attach_two);
                $attach_allow_download = attach_rules($attach_rules,ATTACH_DOWNLOAD);
            }
        }
        if($attach_allow_download){//check if the user is allowed to download it.
            while(list($attachment_id, $attachment_filename, $attachment_size, $attachment_downloads)=$db->fetch_row($result_attach)){
                $attachment_extension=attach_get_extension($attachment_filename);
                $attach_output .= '<span title="header=[Filename: '.$attachment_filename.'] cssheader=[box_attach_header] cssbody=[box_body_attach] body=['.pun_htmlspecialchars(attach_icon($attachment_extension)).''.$attachment_filename.'<br />'.$lang_attach['Size:'].'&nbsp;'.number_format($attachment_size).'&nbsp;'.$lang_attach['bytes'].'<br />'.$lang_attach['Downloads:'].'&nbsp;<b>'.number_format($attachment_downloads).'</b>] delay=[0] fade=[on]"><img src="img/paperclip.gif" alt="" /></span>';
            }
        }
    }
    // Attachment Mod Block End

but this query causes the error below:

            $result_attach_two = $db->query('SELECT ar.rules FROM '.$db->prefix.'attach_2_rules AS ar WHERE ar.group_id=\''.$pun_user['group_id'].'\' AND ar.forum_id='.$cur_topic['forum_id'].' LIMIT 1')or error('Unable to fetch rules for the attachments', __FILE__, __LINE__, $db->error());

File: c:\fluxbb\viewforum.php
Line: 351

FluxBB reported: Unable to fetch rules for the attachments

Database reported: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1' at line 1 (Errno: 1064)

Thanks for any help.
Shedrock

FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

It was ages since I even looked on this, but I'll give it a try big_smile
The reason it goes all the way to that query that fails is probably just a coincidence. I would think it should fail at the first query.

But, why are you putting it in viewforum, what are you trying to do? (I need to know what you want to do before I really can help)

Re: DB Query error with attachment mod

The reason it is in viewforum is because when you are viewing it, I made a separate column that displays an attachment icon like VBulletin does.

FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

I think it's overkill to use that code then (and I doubt you'll get it to work either)

You need to do a couple of things

  1. Do a check if the user is allowed to see attachments (once is enough)

  2. For each thread, get all post id's and check the attachment table if there's a match (just a yes/no thing)

The code you tried to use, well, are far from usable, and uses other variables, that I don't think even exist in viewforum.php.

So, the best is to write the code from scratch, than to copy something from another file. Can you program php, or will you need help with doing it?

Re: DB Query error with attachment mod

Well, it does work. the problem as I've stated in a previous post is that I can't get the db query line to work. All the rest of it works. I just can't get the code to work for the allowed part. What I've done is set the rules so that everyone can see the icon as well as the actual file in viewtopic, because it would make no sense seeing an icon in viewforum and no file attachment in viewtopic. As for overkill, well, if you saw it you would see exactly what I was referring to.

I know there must be a way for this to work, because all that is in viewtopic.php is more or less in viewforum.php. My viewforum is heavily modified, it is just that query driving me insane. Someone must be able to assist me with this.

Thanks for your help btw.

Shedrock

FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

is this variable defined in viewforum.php?  $cur_topic['forum_id']

just before the query, do

var_dump($cur_topic);
exit;

It's best to 'view source' to get the result readable.

(I'm guessing that forum_id isn't defined, but I could be wrong wink)

Last edited by Frank H (2008-11-03 20:35:52)

Re: DB Query error with attachment mod

Here is my viewforum file: Maybe this may help.

<?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_ALT1',1); 
define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';
require PUN_ROOT.'include/parser.php';

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

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

// Load the viewforum.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/forum.php';
require PUN_ROOT.'lang/'.$pun_user['language'].'/index.php';
// Load the viewtopic.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/topic.php';
// Load poll language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/polls.php';
require PUN_ROOT.'include/attach/attach_incl.php'; //Attachment Mod row, loads variables, functions and lang file

// Fetch some info about the forum
$result = $db->query('SELECT f.forum_name, f.forum_note, f.head_note, f.show_note, pf.forum_name AS parent_forum, f.redirect_url, f.moderators, f.num_topics, f.sort_by, f.parent_forum_id, fp.post_topics, fp.post_polls 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'] != '')
{
        $item_status = 'iredirect';
        $icon_text = $lang_common['Redirect icon'];
        $icon_type = 'icon';
}

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

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

// Can we or can we not post new topics?
if (($cur_forum['post_topics'] == '' && $pun_user['g_post_topics'] == '1') || $cur_forum['post_topics'] == '1' || $is_admmod)

////////////////////// Shedrock Added /////////////////////
if(file_exists('img/'.$pun_user['style'].'/forum_icons/newthread.gif')) {
$lang_forum['Post topic'] = '<img src="img/'.$pun_user['style'].'/forum_icons/newthread.gif" title="'.$lang_forum['Post topic'].'" alt="'.$lang_forum['Post topic'].'" />';

    $post_link = "\t\t".'<p class="postlink conr"><a href="post.php?fid='.$id.'">'.$lang_forum['Post topic'].'</a>'."\n";
}
else
{
    $post_link = "\t\t".'<p class="postlink conr"><a href="post.php?fid='.$id.'">'.$lang_forum['Post topic'].'</a>'."\n";
}
// 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)

if (($cur_forum['post_polls'] == '' && $pun_user['g_post_polls'] == '1') || $cur_forum['post_polls'] == '1' || $is_admmod)

////////////////////// Shedrock Added /////////////////////
if(file_exists('img/'.$pun_user['style'].'/forum_icons/newpoll.gif')) {
$lang_polls['New poll'] = '<img src="img/'.$pun_user['style'].'/forum_icons/newpoll.gif" title="'.$lang_polls['New poll'].'" alt="'.$lang_polls['New poll'].'" />';

    $post_link .= "\t\t".'<a href="post.php?fid='.$id.'&amp;type=poll">'.$lang_polls['New poll'].'</a></p>'."\n";
}
else
{
    $post_link .= "\t\t".'<a href="post.php?fid='.$id.'&amp;type=poll">'.$lang_polls['New poll'].'</a></p>'."\n";
}

// 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';
$new_topics = get_all_new_topics();
$subforum_result = $db->query('SELECT f.forum_desc, f.forum_name, f.id, f.last_post, f.last_post_id, f.last_poster, f.moderators, f.num_posts, f.num_topics, f.redirect_url, p.poster_id AS last_poster_id FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'posts AS p ON (p.id=f.last_post_id) WHERE parent_forum_id='.$id.' ORDER BY disp_position') or error('Unable to fetch sub forum info',__FILE__,__LINE__,$db->error());
if ($pun_user['subs_enable'] == 0)
{
if($db->num_rows($subforum_result))
{
?>
<div class="linkst">
    <div class="inbox">
        <ul><li class="vf_home_1"><span class="home"><a href="index.php"><?php echo $lang_common['Index'] ?></a></span>&nbsp;</li><li class="vf_home_2">&raquo;&nbsp;<?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></li></ul>
        <div class="clearer"></div>
    </div>
</div>

<div id="vf1" class="blocktable misc">
    <h2 class="subs"><span>Sub forums</span></h2>
    <div class="box">
        <div class="inbox">
            <table cellspacing="0">
            <thead>
                <tr>
                    <th style="border-left: 0px;" class="tc0" scope="col">&nbsp;</th>
                    <th class="tc1" scope="col"><?php echo $lang_common['Forum'] ?>&nbsp;</th>
                    <th class="tc02" scope="col"><?php echo $lang_index['Topics'] ?>&nbsp;</th>
                    <th class="tc2" scope="col"><?php echo $lang_index['Topics'] ?>&nbsp;</th>
                    <th class="tc3" scope="col"><?php echo $lang_common['Posts'] ?>&nbsp;</th>
                    <th class="tcr" scope="col"><?php echo $lang_common['Last post'] ?>&nbsp;</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'] && forum_is_new($cur_subforum['id'], $cur_subforum['last_post']))
    {
        $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 = '&nbsp;';
        $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><br /> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_subforum['last_poster']).'</span>';
    $last_post = '<span class="msgtitleicon"><a href="viewtopic.php?pid='.$cur_subforum['last_post_id'].'#p'.$cur_subforum['last_post_id'].'">'.format_time($cur_subforum['last_post']).'</a></span><br /> <span class="byuser">'.$lang_common['by'].' <a href="profile.php?id='.$cur_subforum['last_poster_id'].'">'.pun_htmlspecialchars($cur_subforum['last_poster']).'</a></span>';
    else
        $last_post = '&nbsp;';

    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".'<br /><span class="moderator">[<span class="mod_by">'.$lang_common['Moderated by'].':</span> '.implode(', ', $moderators).')</span>'."\n";
    }
?>
            <tr<?php if ($item_status != '') echo ' class="'.trim($item_status).'"'; ?>><td style="border-left: 0;" class="tc0"> <div class="<?php echo $icon_type ?>">&nbsp;</div></td>

                    <td onclick="window.location.href='viewforum.php?id=<?php echo $cur_subforum['id']; ?>'" class="tc1">
                                <?php echo $forum_field;
                                if ($cur_subforum['moderators'] != '') {
                                    echo "\n".$moderators;
                                }
                                ?>
              <td class="tc02"><?php echo $num_topics ?>&nbsp;</td>
                    <td class="tc2"><?php echo $num_topics ?>&nbsp;</td>
                    <td class="tc3"><?php echo $num_posts ?>&nbsp;</td>
                    <td class="tcr"><?php echo $last_post ?>&nbsp;</td>
                </tr>
<?php
    }
?>
            </tbody>
            </table>
        </div>
    </div>
</div>
<?php
    }
}
else

?>

<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 class="vf_home_1"><span class="home"><a href="index.php">'.$lang_common['Index'].'</a></span></li><li class="vf_home_2">&raquo;&nbsp;<a href="viewforum.php?id='.$cur_forum['parent_forum_id'].'">'.pun_htmlspecialchars($cur_forum['parent_forum']).'</a>&nbsp;</li><li>&raquo;&nbsp;'.pun_htmlspecialchars($cur_forum['forum_name']).'</li></ul>';
else
    echo "\t\t".'<ul><li class="vf_home_1"><span class="home"><a href="index.php">'.$lang_common['Index'].'</a></span></li><li class="vf_home_2">&raquo;&nbsp;'.pun_htmlspecialchars($cur_forum['forum_name']).'</li></ul>';

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

<?php if ($cur_forum['show_note'] == 1){ ?>
<div class="blocktable no-border-viewforum">
    <h2 class="note_heading"><span><?php echo pun_htmlspecialchars($cur_forum['head_note']) ?></span></h2>
    <div class="box">
        <div class="inbox">
                                 <p style="padding-left: 8px;"> <?php echo  ($cur_forum['forum_note']) ?></p>
        </div>
    </div><br />
    <h2><span><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></span></h2>
<?php } else { ?>
<div id="vf" class="blocktable no-border-viewforum">
    <h2><span><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></span></h2>
<?php } ?>
    <div class="box misc">
            <div class="inbox">    
        <table cellspacing="0">
        <thead>
            <tr>
        <th style="border-left: 0;" class="tc0" scope="col">&nbsp;</th>
        <th style="border-left: 0;" class="tc00" scope="col">&nbsp;</th>
        <th class="tc1" style="text-align: left;" scope="col"><?php echo $lang_common['Topic'] ?></th>
         <th style="cursor: pointer;" title="header=[Letter Legend:] cssheader=[box_subject] cssbody=[box_body_subject] body=[Subscribed - Attachment - Sticky] delay=[0] fade=[on]" class="tc2" scope="col" colspan="3">S&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;S</th>
        <th class="tc02" style="text-align: center;" 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>
<?php
    if(!$pun_user['is_guest'] && $pun_config['o_show_dot'] == '1' )
{
    echo '<th class="tc01"><img src="img/'.$pun_user['style'].'/forum_icons/status.gif" title="'.$lang_forum['Posting status'].'" alt="" /></th>';
} 
else 
    if(!$pun_user['is_guest'] && $pun_config['o_show_dot'] == '0' )
{            if ($cur_topic['has_posted'] == $pun_user['id'])
    echo '<th class="tc01">x</th>';
}
?>
        </tr>
    </thead>
<tbody>
 
<?php

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

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

    }
}

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

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

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

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

// For truncated subject lines
        $subject = pun_htmlspecialchars($cur_topic['subject']);
//

// For truncated messages
        $cur_topic['message'] = pun_htmlspecialchars(parse_message($cur_topic['message'], $cur_topic['hide_smilies'], $cur_topic['allow_html']));
//



// Attachment Mod Block Start
    $attach_output = '';
    $attach_num = 0;
// Check if this post has any attachments
    $result_attach = $db->query('SELECT af.id, af.filename, af.size, af.downloads FROM '.$db->prefix.'attach_2_files AS af WHERE af.post_id='.$cur_topic['id']) or error('Unable to fetch if there were any attachments to the post', __FILE__, __LINE__, $db->error());
    $attach_num = $db->num_rows($result_attach);
    if($attach_num > 0)
{
    while(list($attachment_id, $attachment_filename, $attachment_size, $attachment_downloads)=$db->fetch_row($result_attach)){
    $attachment_extension=attach_get_extension($attachment_filename);
    $attach_output .= '<span title="header=[Filename: '.$attachment_filename.'] cssheader=[box_attach_header] cssbody=[box_body_attach] body=['.pun_htmlspecialchars(attach_icon($attachment_extension)).''.$attachment_filename.'<br />'.$lang_attach['Size:'].'&nbsp;'.number_format($attachment_size).'&nbsp;'.$lang_attach['bytes'].'<br />'.$lang_attach['Downloads:'].'&nbsp;<b>'.number_format($attachment_downloads).'</b>] delay=[0] fade=[on]"><img src="img/paperclip.gif" alt="" /></span>';
    }
}
// Attachment Mod Block End



// For subscription on subject lines
      if (!$pun_user['is_guest'] && $pun_config['o_subscriptions'] == '1')
{
      if ($cur_topic['is_subscribed'] != null) // 
        // I apologize for the variable naming here. It's a mix of subscription and action I guess :-)
        $subscraction = '<img src="img/'.$pun_user['style'].'/forum_icons/subscribed.gif" title="header=['.(strlen($subject) > 45 ? substr($subject, 0 , 55).'...' : $subject).'] cssheader=[box_subject] cssbody=[box_body_subject] body=[<b>'.$pun_user['username'].'</b>, '.$lang_topic['Is subscribed'].'] delay=[0] fade=[on]" alt="'.$lang_topic['Is subscribed'].'" />'."\n";
else
        $subscraction = '&nbsp;'."\n";
}
else
      $subscraction = '<div class="clearer"></div>'."\n";
//
        
        if ($cur_topic['moved_to'] != 0) {
            $item_status .= 'imoved';
            $icon_type = 'icon imoved';
            $subject = $lang_forum['Moved'].': <a title="header=['.pun_htmlspecialchars($cur_forum['forum_name']).'] cssheader=[box_subject] cssbody=[box_body_subject] body=['.(strlen($subject) > 75 ? substr($subject, 0 , 70).'...' : $subject).'] delay=[0] fade=[on]" href="viewtopic.php?id='.$cur_topic['moved_to'].'">'.(strlen($subject) > 45 ? substr($subject, 0 , 35).'...' : $subject).'</a>';
        }

else if ($cur_topic['question'] != '')
                     $subject = '<img style="vertical-align: middle; width: 14px; height: 14px;" src="img/'.$pun_user['style'].'/forum_icons/poll.gif" title="'.$lang_polls['Vote poll'].'" alt="'.$lang_polls['Vote poll'].'" /> <a title="header=['.pun_htmlspecialchars($cur_forum['forum_name']).'] cssheader=[box_subject] cssbody=[box_body_subject] body=['.(strlen($subject) > 75 ? substr($subject, 0 , 70).'' : $subject).'] delay=[0] fade=[on]" href="viewtopic.php?id='.$cur_topic['id'].'">'.(strlen($subject) > 45 ? substr($subject, 0 , 35).'...' : $subject).'</a><br /><span style="font-weight: normal;">Poll:&nbsp;</span><span class="poll_font">'.pun_htmlspecialchars($cur_topic['question']).'</span><br /><span class="poster_name">'.$lang_topic['Started by'].':</span>&nbsp;<span class="username"><a href="profile.php?id='.$cur_topic['last_poster_id'].'">'.pun_htmlspecialchars($cur_topic['poster']).'</a></span>';

else 

        if ($cur_topic['closed'] == '0')
        if ($pun_user['is_guest'])

            $subject = '<a title="header=['.pun_htmlspecialchars($cur_forum['forum_name']).'] cssheader=[box_subject] cssbody=[box_body_subject] body=['.(strlen($subject) > 75 ? substr($subject, 0 , 70).'' : $subject).'] delay=[0] fade=[on]" href="viewtopic.php?id='.$cur_topic['id'].'">'.(strlen($subject) > 45 ? substr($subject, 0 , 35).'...' : $subject).'</a><br /><span class="poster_name">'.$lang_topic['Started by'].':</span>&nbsp;<span class="username"><a href="profile.php?id='.$cur_topic['last_poster_id'].'">'.pun_htmlspecialchars($cur_topic['poster']).'</a></span>';
else
            $subject = '<a title="header=['.pun_htmlspecialchars($cur_forum['forum_name']).'] cssheader=[box_subject] cssbody=[box_body_subject] body=['.(strlen($subject) > 75 ? substr($subject, 0 , 70).'' : $subject).'] delay=[0] fade=[on]" href="viewtopic.php?id='.$cur_topic['id'].'">'.(strlen($subject) > 45 ? substr($subject, 0 , 35).'...' : $subject).'</a><span title="header=[<img style=\'vertical-align: middle;\' src=\'img/'.$pun_user['style'].'/forum_icons/info.gif\' />&nbsp;&nbsp;'.(strlen($subject) > 45 ? substr($subject, 0 , 55).'...' : $subject).'] cssheader=[box_header] cssbody=[box_body] body=['.(strlen($cur_topic['message']) > 500 ? substr($cur_topic['message'], 0 , 375).'<font style=\'color: red;\'>&nbsp;...cont\'d</font>' : $cur_topic['message']).'] delay=[0] fadespeed=[0.04] fade=[on]">&nbsp;<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'"><img style="vertical-align: middle;" src="img/'.$pun_user['style'].'/forum_icons/preview.gif" alt="" /></a>&nbsp;</span><br /><span class="poster_name">'.$lang_topic['Started by'].':</span>&nbsp;<span class="username"><a href="profile.php?id='.$cur_topic['last_poster_id'].'">'.pun_htmlspecialchars($cur_topic['poster']).'</a></span>';
else 
        if ($pun_user['is_guest'])
        {
            $subject = '<a title="header=['.pun_htmlspecialchars($cur_forum['forum_name']).'] cssheader=[box_subject] cssbody=[box_body_subject] body=['.(strlen($subject) > 75 ? substr($subject, 0 , 70).'' : $subject).'] delay=[0] fade=[on]" href="viewtopic.php?id='.$cur_topic['id'].'">'.(strlen($subject) > 45 ? substr($subject, 0 , 35).'...' : $subject).'</a><br /><span class="poster_name">'.$lang_topic['Started by'].':</span>&nbsp;<span class="username"><a href="profile.php?id='.$cur_topic['last_poster_id'].'">'.pun_htmlspecialchars($cur_topic['poster']).'</a></span>';
            $icon_text = $lang_common['Closed icon'];
            $item_status = 'iclosed';
        }

else
        {
            $subject = '<a title="header=['.pun_htmlspecialchars($cur_forum['forum_name']).'] cssheader=[box_subject] cssbody=[box_body_subject] body=['.(strlen($subject) > 75 ? substr($subject, 0 , 70).'' : $subject).'] delay=[0] fade=[on]" href="viewtopic.php?id='.$cur_topic['id'].'">'.(strlen($subject) > 45 ? substr($subject, 0 , 35).'...' : $subject).'</a><span title="header=[<img style=\'vertical-align: middle;\' src=\'img/'.$pun_user['style'].'/forum_icons/info.gif\' />&nbsp;&nbsp;'.(strlen($subject) > 45 ? substr($subject, 0 , 55).'...' : $subject).'] cssheader=[box_header] cssbody=[box_body] body=['.(strlen($cur_topic['message']) > 500 ? substr($cur_topic['message'], 0 , 375).'<font style=\'color: red;\'>&nbsp;...cont\'d</font>' : $cur_topic['message']).'] delay=[0] fadespeed=[0.04] fade=[on]">&nbsp;<a href="viewtopic.php?pid='.$cur_topic['last_post_id'].'#p'.$cur_topic['last_post_id'].'"><img style="vertical-align: middle;" src="img/'.$pun_user['style'].'/forum_icons/preview.gif" alt="" /></a>&nbsp;</span><br /><span class="poster_name">'.$lang_topic['Started by'].':</span>&nbsp;<span class="username"><a href="profile.php?id='.$cur_topic['last_poster_id'].'">'.pun_htmlspecialchars($cur_topic['poster']).'</a></span>';
            $icon_text = $lang_common['Closed icon'];
            $item_status = 'iclosed';
        }

                        // gleek edit
                        if ($cur_topic['num_replies'] >= $pun_config['o_hot_count'])
                        {
                                $item_status .= ' ihot';
                                $icon_type = 'icon ihot';
                        }

                // MOD: MARK TOPICS AS READ - 1 LINE MODIFIED CODE FOLLOWS
        if (!$pun_user['is_guest'] && topic_is_new($cur_topic['id'], $id,  $cur_topic['last_post']) && $cur_topic['moved_to'] == null)
        {
            $icon_text .= ' '.$lang_common['New icon'];
            $item_status .= ' inew';
            $icon_type = 'icon inew';
                                // gleek edit
                                if ($cur_topic['num_replies'] >= $pun_config['o_hot_count'])
                                {
                                        $item_status .= ' nhot';
                                        $icon_type = 'icon nhot';
                                }
            $subject = '<strong>'.$subject.'</strong>';
            $subject_new_posts = '<span class="newtext"><a href="viewtopic.php?id='.$cur_topic['id'].'&amp;action=new" title="'.$lang_common['New posts info'].'">'.$lang_common['New posts'].'</a></span>';
        }
        else
            $subject_new_posts = null;

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

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

        if ($num_pages_topic > 1)
            $subject_multipage = '<br /><div class="multipages"><span class="list_pages" title="'.$lang_forum['Multi Page'].'">'.paginate($num_pages_topic, -1, 'viewtopic.php?id='.$cur_topic['id']).'</span></div>';
        else
            $subject_multipage = null;

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

        $labels = (!empty($pun_config['o_topic_labels']))? $cur_topic['labels']: '';
        if ($alt)
    {
            $item_status .= ' alt';
    }
?>
            <tr<?php if ($item_status != '') echo ' class="'.trim($item_status).'"'; ?>><td style="border-left: 0;" class="tc0"><div class="<?php echo $icon_type ?>">&nbsp;</div></td>
            <td class="tc00">&nbsp;<?php if ($cur_topic['icon_topic'] != 0) 
    {
        $icon_topic = '<img style="vertical-align: middle;" src="./img/icons/'.$cur_topic['icon_topic'].'.gif" title="'.$lang_forum['Post icon'].'" alt="" />';
        echo $icon_topic;
    }
?>
</td>
<?php
      if ($cur_topic['moved_to'] != 0) 
    {
?><td onclick="window.location.href='viewtopic.php?id=<?php echo $cur_topic['moved_to']; ?>'" class="tc1"><?php echo $subject."\n" ?>
<?php
    }
else
    {
?><td onclick="window.location.href='viewtopic.php?id=<?php echo $cur_topic['id']; ?>'" class="tc1"><?php echo $subject."\n" ?>
<?php
    }
?>
                    <?php if (!empty($labels)) echo '<div class="topiclabels">'.$lang_common['Labels'].': ['.show_labels($labels).']</div>'; ?></td>
                    <td class="tc02">
<?php 
      if (!$pun_user['is_guest'] && $pun_config['o_subscriptions'] == '1')
{
      if ($cur_topic['is_subscribed'] != null) // 

    echo $subscraction; 
else
    echo "&nbsp;";
}


?>

</td>

<td class="tc03">
<?php 
    if ($pun_user['is_guest'])
{
    echo "&nbsp;";
}
else
    echo $attach_output ?>
</td>

<?php 
// For truncated subject lines
        $subject = pun_htmlspecialchars($cur_topic['subject']);
if ($cur_topic['sticky'] == '1')
{
    echo '<td class="tc04"><span title="header=['.(strlen($subject) > 75 ? substr($subject, 0 , 70).'' : $subject).'] cssheader=[box_subject] cssbody=[box_body_subject] body=[This thread has been maked as <b>Sticky</b>] delay=[0] fade=[on]">&nbsp;</span></td>';
    }
else
{
    echo '<td class="tc04">&nbsp;</td>';
}
?>

                    <td class="tc2"><?php echo ($cur_topic['moved_to'] == null) ? $cur_topic['num_replies'] : '&nbsp;' ?></td>
                    <td class="tc3"><?php echo ($cur_topic['moved_to'] == null) ? $cur_topic['num_views'] : '&nbsp;' ?></td>
                    <td class="tcr"><?php echo $last_post ?></td>
<?php
// For truncated subject lines
        $subject = pun_htmlspecialchars($cur_topic['subject']);
//
        // 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'])

                echo '<td class="tc01"><a href="search.php?action=show_user&amp;user_id='.$pun_user['id'].'"><img src="img/'.$pun_user['style'].'/forum_icons/dot.gif" title="header=['.(strlen($subject) > 25 ? substr($subject, 0 , 30).'...' : $subject).'] cssheader=[box_posted] cssbody=[box_body_posted] body=[<b>'.$pun_user['username'].'</b>,&nbsp;'.$lang_forum['Yes Post'].'] delay=[0] fade=[on]" alt="" /></a></td>'."\n";
            else if ($cur_topic['moved_to'] != 0)
            echo '<td>&nbsp;</td>';
else
                echo '<td class="tc01"><img src="img/'.$pun_user['style'].'/forum_icons/nodot.gif" title="header=['.(strlen($subject) > 25 ? substr($subject, 0 , 30).'...' : $subject).'] cssheader=[box_posted] cssbody=[box_body_posted_never] body=['.$lang_forum['No Post'].' <b>'.$pun_user['username'].'</b>] delay=[0] fade=[on]" alt="" /></td>';
}

?>
        </tr>
<?php

    }
}
else
{

?>
        <tr>
<?php
    if(!$pun_user['is_guest'] && $pun_config['o_show_dot'] == '1' )
{            
    if ($cur_topic['has_posted'] == $pun_user['id'])
?><td class="tcl" colspan="8"><?php echo $lang_forum['Empty forum'] ?></td>
<?php
    }
else
{
?><td class="tcl" colspan="7"><?php echo $lang_forum['Empty forum'] ?></td>
<?php
    }
?>
        </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 class="vf_home_1"><span class="home"><a href="index.php">'.$lang_common['Index'].'</a></span></li><li class="vf_home_2">&raquo;&nbsp;<a href="viewforum.php?id='.$cur_forum['parent_forum_id'].'">'.pun_htmlspecialchars($cur_forum['parent_forum']).'</a>&nbsp;</li><li>&raquo;&nbsp;'.pun_htmlspecialchars($cur_forum['forum_name']).'</li></ul>';
else
    echo "\t\t".'<ul><li class="vf_home_1"><span class="home"><a href="index.php">'.$lang_common['Index'].'</a></span></li><li class="vf_home_2">&raquo;&nbsp;'.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';
FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

I'm too tired to look into the code at the moment, I cannot think straight tongue . I haven't got an install of the 1.2 branch any longer either, so I won't be able to do some trial 'n error stuff.

But, there are some more logic needed in the block to search for attachments ... as it's now you look for attachments in a post, using the id of the topic = will never show correct thing, you're only lucky if it will find a post!  (if you have an attachment in post id = 12, and you look at a thread with id 12, it will say you have an attachment in the thread, and it's pure luck if that's the correct attachment in that thread.)

So also the result_attach query needs to be rewritten ... that's why I'm aiming for a total rewrite of that block ... copy 'n paste is good to some extension, but sometimes it's better to figure out exactly what's wanted out of a script, and then do the script to do that and only that.

Also, are you trying to get it to show every filename stored in that topic? (as you are using filename, downloads and stuff)


So, what are the exact thing you're trying to get out of the attachment tables, and I'll see if I can write something that does that.

Re: DB Query error with attachment mod

Well, you basically said it all there. I am trying to to show whatever attachments are in the post. I am using a boxover script and it displays the attachment on mouseover. The problem there is that it only displays (1) file when it should display all of them. I will email you a working site so that you can see it in action.

Thanks for your help
Shedrock

FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

Can someone please help me out here?

Shedrock

FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

I was out all day yesterday, so I had no chance to do anything ...

I'd appreciate if you paste the content of the dump I asked for above (so I know what variables I have to play with), as I no longer has an install of PunBB 1.2 to check it on.

The query to get all attachments for a topic is simple, and I have tested it on some tables still laying around in my database (but the topic query might have other columns etc. so a dump would be helpful) ... What I need though, is the info I asked for, to be able to wrap together something...

Re: DB Query error with attachment mod

Ok, I looked at the queries in the code you pasted, so I think this I'm posting can work smile

Make a backup before you edit your viewforum big_smile

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

****Add:

// Attachment Mod Block Start
$attach_allow_download=false;
if( $pun_user['g_id'] == PUN_ADMIN )
    $attach_allow_download=true;
else
{    //fetch the rules of the forum, and check so that the user is allowed to download.
    $result_attach = $db->query( 'SELECT ar.rules FROM ' . $db->prefix . 'attach_2_rules AS ar WHERE ar.group_id=\'' . $pun_user['group_id'] . '\' AND ar.forum_id=\'' . $id . '\' LIMIT 1' ) or error( 'Unable to fetch rules for the attachments', __FILE__, __LINE__, $db->error() );
    if( $db->num_rows( $result_attach ) == 1 )
    {
        list( $attach_rules ) = $db->fetch_row( $result_attach );
        $attach_allow_download = attach_rules( $attach_rules, ATTACH_DOWNLOAD );
    }
}

// Attachment Mod Block End



****Where you now have placed your attachment mod code, try this.

// Attachment Mod Block Start
        if( $attach_allow_download )
        {
            $attach_output = '';
            $attach_num = 0;
            $result_attach = $db->query( '
                SELECT  af.id, af.filename, af.size, af.downloads
                FROM '.$db->prefix.'attach_2_files AS af, '.$db->prefix.'posts AS fp
                WHERE af.post_id = fp.id AND fp.topic_id = \'' . $cur_topic['id'] . '\'' ) or error( 'Unable to fetch attachments in thread', __FILE__, __LINE__, $db->error() );
            $attach_num = $db->num_rows($result_attach);
            if( $attach_num > 0 )
            {
                while( list( $attachment_id, $attachment_filename, $attachment_size, $attachment_downloads ) = $db->fetch_row( $result_attach ) )
                {
                    $attach_output .= '<span title="header=[Filename: '.$attachment_filename.'] cssheader=[box_attach_header] cssbody=[box_body_attach] body=['.pun_htmlspecialchars(attach_icon($attachment_extension)).''.$attachment_filename.'<br />'.$lang_attach['Size:'].'&nbsp;'.number_format($attachment_size).'&nbsp;'.$lang_attach['bytes'].'<br />'.$lang_attach['Downloads:'].'&nbsp;<b>'.number_format($attachment_downloads).'</b>] delay=[0] fade=[on]"><img src="img/paperclip.gif" alt="" /></span>';
                }
            }
        }
// Attachment Mod Block End

It's very possible there are spelling errors and what not, as I haven't an install to test it on wink

Last edited by Frank H (2008-11-06 08:27:29)

Re: DB Query error with attachment mod

Wow! This seems to be working great. Just one problem, it displays the unknown.png image which basically means it does not know what the archive extension is. It should display the ext. eg. zip, rar, image etc... If I can get that working it would be awesome!

I thank you so much for this. It really means a lot to me.

Shedrock

FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

I figured it out. I just added:

$attachment_extension=attach_get_extension($attachment_filename);

below:

                while( list( $attachment_id, $attachment_filename, $attachment_size, $attachment_downloads ) = $db->fetch_row( $result_attach ) )
                {
FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

You're welcome smile

Ah, yeah, I forgot to cut n paste that line, one shouldn't try to think logical after a full day of work and in the middle of the night smile

BUT, I found a potential bug, (probably due to same reasons ... lol big_smile)

So in the first block, add this:

$attach_allow_download=false;

before:

if( $pun_user['g_id'] == PUN_ADMIN )

I noticed that $attach_allow_download won't get set unless you're either admin, or have a rule setup for your group in that forum (so a group with no rule setup from a certain forum, might see the attachment anyway (but not able to download))

But adding that simple line should do it smile

Edit: I put it in the right place in the code above...

Last edited by Frank H (2008-11-06 08:28:00)

Re: DB Query error with attachment mod

Thanks, I added it.

btw: Is there a way to display just one image of the paperclip.gif and when I hover over it, it then lists all the attachments in that post. The reason I ask is if I have 5 attachments, then it breaks the layout.

Thanks
Shedrock

FluxBB Site - Shedrock Online

Re: DB Query error with attachment mod

hmm ... markup and such is probably better to get help from elsewhere, I'm not considering my skills good enough wink