polishing notifyemail

master
Joey Hess 2012-03-28 19:39:08 -04:00
parent f16de0c4e3
commit accf79f94a
3 changed files with 25 additions and 22 deletions

View File

@ -73,32 +73,32 @@ sub notify (@) {
error $@ if $@;
eval q{use IkiWiki::UserInfo};
error $@ if $@;
eval q{use URI};
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 $content="";
my $showcontent=defined pagetype($file);
@ -112,24 +112,28 @@ sub notify (@) {
}
elsif (defined $pagestate{$page}{meta}{permalink}) {
# need to use permalink for an internal page
$url=$pagestate{$page}{meta}{permalink};
$url=URI->new_abs($pagestate{$page}{meta}{permalink}, $config{url});
}
else {
$url=$config{wikiurl}; # crummy fallback url
$url=$config{url}; # crummy fallback url
}
my $pagedesc=$page;
if (defined $pagestate{$page}{meta}{title} &&
length $pagestate{$page}{meta}{title}) {
$pagedesc=qq{"$pagestate{$page}{meta}{title}"};
}
my $subject=gettext("change notification:")." ".$pagedesc;
if (pagetype($file) eq '_comment') {
$subject=gettext("comment notification:")." ".$pagedesc;
}
my $template=template("notifyemail.tmpl");
$template->param(
wikiname => $config{wikiname},
url => $url,
prefsurl => IkiWiki::cgiurl(do => "prefs"),
prefsurl => $config{cgiurl}."?do=prefs",
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 an email.
my $subject=sprintf(gettext("%s: change notification for %s"),
$config{wikiname}, $page);
sendmail(
To => $email,
From => "$config{wikiname} <$config{adminemail}>",
@ -139,7 +143,7 @@ sub notify (@) {
}
}
#exit 0; # daemon child
exit 0; # daemon child
}
1

View File

@ -82,7 +82,7 @@ Here is a full list of the template files used:
make calendar archive pages.
* `trails.tmpl` - Used by the trail plugin to generate links on each page
that is a member of a trail.
* `changemail.tmpl` - Used by the changemail plugin to generate mails about
* `notifyemail.tmpl` - Used by the notifymail plugin to generate mails about
changed pages.
* `editpage.tmpl`, `editconflict.tmpl`, `editcreationconflict.tmpl`,
`editfailedsave.tmpl`, `editpagegone.tmpl`, `pocreatepage.tmpl`,

View File

@ -1,7 +1,6 @@
A change has been made to <TMPL_VAR URL>
A <TMPL_IF NAME=ISCOMMENT>comment has been posted at<TMPL_ELSE>change has been made to</TMPL_IF> <TMPL_VAR URL>
To stop these notifications, visit <TMPL_VAR PREFSURL>
<TMPL_IF NAME=SHOWCONTENT>
----