Schrift
[thread]11618[/thread]

Mail-Benachrichtigung oder RSS ...



<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
lux
 2008-04-10 10:33
#108201 #108201
User since
2007-09-15
104 Artikel
BenutzerIn
[Homepage]
user image
Hallo,

besteht die Möglichkeit, eine Mail-BNenachrichtigung für neue Postings in abonnierten Threads ins Forum einzubauen.

Alternativ wäre ein RSS-Feed gar nicht schlecht.

Gruss

Dirk
Blog - Podcast - Frau - Hunde
Schweizer Tastaturen kennen kein sz.
renee
 2008-04-10 10:57
#108205 #108205
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das Problem ist: Zeit!

Ein paar Ideen zu den RSS-Feeds habe ich in der Schublade, aber ich komme einfach nicht dazu, das einzubauen.

Wenn Du Lust hast, kannst Du Dich aber auch daran wagen... Einfach die Sourcen von http://sourceforge.net/projects/perlboard/ runterladen und anfangen *g*
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
lux
 2008-04-10 11:08
#108206 #108206
User since
2007-09-15
104 Artikel
BenutzerIn
[Homepage]
user image
Das Problem kenne ich ... das ist dicht gefolgt von einem Priorisierungsproblem bei Freizeit- und Familienaktivitäten ...

Gruss

Dirk
Blog - Podcast - Frau - Hunde
Schweizer Tastaturen kennen kein sz.
Hagen
 2008-04-21 18:40
#108655 #108655
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich würde mich mal an einen RSS-Feed ausprobieren ...

Was wären denn 'Nice-To-Haves'?
Gruß
Hagen
lux
 2008-04-22 07:49
#108673 #108673
User since
2007-09-15
104 Artikel
BenutzerIn
[Homepage]
user image
Hagen+2008-04-21 16:40:30--
Was wären denn 'Nice-To-Haves'?


Nice to have wäre die Unterscheidung Neue Threads / Neue Postings (in allen Threads).

Vermutlich würden die meisten sich sogar komplett alle neuen Postings anzeigen lassen.

Dazu kommt die Frage ob das je Forum Sinn macht oder direkt für alle Foren.

Gruß

Dirk
Blog - Podcast - Frau - Hunde
Schweizer Tastaturen kennen kein sz.
renee
 2008-04-22 10:34
#108677 #108677
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
lux+2008-04-22 05:49:48--
[...] Dazu kommt die Frage ob das je Forum Sinn macht oder direkt für alle Foren.


Es würde durchaus Sinn machen, RSS-Feeds für einzelne Foren anzubieten, weil nicht jeder an jedem Forum interessiert ist. Aber besser ein Schritt nach dem Anderen. Am besten erstmal ein Feed für alle Foren schreiben.

Wenn die Methode relativ generisch geschrieben ist, dann ist es auch nicht sonderlich schwierig, dann noch Feeds für einzelne Foren einzuführen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Hagen
 2008-04-22 14:53
#108712 #108712
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
So, hier ist das erste Ergebnis. Die Zeilen mit $debug' werden später noch entfernt. Wer möchte, dem kann ich das Script natürlich auch per Email schicken.

Code (perl): (dl )
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
Gruß
Hagen
Hagen
 2008-04-22 14:54
#108713 #108713
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
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;
Gruß
Hagen
Struppi
 2008-04-22 15:22
#108715 #108715
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
sind joins nicht effktiver?
pq
 2008-04-22 16:07
#108724 #108724
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
1. unbedingt platzhalter verwenden im sql
2. boards, die nur für bestimmte gruppen sichtbar sind, müssen komplett raus, da du keine
authentifizierung machst.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2008-04-10 10:33.