]> git.p6c8.net - selfforum.git/blobdiff - selfforum-cgi/shared/Template/Archive.pm
Bugfix to show thread list in deleted postings.
[selfforum.git] / selfforum-cgi / shared / Template / Archive.pm
index a0497a8286ceceb356e0afc15c93217635e03c72..bae7d473a571a68848040abb6de337f59674d185 100644 (file)
@@ -4,15 +4,19 @@ package Template::Archive;
 #                                                                              #
 # File:        shared/Template/Archive.pm                                      #
 #                                                                              #
 #                                                                              #
 # File:        shared/Template/Archive.pm                                      #
 #                                                                              #
-# Authors:     Frank Schoenmann <fs@tower.de>, 2001-06-04                      #
+# Authors:     André Malo <nd@o3media.de>                                      #
+#              Frank Schönmann <fs@tower.de>                                   #
 #                                                                              #
 # Description: archive display                                                 #
 #                                                                              #
 ################################################################################
 
 use strict;
 #                                                                              #
 # Description: archive display                                                 #
 #                                                                              #
 ################################################################################
 
 use strict;
+use vars qw(
+  @EXPORT
+);
 
 
-use Lock qw(:READ);
+use Lock;
 use Encode::Posting;
 use Encode::Plain; $Encode::Plain::utf8 = 1;
 use Posting::_lib qw(
 use Encode::Posting;
 use Encode::Plain; $Encode::Plain::utf8 = 1;
 use Posting::_lib qw(
@@ -20,10 +24,14 @@ use Posting::_lib qw(
     get_message_header
     get_message_body
 
     get_message_header
     get_message_body
 
+    get_all_threads
     parse_single_thread
     parse_xml_file
 
     parse_single_thread
     parse_xml_file
 
+    very_short_hr_time
+    short_hr_time
     hr_time
     hr_time
+    month
 
     KILL_DELETED
 );
 
     KILL_DELETED
 );
@@ -31,24 +39,147 @@ use Template;
 use Template::_conf;
 use Template::_thread;
 
 use Template::_conf;
 use Template::_thread;
 
+################################################################################
+#
+# Version check
+#
+# last modified:
+#    $Date$ (GMT)
+# by $Author$
+#
+sub VERSION {(q$Revision$ =~ /([\d.]+)\s*$/)[0] or '0.0'}
+
 ################################################################################
 #
 # Export
 #
 use base qw(Exporter);
 ################################################################################
 #
 # Export
 #
 use base qw(Exporter);
-@Template::Archive::EXPORT = qw(print_thread_as_HTML);
+@EXPORT = qw(
+    print_overview_as_HTML
+    print_year_as_HTML
+    print_month_as_HTML
+    print_thread_as_HTML
+);
+
+### print_overview_as_HTML () ##################################################
+#
+# archive entry
+#
+# Params: $arcdir     main archive directory
+#         $tempfile   template filename
+#         $param      hash reference
+# Return: -none-
+#
+sub print_overview_as_HTML($$$) {
+    my ($arcdir, $tempfile, $param) = @_;
+
+    my $assign = $param->{'assign'};
+
+    my $template = new Template $tempfile;
 
 
+    #
+    # archiveDocStart
+    #
+    print ${$template->scrap(
+        $assign->{'archiveDocStart'}
+    )};
+
+    #
+    # globbing to find year directories
+    #
+    for (<$arcdir????>) {
+        s/$arcdir//;
+        print ${$template->scrap(
+            $assign->{'archiveDocEntry'},
+            {
+                $assign->{'year'}   => $_
+            }
+
+        )};
+    }
+
+#   for (my $month = 1; $month <= 12; $month++) {
+#       if (-e $yeardir.$month.'/') {
+#           print ${$template->scrap(
+#               $assign->{'yearDocEntry'},
+#               {
+#                   $assign->{'year'}       => $param->{'year'},
+#                   $assign->{'month'}      => $month,
+#                   $assign->{'monthName'}  => month($month)
+#               }
+#           )};
+#       }
+#   }
+
+    #
+    # archiveDocEnd
+    #
+    print ${$template->scrap(
+        $assign->{'archiveDocEnd'}
+    )};
+}
 
 ### print_year_as_HTML () ######################################################
 #
 # yearly overview over months
 #
 
 ### print_year_as_HTML () ######################################################
 #
 # yearly overview over months
 #
-# Params:
+# Params: $yeardir    directory, which contains month directories
 #         $tempfile   template filename
 #         $param      hash reference
 # Return: -none-
 #
 #         $tempfile   template filename
 #         $param      hash reference
 # Return: -none-
 #
+sub print_year_as_HTML($$$) {
+    my ($yeardir, $tempfile, $param) = @_;
+
+    my $assign = $param->{'assign'};
 
 
+    my $template = new Template $tempfile;
+
+    #
+    # check if this year's archive exist
+    #
+    unless (-e $yeardir) {
+        print ${$template->scrap(
+            $assign->{'error'},
+            {
+                $assign->{'errorText'}  => "Es existieren keine Nachrichten für dieses Jahr."
+            }
+        )};
+    }
+
+    my $tmplparam = {
+            $assign->{'year'}           => $param->{'year'},
+    };
+
+    #
+    # yearDocStart
+    #
+    print ${$template->scrap(
+        $assign->{'yearDocStart'},
+        $tmplparam
+    )};
+
+    for (my $month = 1; $month <= 12; $month++) {
+        if (-e $yeardir.$month.'/') {
+            print ${$template->scrap(
+                $assign->{'yearDocEntry'},
+                {
+                    $assign->{'year'}       => $param->{'year'},
+                    $assign->{'month'}      => $month,
+                    $assign->{'monthName'}  => month($month)
+                }
+            )};
+        }
+    }
+
+    #
+    # yearDocEnd
+    #
+    print ${$template->scrap(
+        $assign->{'yearDocEnd'},
+        $tmplparam
+    )};
+}
 
 ### print_month_as_HTML () #####################################################
 #
 
 ### print_month_as_HTML () #####################################################
 #
@@ -61,10 +192,79 @@ use base qw(Exporter);
 #
 sub print_month_as_HTML($$$) {
     my ($mainfile, $tempfile, $param) = @_;
 #
 sub print_month_as_HTML($$$) {
     my ($mainfile, $tempfile, $param) = @_;
+    my $main = new Lock($mainfile);
+
+    my $assign = $param->{'assign'};
 
     my $template = new Template $tempfile;
 
 
     my $template = new Template $tempfile;
 
+    #
+    # check if XML file exists
+    #
+    unless (-f $main->filename) {
+        print ${$template->scrap(
+            $assign->{'error'},
+            {
+                $assign->{'errorText'}  => "Es existieren keine Nachrichten für diesen Monat."
+            }
+        )};
+        return;
+    }
+
+    #
+    # try locking and read/parse threads
+    #
+    my $threads;
+    unless ($main->lock (LH_SHARED) and $threads = get_all_threads($mainfile, KILL_DELETED)) {
+        print ${$template->scrap(
+            $assign->{'error'},
+            {
+                $assign->{'errorText'}  => "Fehler beim Locking."
+            }
+        )};
+        return;
+    }
+    $main -> unlock;
+
+    my $tmplparam = {
+            $assign->{'year'}           => $param->{'year'},
+            $assign->{'month'}          => $param->{'month'},
+            $assign->{'monthName'}      => month($param->{'month'})
+    };
+
+    #
+    # monthDocStart
+    #
+    print ${$template->scrap(
+        $assign->{'monthDocStart'},
+        $tmplparam
+    )};
+
+    #
+    # thread overview
+    #
+    for (sort {$a <=> $b} keys %$threads) {
+        print ${$template->scrap(
+            $assign->{'monthThreadEntry'},
+            {
+                $assign->{'threadID'}       => $_,
+                $assign->{'threadCategory'} => $threads->{$_}->[0]->{'cat'},
+                $assign->{'threadTitle'}    => $threads->{$_}->[0]->{'subject'},
+                $assign->{'threadTime'}     => short_hr_time($threads->{$_}->[0]->{'time'}),
+                $assign->{'threadDate'}     => very_short_hr_time($threads->{$_}->[0]->{'time'}),
+                $assign->{'year'}           => $param->{'year'},
+                $assign->{'month'}          => $param->{'month'}
+            }
+        )};
+    }
 
 
+    #
+    # monthDocEnd
+    #
+    print ${$template->scrap(
+        $assign->{'monthDocEnd'},
+        $tmplparam
+    )};
 }
 
 ### print_thread_as_HTML () ####################################################
 }
 
 ### print_thread_as_HTML () ####################################################
@@ -85,6 +285,19 @@ sub print_thread_as_HTML($$$) {
 
     my $template = new Template $tempfile;
 
 
     my $template = new Template $tempfile;
 
+    #
+    # check if XML file exists
+    #
+    unless (-f $mainfile) {
+        print ${$template->scrap(
+            $assign->{'error'},
+            {
+                $assign->{'errorText'}  => "Der gewünschte Thread existiert nicht."
+            }
+        )};
+        return;
+    }
+
     my $view = get_view_params ({
         'adminDefault'  => $param->{'adminDefault'}
     });
     my $view = get_view_params ({
         'adminDefault'  => $param->{'adminDefault'}
     });
@@ -97,6 +310,9 @@ sub print_thread_as_HTML($$$) {
         $tree->{'month'}  => $param->{'month'}
     };
 
         $tree->{'month'}  => $param->{'month'}
     };
 
+    #
+    # used to print the thread view
+    #
     my $tpar = {
         'thread'    => $param->{'thread'},
         'template'  => $param->{'tree'},
     my $tpar = {
         'thread'    => $param->{'thread'},
         'template'  => $param->{'tree'},
@@ -105,25 +321,33 @@ sub print_thread_as_HTML($$$) {
         'addParam'  => $addparam
     };
 
         'addParam'  => $addparam
     };
 
+    #
+    # threadDocStart
+    #
     my $tmplparam = {
             $assign->{'threadCategory'} => $thread->[0]->{'cat'},
             $assign->{'threadTitle'}    => $thread->[0]->{'subject'},
     my $tmplparam = {
             $assign->{'threadCategory'} => $thread->[0]->{'cat'},
             $assign->{'threadTitle'}    => $thread->[0]->{'subject'},
-            $assign->{'threadYear'}     => $param->{'year'},
-            $assign->{'threadMonth'}    => $param->{'month'},
+            $assign->{'year'}           => $param->{'year'},
+            $assign->{'month'}          => $param->{'month'},
+            $assign->{'monthName'}      => month($param->{'month'}),
             $param->{'tree'}->{'main'}  => html_thread($thread, $template, $tpar)
     };
 
     print ${$template->scrap(
         $assign->{'threadDocStart'},
             $param->{'tree'}->{'main'}  => html_thread($thread, $template, $tpar)
     };
 
     print ${$template->scrap(
         $assign->{'threadDocStart'},
-        $tmplparam
+        $tmplparam,
+        1
     )};
 
     )};
 
+    #
+    # print thread msgs
+    #
     for (@$thread) {
         my $mnode = get_message_node($xml, 't'.$tid, 'm'.$_->{'mid'});
         my $header = get_message_header($mnode);
         my $body = get_message_body($xml, 'm'.$_->{'mid'});
 
     for (@$thread) {
         my $mnode = get_message_node($xml, 't'.$tid, 'm'.$_->{'mid'});
         my $header = get_message_header($mnode);
         my $body = get_message_body($xml, 'm'.$_->{'mid'});
 
-        my $text = message_field (
+        my $text = message_field(
             $body,
             {
                 'quoteChars'    => plain($view->{'quoteChars'}),
             $body,
             {
                 'quoteChars'    => plain($view->{'quoteChars'}),
@@ -145,20 +369,25 @@ sub print_thread_as_HTML($$$) {
                 $assign->{'msgCategory'}    => plain($header->{'category'}),
                 $assign->{'msgSubject'}     => plain($header->{'subject'}),
                 $assign->{'msgBody'}        => $text
                 $assign->{'msgCategory'}    => plain($header->{'category'}),
                 $assign->{'msgSubject'}     => plain($header->{'subject'}),
                 $assign->{'msgBody'}        => $text
-            }
+            },
+            1
         )};
     }
 
         )};
     }
 
+    #
+    # threadDocEnd
+    #
     print ${$template->scrap(
         $assign->{'threadDocEnd'},
     print ${$template->scrap(
         $assign->{'threadDocEnd'},
-        $tmplparam
+        $tmplparam,
+        1
     )};
 }
 
 
     )};
 }
 
 
-# keep require happy
+# keep 'require' happy
 1;
 
 #
 #
 1;
 
 #
 #
-### end of Template::Archive ###################################################
+### end of Template::Archive ###################################################
\ No newline at end of file

patrick-canterino.de