Name

forum — display forum threads

ATTRIBUTES

Attribute Pos. Req. Default Description
header_template
link_template
threshold_message
scrub_template
template
reply_page
submit_page
display_page
date_format
full
scrub_score
show_score
show_level
interpolate     0 interpolate input?
reparse     1 interpolate output?

DESCRIPTION

BEHAVIOR

This tag appears to be affected by, or affects, the following:
Global Variables: MV_PAGE

EXAMPLES

No examples are available at this time. We do consider this a problem and will try to supply some.

NOTES

AVAILABILITY

forum is available in Interchange versions:

4.6.0-5.9.0 (git-head)

SOURCE

Interchange 5.9.0:

Source: code/UserTag/forum.tag
Lines: 264


# Copyright 2002-2010 Interchange Development Group and others
# 
# This program 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.  See the LICENSE file for details.

UserTag forum-userlink PosNumber 0
UserTag forum-userlink addAttr
UserTag forum-userlink Version   1.7
UserTag forum-userlink Routine   <<EOR
sub {
my ($row) = @_;
return $row->{name} || $Variable->{FORUM_ANON_NAME} || 'Anonymous Coward'
if $row->{anon} or ! $row->{username};
my $realname = tag_data('userdb', 'handle', $row->{username})
    || tag_data('userdb', 'fname', $row->{username});
return $realname || $row->{username};
}
EOR

UserTag forum Order     top
UserTag forum addAttr 
UserTag forum hasEndTag 
UserTag forum NoReparse 1
UserTag forum Version   1.7
UserTag forum Routine   <<EOR
my @uls;
my $lastlevel;

