From: <de...@de...> - 2013-03-03 07:06:27
|
Author: PeterThoeny Date: 2013-03-03 01:06:20 -0600 (Sun, 03 Mar 2013) New Revision: 25304 Trac url: http://develop.twiki.org/trac/changeset/25304 Modified: twiki/branches/TWikiRelease05x01/WatchlistPlugin/lib/TWiki/Plugins/WatchlistPlugin/Core.pm Log: Item7143: Initial version of WatchlistPlugin - digest notification logic: send digest e-mail Modified: twiki/branches/TWikiRelease05x01/WatchlistPlugin/lib/TWiki/Plugins/WatchlistPlugin/Core.pm =================================================================== --- twiki/branches/TWikiRelease05x01/WatchlistPlugin/lib/TWiki/Plugins/WatchlistPlugin/Core.pm 2013-03-03 07:05:36 UTC (rev 25303) +++ twiki/branches/TWikiRelease05x01/WatchlistPlugin/lib/TWiki/Plugins/WatchlistPlugin/Core.pm 2013-03-03 07:06:20 UTC (rev 25304) @@ -34,8 +34,8 @@ ChangesFormat => $TWiki::cfg{Plugins}{WatchlistPlugin}{ChangesFormat} || '| [[$web.$topic][$topic]] in <nop>$web web | $date - r$rev - [[$wikiname]] |', NotifyTxtFormat => $TWiki::cfg{Plugins}{WatchlistPlugin}{NotifyTxtLine} || - ' - $topic in $web web, updated by $wikiname, $date, r$rev' . "\n" . - ' $viewscript/$web/$topic' . "\n", + '- $topic in $web web, updated by $wikiname, $date, r$rev' . "\n" . + ' $viewscript/$web/$topic' . "\n\n", UseEmailField => $TWiki::cfg{Plugins}{WatchlistPlugin}{UseEmailField}, baseWeb => $baseWeb, baseTopic => $baseTopic, @@ -199,8 +199,10 @@ if( $size > 0 ) { print "-- total $size\n" if( $verbose ); my $text = ''; + my $w; + my $t; foreach my $item ( sort { $dateRef->{$b} cmp $dateRef->{$a} } keys %$dateRef ) { - my ( $w, $t ) = split( /~/, $item ); + ( $w, $t ) = split( /~/, $item ); my $d = TWiki::Func::formatTime( $dateRef->{$item} ); my $line = $this->{NotifyTxtFormat}; $line =~ s/\$web/$w/go; @@ -210,9 +212,14 @@ $line =~ s/\$wikiname/$webData->{$w}{$t}{user}/go; $line =~ s/\$viewscript/$viewScriptUrl/go; $text .= $line; - print "$line\n" if( $verbose ); + print "$line" if( $verbose ); } - # FIXME: notify + $text =~ s/[\r\n]*$//s; + + # Notify user + my $wikiUser = $topic; + $wikiUser =~ s/Watchlist$//; + $this->_sendEmail( $w, $t, $wikiUser, $text, 1 ); } else { print "(none)\n" if( $verbose ); } @@ -283,7 +290,7 @@ last unless( $max-- ); my ( $w, $t ) = split( /~/, $item ); my $d = TWiki::Func::formatTime( $dateRef->{$item} ); - my $line = $this->{ChangeFormat}; + my $line = $this->{ChangesFormat}; $line =~ s/\$web/$w/go; $line =~ s/\$topic/$t/go; $line =~ s/\$date/$d/go; @@ -429,42 +436,6 @@ } # ========================= -sub _digestNotify { - my( $this ) = @_; - my $stdout = 'FIXME digest notify'; - - return $stdout; -} - -# ========================= -sub _immediateNotify -{ - my ( $this, $web, $topic, $wikiUser ) = @_; - - my @emails = (); - if( $this->{UseEmailField} ) { - # Get e-mails from Email form field of user profile topics - my $text = '%FORMFIELD{Email}%'; - @emails = - map { $_ = "$wikiUser <$_>"; $_; } - split( /[,;]\s*/, TWiki::Func::expandCommonVariables( $text, - $wikiUser, $this->{watchlistWeb} ) ); - - } else { - # Get e-mails from password system - foreach my $mail ( TWiki::Func::wikinameToEmails( $wikiUser ) ) { - push( @emails, "$wikiUser <$mail>" ); - } - } - my $toEmails = join( ', ', @emails ); - TWiki::Func::writeDebug( "- WatchlistPlugin: Immediate notify $toEmails," - . " $web.$topic changed" ) if $debug; - $this->_sendEmail( $web, $topic, $wikiUser, $toEmails ); - - return; -} - -# ========================= sub _findWatchlistTopicsByWatchedTopic { my ( $this, $webTopic ) = @_; @@ -562,33 +533,65 @@ # ========================= sub _sendEmail { - my( $this, $web, $topic, $wikiUser, $toEmails ) = @_; + my( $this, $web, $topic, $wikiUser, $textChanges, $digest ) = @_; - # For title, use TOPICTITLE if available, else space out topic name - my $rawTitle = "%TOPICTITLE{ topic=\"$web.$topic\" }%"; - my $title = TWiki::Func::expandCommonVariables( $rawTitle, $topic, $web ); - if( $title eq $rawTitle || $title eq $topic ) { - $title = "%SPACEOUT{$topic}%"; + my @emails = (); + if( $this->{UseEmailField} ) { + # Get e-mails from Email form field of user profile topics + my $t = '%FORMFIELD{ "Email" topic="' . $this->{watchlistWeb} . '.$wikiUser" }%'; + @emails = + map { $_ = "$wikiUser <$_>"; $_; } + split( /[,;]\s*/, TWiki::Func::expandCommonVariables( $t, + $wikiUser, $this->{watchlistWeb} ) ); + + } else { + # Get e-mails from password system + foreach my $mail ( TWiki::Func::wikinameToEmails( $wikiUser ) ) { + push( @emails, "$wikiUser <$mail>" ); + } } - my $text = "%REVINFO{ web=\"$web\" topic=\"$topic\" " - . 'format="$wikiname, $rev, $date - $time" }%'; - $text = TWiki::Func::expandCommonVariables( $text, $topic, $web ); - my( $watchUser, $watchRev, $watchDate ) = split( /, /, $text ); - my $template = 'watchlistimmediatenotify'; # FIXME: Config value - $text = TWiki::Func::readTemplate( $template ); + my $toEmails = join( ', ', @emails ); + TWiki::Func::writeDebug( '- WatchlistPlugin: ' + . ( $digest ? 'Digest' : 'Immediate' ) + . " notify $toEmails, $web.$topic changed" ) if( $debug ); + + # Read template & compose e-mail + my $text = ''; + if( $digest ) { + # Digest notification + my $template = 'watchlistdigestnotify'; # FIXME: Config value + $text = TWiki::Func::readTemplate( $template ); + $text =~ s/%WATCHCHANGESTEXT%/$textChanges/go; + + } else { + # Immediate notification + my $template = 'watchlistimmediatenotify'; # FIXME: Config value + $text = TWiki::Func::readTemplate( $template ); + # For title, use TOPICTITLE if available, else space out topic name + my $rawTitle = "%TOPICTITLE{ topic=\"$web.$topic\" }%"; + my $title = TWiki::Func::expandCommonVariables( $rawTitle, $topic, $web ); + if( $title eq $rawTitle || $title eq $topic ) { + $title = "%SPACEOUT{$topic}%"; + } + my $info = "%REVINFO{ web=\"$web\" topic=\"$topic\" " + . 'format="$wikiname, $rev, $date - $time" }%'; + $info = TWiki::Func::expandCommonVariables( $info, $topic, $web ); + my( $watchUser, $watchRev, $watchDate ) = split( /, /, $text ); + $text =~ s/%WATCHTITLE%/$title/go; + $text =~ s/%WATCHUSER%/$watchUser/go; + $text =~ s/%WATCHREV%/$watchRev/go; + $text =~ s/%WATCHDATE%/$watchDate/go; + } $text =~ s/%WATCHLISTUSER%/$wikiUser/go; $text =~ s/%WATCHLISTTO%/$toEmails/go; $text =~ s/%WATCHWEB%/$web/go; $text =~ s/%WATCHTOPIC%/$topic/go; - $text =~ s/%WATCHTITLE%/$title/go; - $text =~ s/%WATCHUSER%/$watchUser/go; - $text =~ s/%WATCHREV%/$watchRev/go; - $text =~ s/%WATCHDATE%/$watchDate/go; $text = TWiki::Func::expandCommonVariables( $text, $topic, $web ); + # Send e-mail TWiki::Func::writeDebug( "- WatchlistPlugin: Email\n=====\n$text\n=====" ) if $debug; $this->{error} = TWiki::Func::sendEmail( $text ); - $this->{note} .= "<verbatim>$text</verbatim>" if( $debug ); + return; } |