use strict; use warnings; use Carp qw(croak carp); use CGI (); use CGI::Carp qw(fatalsToBrowser warningsToBrowser set_message); use PBoard::Config; use PBoard; use PBoard::DB; use PBoard::Storage; use XML::RSS; # http://search.cpan.org/dist/XML-RSS/lib/XML/RSS.pm ############################################# ### Parameter ### # board=, thread= nur diesem dem Board/Thread ; # action=lastMessagesDays;last=7 nur innerhalb der letzten 7 Tage # action=lastMessagesNumbers;last=7 nur die letzten 7 Einträge # user_id= nur Threads von/mit Nutzer # filter=no_reply nur neue Threads anzeigen/keine Antworten ############################################# ### Debug ### my $debug = 0; ############################################# ### Variablen ### my $max_days = 10; # Maximalwert für das Alter der Beiträge my $max_entries = 20; # Maximalwert für die Anzahl der Beiträge my $last_entries_default_days = 3; # Default-Wert für das Alter der Beiträge my $last_entries_default_entries = 20; # Default-Wert für die Anzahl der Beiträge my $action_default = 'lastMessagesNumbers'; # Default-Wert für die Action my $rss_board_titel = $PBoard::Config::PageName; my $rss_board_link = 'http://board.perl-community.de'; my $rss_language = 'de-de'; my $rss_description = 'Perl-Community.de - Deutschlands größte Community zum Thema Perl'; my $rss_copyright = 'Perl-Community.de'; my $rss_docs = 'http://blogs.law.harvard.edu/tech/rss'; my $rss_managingEditor = 'strat@perl-community.de'; my $rss_webMaster = 'strat@perl-community.de'; my $rss_caching = 1; # Caching der Feeds aktivieren my $rss_caching_time = 15; # Caching-Time (Wert in Minuten) my $rss_pfad = './'; my $rss_out = ''; ############################################# print "\n==> Script $0 wurde gestartet\n" if $debug; ### Parameter einlesen & prüfen ### my $cgi = CGI->new(); my $board_id = $cgi->param( 'board' ) || 0; my $thread_id = $cgi->param( 'thread' ) || 0; my $user_id = $cgi->param( 'user_id' ) || 0; my $action = $cgi->param( 'action' ) || 'lastMessagesNumbers'; my $last_entries = $cgi->param( 'last' ) || 0; my $filter = $cgi->param( 'filter' ) || 0; # board_id prüfen $board_id = 0 if ($board_id !~ m|^[0-9]*$|) || ($board_id < 0); # thread_id prüfen $thread_id = 0 if ($thread_id !~ m|^[0-9]*$|) || ($thread_id < 0); # user_id prüfen $user_id = 0 if ($user_id !~ m|^[0-9]*$|) || ($user_id < 0); # Default-Wert für '$action' falls ungültig if (!grep $action eq $_, qw/lastMessagesNumbers LastMessagesDays/) { $action = $action_default; } # if # Default-Wert für '$last_entries' falls nicht definiert $last_entries = 0 if ($last_entries !~ m|^[0-9]*$|) || ($last_entries < 0); if (!$last_entries) { if (lc($action) eq lc('lastMessagesDays')) { $last_entries = $last_entries_default_days; } # if else { $last_entries = $last_entries_default_entries; } # ifelse } # if # '$last_entries' auf Höchst-Wert prüfen $last_entries = $max_days if (lc($action) eq lc('lastMessagesDays')) && ($last_entries > $max_days); $last_entries = $max_entries if (lc($action) eq lc('lastMessagesDays')) && ($last_entries > $max_days); # Default-Wert für '$filter' falls ungültig if (!grep $filter eq $_, qw/no_replies/) { $filter = 0; } # if print "Board: ".$board_id."\n" if $debug; print "Thread: ".$thread_id."\n" if $debug; print "User: ".$user_id."\n" if $debug; print "Action: ".$action."\n" if $debug; print "Last: ".$last_entries."\n" if $debug; print "Filter: ".$filter."\n" if $debug; ### Caching ### if ($rss_caching && !$user_id) { # caching nur 'allgemein', nicht für Nutzer my $datei = 'rss'; $datei .= '_board_'.$board_id if $board_id; $datei .= '_thread_'.$thread_id if $thread_id; $datei .= '_action_'.$action if $action; $datei .= '_last_'.$last_entries if $last_entries; $datei .= '_filter_'.$filter if $filter; $datei = lc($rss_pfad.$datei.'.txt'); print "Datei: $datei\n" if $debug; # (-M $datei) bestimmt das Alter in Tagen als Gleitkommazahl if ((-e $datei) && (((-M $datei)*24*60 + 60) < $rss_caching_time)) { # d.h. die Datei ist vorhanden und ist nicht älter als $rss_caching_time print "Alter: ".((-M $datei)*24*60 + 60)." Minuten\n" if $debug; print "Lese Datei aus Cache\n" if $debug; open (my $FH, "$datei") || die "Can't Open $datei: $!\n"; my @LINES = <$FH>; close $FH; $rss_out = join('', @LINES); } # if else { # d.h. die Datei ist nicht vorhanden/zu alt print "Erzeuge Datei für Cache\n" if $debug; $rss_out = erzeuge_rss_feed(); open (my $FH, ">$datei") || die "Can't Open $datei: $!\n"; print $FH $rss_out; close $FH; } # ifelse } # if if ($rss_out eq '') { $rss_out = erzeuge_rss_feed(); } # if print $cgi->header(-type => 'text/plain', -expires => '+0s', -charset => 'ISO-8859-1', ); # RSS-Ausgabe print $rss_out; print "\n==> Script $0 wurde beendet\n" if $debug;