]> git.p6c8.net - selfforum.git/blobdiff - selfforum-cgi/shared/Template/_thread.pm
Bugfix to show thread list in deleted postings.
[selfforum.git] / selfforum-cgi / shared / Template / _thread.pm
index 8c3cbbb240cf9d17b222fb92e2adb722a7c9ae96..94b9fe4c95f4463f65d4e7ede8b4ba2bbe5ce1ef 100644 (file)
-# Template/_thread.pm
+package Template::_thread;
 
-# ====================================================
-# Autor: n.d.p. / 2001-01-11
-# lm   : n.d.p. / 2001-01-11
-# ====================================================
-# Funktion:
-#      HTML-Darstellung eines Threads
-# ====================================================
+################################################################################
+#                                                                              #
+# File:        shared/Template/_thread.pm                                      #
+#                                                                              #
+# Authors:     AndrĂ© Malo <nd@o3media.de>                                      #
+#              Christian Kruse <ckruse@wwwtech.de>                             #
+#                                                                              #
+# Description: convert parsed thread to HTML                                   #
+#                                                                              #
+################################################################################
 
 use strict;
-
-package Template::_thread;
-
-use vars qw(@ISA @EXPORT);
+use vars qw(
+  @EXPORT
+);
 
 use Encode::Plain; $Encode::Plain::utf8 = 1;
 use Posting::_lib qw(short_hr_time);
 use Template;
 use Template::_query;
+use Data::Dumper;
 
-# ====================================================
-# Funktionsexport
-# ====================================================
+################################################################################
+#
+# Version check
+#
+# last modified:
+#    $Date$ (GMT)
+# by $Author$
+#
+sub VERSION {(q$Revision$ =~ /([\d.]+)\s*$/)[0] or '0.0'}
 
-require Exporter;
-@ISA    = qw(Exporter);
+################################################################################
+#
+# Export
+#
+use base qw(Exporter);
 @EXPORT = qw(html_thread);
 
-################################
-# sub html_thread
+### html_thread () #############################################################
 #