sub {
my ($id, $opt, $tpl) = @_;

if(! $id) {
 $id = '0';
}

my $forum_header;
my $forum_footer;
my $forum_link;
my $forum_scrub;

$tpl ||= '';
$tpl =~ s{\[forum[-_]header\](.*)\[/forum[-_]header\]}{}is
 and $forum_header = $1;
$tpl =~ s{\[forum[-_]footer\](.*)\[/forum[-_]footer\]}{}is
 and $forum_footer = $1;
$tpl =~ s{\[forum[-_]link\](.*)\[/forum[-_]link\]}{}is
 and $forum_link = $1;
$tpl =~ s{\[forum[-_]scrub\](.*)\[/forum[-_]scrub\]}{}is
 and $forum_scrub = $1;

$forum_header ||= $opt->{header_template} || <<EOF;
<table>
<tr>
<td class=contentbar1>
 <b>{SUBJECT}</b>
 by <b>{USERINFO}</b>
 on {DATE}
</td>
</tr>
<tr>
<td>
 {COMMENT}
</td>
</tr>
{ADDITIONAL?}
<tr>
<td>
 {ADDITIONAL}
</td>
</tr>
{/ADDITIONAL?}
<tr>
 <td>
  &#91; 
   {TOP_URL?}<A HREF="{TOP_URL}">Top</A> |{/TOP_URL?}
   {PARENT_URL?}<A HREF="{PARENT_URL}">Parent</A> |{/PARENT_URL?}
   <A HREF="{REPLY_URL}">Reply</A>
  &#93; 
 </td>
</tr>
</table>
<hr>
EOF

$forum_link ||= $opt->{link_template} || <<EOF;
<A HREF="{DISPLAY_URL}">{SUBJECT}</a> by {USERINFO} on {DATE}
EOF

$opt->{threshold_message} ||= errmsg("Message below your threshold");
$forum_scrub ||= $opt->{scrub_template} || <<EOF;
<A HREF="{DISPLAY_URL}">$opt->{threshold_message}</a>
EOF

$tpl ||= $opt->{template} || <<EOF;
<table cellspacing=0 cellpadding=2>
<tr>
<td class=contentbar1>
 <A HREF="{DISPLAY_URL}"><b>{SUBJECT}</b></A>
 by <b>{USERINFO}</b>
 on {DATE}
</td>
<td class=contentbar1 align=right>
 <small>&#91; <A HREF="{REPLY_URL}"><b>Reply</b></A> &#93;</font></small>
</td>
</tr>
<tr>
<td colspan=2>
{COMMENT}
<!--
 prior to UL: {MSG1}
 prior to /UL: {MSG2}
 prior to END: {MSG3}
-->
</td>
</tr>
</table>
EOF

$forum_footer ||= <<EOF;
<!-- end of forum -->
EOF

my $lastlevel = 0;
my @uls;

my $Tag = new Vend::Tags;
my $row = shift;

$opt->{reply_page} ||= 'forum/reply';
$opt->{submit_page} ||= 'forum/submit';
$opt->{display_page} ||= $Global::Variable->{MV_PAGE};
$opt->{date_format} ||= '%B %e, %Y @%H:%M';
my $menu_row = sub {
shift;
my $row = shift;
 $row->{reply_url} = $Tag->area({
                 href => $opt->{reply_page},
                 arg => $row->{code},
               });
 if($row->{code} ne $row->{artid}) {
   $row->{top_url} = $Tag->area( {
                 href => $opt->{display_page},
                 arg => $row->{artid},
               });
 }
 if($row->{parent}) {
   $row->{parent_url} = $Tag->area( {
                 href => $opt->{display_page},
                 arg => $row->{parent},
               });
 }
 $row->{display_url} = $Tag->area({
               href => $opt->{display_page},
               arg => $row->{code},
               });
 $row->{userinfo} = $Tag->forum_userlink($row);
 $row->{date} = $Tag->convert_date({
                 fmt => $opt->{date_format},
                 body => $row->{created},
               });
 my $lev = $row->{mv_level};
 my $children = $row->{mv_children};
 my $last = $row->{mv_last};
 my $pre = '';
 my $post = '';
 my $num_uls = scalar(@uls);
 $row->{msg1} = "lastlevel=$lastlevel lev=$lev children=$children uls=$num_uls";
 if(! $lev) {
   $pre .= join "", splice (@uls);
 }
 elsif ($lastlevel < $lev) {
   $lastlevel = $lev;
 }
 elsif ($lastlevel > $lev) {
   $lastlevel = $lev;
   $pre .= join "", splice (@uls,$lev);
 }
 if($children) {
   push @uls, '</ul>';
 }
 $num_uls = scalar(@uls);
 $row->{msg2} = "lastlevel=$lastlevel lev=$lev children=$children uls=$num_uls";
 if($children) {
   $post .= '<ul>';
 }
 elsif($last) {
   $post .= join "", splice (@uls, $lev);
 }
 $num_uls = scalar(@uls);
 $row->{msg3} = "lastlevel=$lastlevel lev=$lev children=$children uls=$num_uls";
 $row->{forum_prepend} = $pre;
 $row->{forum_append} = $post;
 return $row;
};

my $fdb = database_exists_ref('forum')
 or die "No forum DB!";

my $record = $fdb->row_hash($id);
return undef unless $record;

$menu_row->(undef, $record);
my @out;

$opt->{full} = 1 if ! defined $opt->{full};

push @out, $Tag->uc_attr_list($record, $forum_header);

my %o = (
 table      => 'forum',
 start      => $id,
 master    => 'parent',
 subordinate  => 'code',
 full      => $opt->{full},
 sort      => $opt->{sort} || 'code',
 spacer    => "&nbsp;",
 autodetect  => 1,
 iterator    => $menu_row,
 spacing    => 4,
);

$Tag->tree(\%o);

my $rows = $o{object}{mv_results};
$opt->{scrub_score} ||= 0;
$opt->{show_score} ||= 1;
if(! defined $opt->{show_level}) {
 if($record->{code} == $record->{artid}) {
   $opt->{show_level} = 0;
 }
 else {
   $opt->{show_level} = 2;
 }
}

for(\$tpl, \$forum_link, \$forum_scrub) {
 $$_ = "{FORUM_PREPEND}$$_" unless $$_ =~ /\{FORUM_PREPEND\}/;
 $$_ .= '{FORUM_APPEND}' unless $$_ =~ /\{FORUM_APPEND\}/;
}

for my $record (@$rows) {

 my $this_tpl;
 if($record->{score} <= $opt->{scrub_score}) {
   $this_tpl = $forum_scrub;
 }
 elsif($record->{score} >= $opt->{show_score}) {
   $this_tpl = $tpl;
 }
 elsif($record->{mv_level} <= $opt->{show_level}) {
   $this_tpl = $tpl;
 }
 else {
   $this_tpl = $forum_link;
 }
 push @out, $Tag->uc_attr_list($record, $this_tpl);
}
push @out, join "", @uls;
push @out, $Tag->uc_attr_list($opt, $forum_footer);
return join "\n", @out;
}
EOR

AUTHORS

Interchange Development Group

SEE ALSO

DocBook! Interchange!