|< 1 2 3 >| | 23 Einträge, 3 Seiten |
Hagen+2008-04-21 16:40:30--Was wären denn 'Nice-To-Haves'?
lux+2008-04-22 05:49:48--[...] Dazu kommt die Frage ob das je Forum Sinn macht oder direkt für alle Foren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
sub erzeuge_rss_feed { ### ggf. Beschreibung anpassen ### if ($board_id || $thread_id) { my $sql; if ($thread_id) { $sql = "SELECT title FROM $PBoard::Config::DbTables{threads} WHERE id = '$thread_id' LIMIT 1"; } # if if ($board_id) { $sql = "SELECT name FROM $PBoard::Config::DbTables{boards} WHERE id = '$board_id' LIMIT 1"; } # if my $storage = PBoard::Storage->new( { dbh => undef } ); my $poard = PBoard->new( { cgi => $cgi, storage => $storage } ); my $dbh = PBoard::DB::ConnectToDB( $poard ); $storage->set_dbh( $dbh ); my $sth = &PBoard::DB::FireSql( $poard, $sql ); (my $titel) = $sth->fetchrow_array(); $rss_board_titel .= ' :: '.$titel; } # if ### SQL ### my $sql = "SELECT boards.id as board_id, threads.id as thread_id, messages.position as position, boards.name as board_name, threads.title as thread_title, messages.message_raw as message_raw"; $sql .= " FROM $PBoard::Config::DbTables{boards} AS boards,"; $sql .= " $PBoard::Config::DbTables{threads} as threads,"; $sql .= " $PBoard::Config::DbTables{messages} as messages"; $sql .= " WHERE messages.thread = threads.id AND threads.boardID = boards.id"; $sql .= " AND messages.status != 'deleted' AND threads.status != 'onhold' AND threads.status != 'deleted'"; $sql .= " AND boards.id = $board_id" if $board_id; $sql .= " AND threads.id = $thread_id" if $thread_id; $sql .= " AND messages.authorId = $user_id" if $user_id; $sql .= " AND ((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(messages.posttime)) <= ($last_entries * 24 * 60 * 60))" if lc($action) eq lc('lastMessagesDays'); $sql .= " AND messages.position = '1'" if lc($filter) eq 'no_replies'; $sql .= " ORDER BY messages.posttime DESC"; if (lc($action) eq lc('lastMessagesDays')) { $sql .= " LIMIT $max_entries"; } # if elsif (lc($action) eq lc('lastMessagesNumbers')) { $sql .= " LIMIT $last_entries"; } # if else { $sql .= " LIMIT $max_entries"; } # ifelse print "\n\n$sql\n\n" if $debug; ### DB ### my $storage = PBoard::Storage->new( { dbh => undef } ); my $poard = PBoard->new( { cgi => $cgi, storage => $storage } ); my $dbh = PBoard::DB::ConnectToDB( $poard ); $storage->set_dbh( $dbh ); my $sth = &PBoard::DB::FireSql( $poard, $sql ); ### Feed erzeugen ### my $rss = new XML::RSS (version => '2.0'); $rss->channel(title => $rss_board_titel, link => $rss_board_link, language => $rss_language, description => $rss_description, copyright => $rss_copyright, docs => $rss_docs, managingEditor => $rss_managingEditor, webMaster => $rss_webMaster, ); my %hash_ref; while(my $hash_ref = $sth->fetchrow_hashref) { my $link = $rss_board_link.'/thread/'.${$hash_ref}{'thread_id'}.'/startWithMessage='.(int(${$hash_ref}{'position'}/10)*10).'/#MSG'.${$hash_ref}{'position'}; $rss->add_item( title => ${$hash_ref}{'thread_title'}, link => $link, description => ${$hash_ref}{'message_raw'}, ); } # while $sth->finish; return $rss->as_string; } # sub erzeuge_rss_feed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
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=<id>, thread=<id> nur diesem dem Board/Thread <id>; # action=lastMessagesDays;last=7 nur innerhalb der letzten 7 Tage # action=lastMessagesNumbers;last=7 nur die letzten 7 Einträge # user_id=<id> nur Threads von/mit Nutzer <id> # 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;
|< 1 2 3 >| | 23 Einträge, 3 Seiten |