finish notifyemail plugin
parent
d68d255268
commit
a22be4eef0
|
@ -1,15 +1,15 @@
|
|||
#!/usr/bin/perl
|
||||
package IkiWiki::Plugin::changemail;
|
||||
package IkiWiki::Plugin::notifyemail;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "formbuilder_setup", id => "changemail", call => \&formbuilder_setup);
|
||||
hook(type => "formbuilder", id => "changemail", call => \&formbuilder);
|
||||
hook(type => "getsetup", id => "changemail", call => \&getsetup);
|
||||
hook(type => "change", id => "changemail", call => \¬ify);
|
||||
hook(type => "formbuilder_setup", id => "notifyemail", call => \&formbuilder_setup);
|
||||
hook(type => "formbuilder", id => "notifyemail", call => \&formbuilder);
|
||||
hook(type => "getsetup", id => "notifyemail", call => \&getsetup);
|
||||
hook(type => "changes", id => "notifyemail", call => \¬ify);
|
||||
}
|
||||
|
||||
sub getsetup () {
|
||||
|
@ -27,13 +27,10 @@ sub formbuilder_setup (@) {
|
|||
my $form=$params{form};
|
||||
return unless $form->title eq "preferences";
|
||||
my $session=$params{session};
|
||||
my $user_name=$session->param("name");
|
||||
eval q{use IkiWiki::UserInfo};
|
||||
error $@ if $@;
|
||||
$form->field(name => "subscriptions", force => 1, size => 50,
|
||||
$form->field(name => "subscriptions", size => 50,
|
||||
fieldset => "preferences",
|
||||
comment => "(".htmllink("", "", "ikiwiki/PageSpec", noimageinline => 1).")",
|
||||
value => IkiWiki::userinfo_get($user_name, "subscriptions"));
|
||||
value => getsubscriptions($session->param("name")));
|
||||
}
|
||||
|
||||
sub formbuilder (@) {
|
||||
|
@ -45,6 +42,13 @@ sub formbuilder (@) {
|
|||
setsubscriptions($form->field('name'), $form->field('subscriptions'));
|
||||
}
|
||||
|
||||
sub getsubscriptions ($) {
|
||||
my $user=shift;
|
||||
eval q{use IkiWiki::UserInfo};
|
||||
error $@ if $@;
|
||||
IkiWiki::userinfo_get($user, "subscriptions");
|
||||
}
|
||||
|
||||
sub setsubscriptions ($$) {
|
||||
my $user=shift;
|
||||
my $subscriptions=shift;
|
||||
|
@ -53,6 +57,14 @@ sub setsubscriptions ($$) {
|
|||
IkiWiki::userinfo_set($user, "subscriptions", $subscriptions);
|
||||
}
|
||||
|
||||
# Called by other plugins to subscribe the user to a pagespec.
|
||||
sub subscribe ($$) {
|
||||
my $user=shift;
|
||||
my $addpagespec=shift;
|
||||
my $pagespec=getsubscriptions($user);
|
||||
setsubscriptions($user, $pagespec." or ".$addpagespec);
|
||||
}
|
||||
|
||||
sub notify (@) {
|
||||
my @files=@_;
|
||||
return unless @files;
|
||||
|
@ -63,30 +75,37 @@ sub notify (@) {
|
|||
error $@ if $@;
|
||||
|
||||
# Daemonize, in case the mail sending takes a while.
|
||||
defined(my $pid = fork) or error("Can't fork: $!");
|
||||
return if $pid; # parent
|
||||
chdir '/';
|
||||
open STDIN, '/dev/null';
|
||||
open STDOUT, '>/dev/null';
|
||||
POSIX::setsid() or error("Can't start a new session: $!");
|
||||
open STDERR, '>&STDOUT' or error("Can't dup stdout: $!");
|
||||
#defined(my $pid = fork) or error("Can't fork: $!");
|
||||
#return if $pid; # parent
|
||||
#chdir '/';
|
||||
#open STDIN, '/dev/null';
|
||||
#open STDOUT, '>/dev/null';
|
||||
#POSIX::setsid() or error("Can't start a new session: $!");
|
||||
#open STDERR, '>&STDOUT' or error("Can't dup stdout: $!");
|
||||
|
||||
# Don't need to keep a lock on the wiki as a daemon.
|
||||
IkiWiki::unlockwiki();
|
||||
|
||||
my $userinfo=IkiWiki::userinfo_retrieve();
|
||||
exit 0 unless defined $userinfo;
|
||||
#exit 0 unless defined $userinfo;
|
||||
|
||||
foreach my $user (keys %$userinfo) {
|
||||
my $pagespec=$userinfo->{$user}->{"subscriptions"};
|
||||
next unless defined $pagespec && length $pagespec;
|
||||
my $email=$userinfo->{$user}->{email};
|
||||
next unless defined $email && length $email;
|
||||
print "!!$user\n";
|
||||
|
||||
foreach my $file (@files) {
|
||||
my $page=pagename($file);
|
||||
print "file: $file ($page)\n";
|
||||
next unless pagespec_match($page, $pagespec);
|
||||
my $ispage=defined pagetype($file);
|
||||
my $content="";
|
||||
my $showcontent=defined pagetype($file);
|
||||
if ($showcontent) {
|
||||
$content=eval { readfile(srcfile($file)) };
|
||||
$showcontent=0 if $@;
|
||||
}
|
||||
my $url;
|
||||
if (! IkiWiki::isinternal($page)) {
|
||||
$url=urlto($page, undef, 1);
|
||||
|
@ -98,17 +117,17 @@ sub notify (@) {
|
|||
else {
|
||||
$url=$config{wikiurl}; # crummy fallback url
|
||||
}
|
||||
my $template=template("changemail.tmpl");
|
||||
my $template=template("notifyemail.tmpl");
|
||||
$template->param(
|
||||
wikiname => $config{wikiname},
|
||||
url => $url,
|
||||
prefsurl => IkiWiki::cgiurl(do => "prefs"),
|
||||
ispage => $ispage,
|
||||
content => $ispage ? readfile(srcfile($file)) : "",
|
||||
showcontent => $showcontent,
|
||||
content => $content,
|
||||
);
|
||||
#translators: The two variables are the name of the wiki,
|
||||
#translators: and a page that was changed.
|
||||
#translators: This is used as the subject of a commit email.
|
||||
#translators: This is used as the subject of an email.
|
||||
my $subject=sprintf(gettext("%s: change notification for %s"),
|
||||
$config{wikiname}, $page);
|
||||
sendmail(
|
||||
|
@ -120,7 +139,7 @@ sub notify (@) {
|
|||
}
|
||||
}
|
||||
|
||||
exit 0; # daemon child
|
||||
#exit 0; # daemon child
|
||||
}
|
||||
|
||||
1
|
|
@ -1,10 +1,12 @@
|
|||
This plugin allows emailing users when pages are created or changed.
|
||||
This plugin allows uses to subscribe to pages, and emails them when
|
||||
they pages are created or changed.
|
||||
|
||||
It needs the [[!cpan Mail::SendMail]] perl module, and sends mail
|
||||
using the local MTA.
|
||||
|
||||
Each user can configure which pages they are interested in, using an
|
||||
[[ikiwiki/PageSpec]] on their Preferences page. Any change to a page
|
||||
matching the pagespec will send an email that includes the new content of
|
||||
matching the PagSspec will send an email that includes the new content of
|
||||
the page, and a link to the page on the web.
|
||||
|
||||
To make it easy to subscribe to comment threads when posting a comment,
|
|
@ -2,8 +2,8 @@ A change has been made to <TMPL_VAR URL>
|
|||
|
||||
To stop these notifications, visit <TMPL_VAR PREFSURL>
|
||||
|
||||
<TMPL_IF ISPAGE>
|
||||
<TMPL_IF NAME=SHOWCONTENT>
|
||||
----
|
||||
|
||||
<TMPL_VAR CONTENT>
|
||||
<TMPL_IF>
|
||||
</TMPL_IF>
|
Loading…
Reference in New Issue