diff options
-rw-r--r-- | IkiWiki/Plugin/notifyemail.pm | 42 | ||||
-rw-r--r-- | doc/templates.mdwn | 2 | ||||
-rw-r--r-- | templates/notifyemail.tmpl | 3 |
3 files changed, 25 insertions, 22 deletions
diff --git a/IkiWiki/Plugin/notifyemail.pm b/IkiWiki/Plugin/notifyemail.pm index 192e8d7a3..79771af74 100644 --- a/IkiWiki/Plugin/notifyemail.pm +++ b/IkiWiki/Plugin/notifyemail.pm @@ -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 diff --git a/doc/templates.mdwn b/doc/templates.mdwn index ca3f1412a..d0f891c21 100644 --- a/doc/templates.mdwn +++ b/doc/templates.mdwn @@ -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`, diff --git a/templates/notifyemail.tmpl b/templates/notifyemail.tmpl index 88972c36c..0852ad12b 100644 --- a/templates/notifyemail.tmpl +++ b/templates/notifyemail.tmpl @@ -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> ---- |