X-Git-Url: https://git.p6c8.net/selfforum.git/blobdiff_plain/d2a9a53e1134b61fa695688b5bc388091fc346cf..a9a9cc16143ab7c16c4f140df5dff8473ed99119:/selfforum-cgi/shared/Template/Archive.pm diff --git a/selfforum-cgi/shared/Template/Archive.pm b/selfforum-cgi/shared/Template/Archive.pm index a0497a8..bae7d47 100644 --- a/selfforum-cgi/shared/Template/Archive.pm +++ b/selfforum-cgi/shared/Template/Archive.pm @@ -4,15 +4,19 @@ package Template::Archive; # # # File: shared/Template/Archive.pm # # # -# Authors: Frank Schoenmann , 2001-06-04 # +# Authors: André Malo # +# Frank Schönmann # # # # 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( @@ -20,10 +24,14 @@ use Posting::_lib qw( get_message_header get_message_body + get_all_threads parse_single_thread parse_xml_file + very_short_hr_time + short_hr_time hr_time + month KILL_DELETED ); @@ -31,24 +39,147 @@ use Template; 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); -@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 # -# Params: +# Params: $yeardir directory, which contains month directories # $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 () ##################################################### # @@ -61,10 +192,79 @@ use base qw(Exporter); # sub print_month_as_HTML($$$) { my ($mainfile, $tempfile, $param) = @_; + my $main = new Lock($mainfile); + + my $assign = $param->{'assign'}; 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 () #################################################### @@ -85,6 +285,19 @@ sub print_thread_as_HTML($$$) { 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'} }); @@ -97,6 +310,9 @@ sub print_thread_as_HTML($$$) { $tree->{'month'} => $param->{'month'} }; + # + # used to print the thread view + # my $tpar = { 'thread' => $param->{'thread'}, 'template' => $param->{'tree'}, @@ -105,25 +321,33 @@ sub print_thread_as_HTML($$$) { 'addParam' => $addparam }; + # + # threadDocStart + # 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'}, - $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'}); - my $text = message_field ( + my $text = message_field( $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 - } + }, + 1 )}; } + # + # threadDocEnd + # print ${$template->scrap( $assign->{'threadDocEnd'}, - $tmplparam + $tmplparam, + 1 )}; } -# keep require happy +# keep 'require' happy 1; # # -### end of Template::Archive ################################################### +### end of Template::Archive ################################################### \ No newline at end of file