-# Thread erzeugen
-################################
-
-sub html_thread ($$$) {
-  my ($msg, $template, $par) = @_;
+# create HTML string
+#
+# Params: $msg       Reference of Message-Array
+#                     (Output of parse_single_thread in Posting::_lib)
+#         $template  Template object
+#         $par       Hash Reference (see doc for details)
+#         $params    Additional parameters
+#
+# Return: Reference of HTML String
+#
+sub html_thread ($$$;$) {
+  my ($msg, $template, $par, $params) = @_;
+  my $additionalVariables = $params->{'additionalVariables'} || {};
+  my $actions             = {
+    'action'        => $params->{'action'},
+    'actionDeleted' => $params->{'actionDeleted'}
+  };
+  my $base = $params->{'base_link'};
 
   return \'' unless @$msg;
 
-  my $temp = $par -> {template};
-  my $i = $par -> {cgi} -> {user};
-  my $t = $par -> {cgi} -> {thread};
-  my $p = $par -> {cgi} -> {posting};
-  my $c = $par -> {cgi} -> {command};
-  my $tid = $par -> {thread};
-  my $html='';
-  my $startlevel=0;
-  my $oldlevel=0;
+  my $temp = $par->{'template'};
+  my $i = $par->{'cgi'}->{'user'};
+  my $t = $par->{'cgi'}->{'thread'};
+  my $p = $par->{'cgi'}->{'posting'};
+  my $c = $par->{'cgi'}->{'command'};
+  my $tid = $par->{'thread'};
+  my $html = '';
+  my $startlevel = 0;
+  my $oldlevel = 0;
   my @indexes;
 
-  # ganzer Thread
-  if ($par -> {start} == -1) {
-    $_ = $msg -> [0];
-    @indexes = (1..$_ -> {answers});
-
-    if ($_ -> {answers}) {
-      $html = '<dd><dl><dt>'
-              .${$template -> scrap ($temp -> {(length $_ -> {cat})?'start':'startNC'},
-                                    {$temp -> {name}    => $_ -> {name},
-                                     $temp -> {subject} => $_ -> {subject},
-                                     $temp -> {cat}     => $_ -> {cat},
-                                     $temp -> {time}    => plain(short_hr_time ($_ -> {time})),
-                                     $temp -> {link}    => query_string({$t => $tid, $p => $_ -> {mid}})},
-                                     $par -> {addParam})}
-              .'</dt>';}
+  # whole thread
+  if ($par->{'start'} == -1) {
+    $_ = $msg->[0];
+    @indexes = (1 .. $_->{answers});
+
+    my $del = $_->{deleted} ? 'Deleted' : '';
+    my $action = $actions->{'action'.$del}; $action =~ s/\Q{mid}\E/$_->{mid}/g;
+
+    if ($_->{answers}) {
+      $html =
+        '<dd><dl><dt>'.
+
+        ${$template->scrap(
+           $temp->{
+             (length $_->{'cat'}
+               ? 'start'
+               : 'startNC').($actions->{'actionDeleted'} ? $del : '')
+           },
+           { $temp->{'name'}    => $_->{'name'},
+             $temp->{'subject'} => $_->{'subject'},
+             $temp->{'cat'}     => $_->{'cat'},
+             $temp->{'time'}    => plain(short_hr_time($_->{'time'})),
+             $temp->{'link'}    => $base.query_string({$t => $tid, $p => $_->{'mid'}}),
+             $temp->{'tid'}     => $tid,
+             $temp->{'mid'}     => $_->{'mid'},
+             $temp->{'command'} => $action,
+             %{$additionalVariables}
+           },
+           $par->{'addParam'}
+          )} .
+        '</dt>';
+    }
 
     else {
-      $html = '<dd>'
-              .${$template -> scrap ($temp -> {(length $_ -> {cat})?'start':'startNC'},
-                                    {$temp -> {name}    => $_ -> {name},
-                                     $temp -> {subject} => $_ -> {subject},
-                                     $temp -> {cat}     => $_ -> {cat},
-                                     $temp -> {time}    => plain(short_hr_time ($_ -> {time})),
-                                     $temp -> {link}    => query_string({$t => $tid, $p => $_ -> {mid}})},
-                                     $par -> {addParam})}
-              .'</dd>';
-
-      return \$html;}}
-
-  # Teilthread
+      $html =
+        '<dd>'.
+        ${$template->scrap(
+           $temp->{
+             (length $_->{'cat'}
+              ? 'start'
+               : 'startNC').($actions->{'actionDeleted'} ? $del : '')
+           },
+           { $temp->{'name'}    => $_->{'name'},
+             $temp->{'subject'} => $_->{'subject'},
+             $temp->{'cat'}     => $_->{'cat'},
+             $temp->{'time'}    => plain(short_hr_time ($_->{'time'})),
+             $temp->{'link'}    => $base.query_string({$t => $tid, $p => $_->{'mid'}}),
+             $temp->{'tid'}     => $tid,
+             $temp->{'mid'}     => $_->{'mid'},
+             $temp->{'command'} => $action,
+             %{$additionalVariables}
+           },
+           $par->{'addParam'}
+          )}.
+        '</dd>';
+
+      return \$html;
+    }
+  }
+
+  # only subthread
+  #
   else {
-    my $start=-1;
-    for (@$msg) {$start++; last if ($_ -> {mid} == $par -> {start});}
-    my $end   = $start + $msg -> [$start] -> {answers};
+    my $start = -1;
+    for (@$msg) { $start++; last if ($_->{'mid'} == $par->{'start'}); }
+    my $end = $start + $msg->[$start]->{'answers'};
     $start++;
-    @indexes = ($start..$end);
-    $oldlevel = $startlevel = $msg -> [$par -> {start}] -> {level};}
+    @indexes = ($start .. $end);
+    $oldlevel = $startlevel = $msg->[$start]->{'level'}
+      if (defined $msg->[$start]->{'level'});
+  }
 
