]> 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 f4ee5b28086f81ddfda4728233ebf04681277a1d..94b9fe4c95f4463f65d4e7ede8b4ba2bbe5ce1ef 100644 (file)
@@ -5,6 +5,7 @@ package Template::_thread;
 # File:        shared/Template/_thread.pm                                      #
 #                                                                              #
 # Authors:     AndrĂ© Malo <nd@o3media.de>                                      #
+#              Christian Kruse <ckruse@wwwtech.de>                             #
 #                                                                              #
 # Description: convert parsed thread to HTML                                   #
 #                                                                              #
@@ -19,6 +20,7 @@ use Encode::Plain; $Encode::Plain::utf8 = 1;
 use Posting::_lib qw(short_hr_time);
 use Template;
 use Template::_query;
+use Data::Dumper;
 
 ################################################################################
 #
@@ -41,53 +43,65 @@ use base qw(Exporter);
 #
 # create HTML string
 #
-# Params: $msg      - Reference of Message-Array
+# Params: $msg       Reference of Message-Array
 #                     (Output of parse_single_thread in Posting::_lib)
-#         $template - Template object
-#         $par      - Hash Reference (see doc for details)
+#         $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) = @_;
+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;
 
   # whole thread
-  if ($par -> {start} == -1) {
-    $_ = $msg -> [0];
-    @indexes = (1..$_ -> {answers});
+  if ($par->{'start'} == -1) {
+    $_ = $msg->[0];
+    @indexes = (1 .. $_->{answers});
 
-    if ($_ -> {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}
+        ${$template->scrap(
+           $temp->{
+             (length $_->{'cat'}
                ? 'start'
-               : 'startNC'
+               : 'startNC').($actions->{'actionDeleted'} ? $del : '')
            },
-           { $temp -> {name}    => $_ -> {name},
-             $temp -> {subject} => $_ -> {subject},
-             $temp -> {cat}     => $_ -> {cat},
-             $temp -> {time}    => plain(short_hr_time ($_ -> {time})),
-             $temp -> {link}    => query_string({$t => $tid, $p => $_ -> {mid}}),
-             $temp -> {tid}     => $tid,
-             $temp -> {mid}     => $_ -> {mid},
+           { $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}
+           $par->{'addParam'}
           )} .
         '</dt>';
     }
@@ -95,21 +109,23 @@ sub html_thread ($$$) {
     else {
       $html =
         '<dd>'.
-        ${$template -> scrap (
-           $temp -> {
-             length $_ -> {cat}
-             ? 'start'
-             : 'startNC'
+        ${$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}    => query_string({$t => $tid, $p => $_ -> {mid}}),
-             $temp -> {tid}     => $tid,
-             $temp -> {mid}     => $_ -> {mid},
+           { $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}
+           $par->{'addParam'}
           )}.
         '</dd>';
 
@@ -120,68 +136,75 @@ sub html_thread ($$$) {
   # 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 -> [$start] -> {level}
-      if (defined $msg -> [$start] -> {level});
+    @indexes = ($start .. $end);
+    $oldlevel = $startlevel = $msg->[$start]->{'level'}
+      if (defined $msg->[$start]->{'level'});
   }
 
   # 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});}
+    if ($_->{'level'} < $oldlevel) {
+      $html .= '</dl></dd>' x ($oldlevel - $_->{'level'});
+    }
 
-    $oldlevel = $_ -> {level};
+    $oldlevel = $_->{'level'};
 
-    if ($_ -> {answers}) {
-      $html.=
+    if ($_->{'answers'}) {
+      $html .=
         '<dd><dl><dt>'.
-        ${$template -> scrap (
-           $temp -> {
-             length $_ -> {cat}
+        ${$template->scrap(
+           $temp->{
+             (length $_->{'cat'}
              ? 'line'
-             : 'lineNC'
+             : 'lineNC').($actions->{'actionDeleted'} ? $del : '')
            },
-           { $temp -> {name}    => $_ -> {name},
-             $temp -> {subject} => $_ -> {subject},
-             $temp -> {cat}     => $_ -> {cat},
-             $temp -> {time}    => plain(short_hr_time ($_ -> {time})),
-             $temp -> {link}    => query_string({$t => $tid, $p => $_ -> {mid}}),
-             $temp -> {tid}     => $tid,
-             $temp -> {mid}     => $_ -> {mid},
+           { $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}
+           $par->{'addParam'}
           )}.
         '</dt>';
     }
     else {
-      $html.=
+      $html .=
         '<dd>'.
-        ${$template -> scrap (
-           $temp -> {
-             length $_ -> {cat}
+        ${$template->scrap(
+           $temp->{
+             (length $_->{'cat'}
              ? 'line'
-             : 'lineNC'
+             : 'lineNC').($actions->{'actionDeleted'} ? $del : '')
            },
-           { $temp -> {name}    => $_ -> {name},
-             $temp -> {subject} => $_ -> {subject},
-             $temp -> {cat}     => $_ -> {cat},
-             $temp -> {time}    => plain(short_hr_time ($_ -> {time})),
-             $temp -> {link}    => query_string({$t => $tid, $p => $_ -> {mid}}),
-             $temp -> {tid}     => $tid,
-             $temp -> {mid}     => $_ -> {mid},
+           { $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}
+           $par->{'addParam'}
           )}.
         '</dd>';
     }
   }
-  $html.='</dl></dd>' x ($oldlevel - $startlevel);
+  $html .= '</dl></dd>' x ($oldlevel - $startlevel);
 
   \$html;
 }
@@ -191,4 +214,4 @@ sub html_thread ($$$) {
 
 #
 #
-### end of Template::_thread ###################################################
\ No newline at end of file
+### end of Template::_thread ###################################################

patrick-canterino.de