-  # HTML erzeugen
+  # create HTML
+  #
   for (@$msg[@indexes]) {
+    my $del    = $_->{'deleted'} ? 'Deleted' : '';
+    my $action = $actions->{'action'.$del}; $action =~ s/\Q{mid}\E/$_->{mid}/g;
 
-    if ($_ -> {level} < $oldlevel) {
-      $html.='</dl></dd>' x ($oldlevel - $_ -> {level});}
-
-    $oldlevel = $_ -> {level};
-
-    if ($_ -> {answers}) {
-      $html.='<dd><dl><dt>'
-             .${$template -> scrap ($temp -> {(length $_ -> {cat})?'line':'lineNC'},
-                                   {$temp -> {name}    => $_ -> {name},
-                                   $temp -> {subject} => $_ -> {subject},
-                                   $temp -> {cat}     => $_ -> {cat},
-                                   $temp -> {time}    => plain(short_hr_time ($_ -> {time})),
-                                   $temp -> {link}    => query_string({$t => $tid, $p => $_ -> {mid}})},
-                                   $par -> {addParam})}
-             .'</dt>';
+    if ($_->{'level'} < $oldlevel) {
+      $html .= '</dl></dd>' x ($oldlevel - $_->{'level'});
+    }
+
+    $oldlevel = $_->{'level'};
+
+    if ($_->{'answers'}) {
+      $html .=
+        '<dd><dl><dt>'.
+        ${$template->scrap(
+           $temp->{
+             (length $_->{'cat'}
+             ? 'line'
+             : 'lineNC').($actions->{'actionDeleted'} ? $del : '')
+           },
+           { $temp->{'name'}    => $_->{'name'},
+             $temp->{'subject'} => $_->{'subject'},
+             $temp->{'cat'}     => $_->{'cat'},
+             $temp->{'time'}    => plain(short_hr_time ($_->{'time'})),
+             $temp->{'link'}    => $base.query_string({$t => $tid, $p => $_->{'mid'}}),
+             $temp->{'tid'}     => $tid,
+             $temp->{'mid'}     => $_->{'mid'},
+             $temp->{'command'} => $action,
+             %{$additionalVariables}
+           },
+           $par->{'addParam'}
+          )}.
+        '</dt>';
     }
     else {
-      $html.='<dd>'
-             .${$template -> scrap ($temp -> {(length $_ -> {cat})?'line':'lineNC'},
-                                   {$temp -> {name}    => $_ -> {name},
-                                   $temp -> {subject} => $_ -> {subject},
-                                   $temp -> {cat}     => $_ -> {cat},
-                                   $temp -> {time}    => plain(short_hr_time ($_ -> {time})),
-                                   $temp -> {link}    => query_string({$t => $tid, $p => $_ -> {mid}})},
-                                   $par -> {addParam})}
-             .'</dd>';
+      $html .=
+        '<dd>'.
+        ${$template->scrap(
+           $temp->{
+             (length $_->{'cat'}
+             ? 'line'
+             : 'lineNC').($actions->{'actionDeleted'} ? $del : '')
+           },
+           { $temp->{'name'}    => $_->{'name'},
+             $temp->{'subject'} => $_->{'subject'},
+             $temp->{'cat'}     => $_->{'cat'},
+             $temp->{'time'}    => plain(short_hr_time ($_->{'time'})),
+             $temp->{'link'}    => $base.query_string({$t => $tid, $p => $_->{'mid'}}),
+             $temp->{'tid'}     => $tid,
+             $temp->{'mid'}     => $_->{'mid'},
+             $temp->{'command'} => $action,
+             %{$additionalVariables}
+           },
+           $par->{'addParam'}
+          )}.
+        '</dd>';
     }
   }
-
-  $html.='</dl></dd>' x ($oldlevel - $startlevel);
+  $html .= '</dl></dd>' x ($oldlevel - $startlevel);
 
   \$html;
 }
 
-# ====================================================
-# Modulinitialisierung
-# ====================================================
-
-# making require happy
+# keep 'require' happy
 1;
 
-# ====================================================
-# end of Template::_thread
-# ====================================================
\ No newline at end of file
+#
+#
+### end of Template::_thread ###################################################

patrick-canterino.de