X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/6c297c40974648f588d2c8118cc579d35592383d..6c546c8f3182668c6d21d578b789674894f18c39:/IkiWiki/Plugin/notifyemail.pm diff --git a/IkiWiki/Plugin/notifyemail.pm b/IkiWiki/Plugin/notifyemail.pm index 926761d94..079bb10d4 100644 --- a/IkiWiki/Plugin/notifyemail.pm +++ b/IkiWiki/Plugin/notifyemail.pm @@ -6,7 +6,6 @@ use strict; use IkiWiki 3.00; sub import { - 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); @@ -20,25 +19,23 @@ sub getsetup () { }, } -sub formbuilder_setup (@) { +sub formbuilder (@) { my %params=@_; - my $form=$params{form}; return unless $form->title eq "preferences"; my $session=$params{session}; + my $username=$session->param("name"); $form->field(name => "subscriptions", size => 50, fieldset => "preferences", - comment => "(".htmllink("", "", "ikiwiki/PageSpec", noimageinline => 1).")", - value => getsubscriptions($session->param("name"))); -} - -sub formbuilder (@) { - my %params=@_; - my $form=$params{form}; - return unless $form->title eq "preferences" && - $form->submitted eq "Save Preferences" && $form->validate && - defined $form->field("subscriptions"); - setsubscriptions($form->field('name'), $form->field('subscriptions')); + comment => "(".htmllink("", "", "ikiwiki/PageSpec", noimageinline => 1).")"); + if (! $form->submitted) { + $form->field(name => "subscriptions", force => 1, + value => getsubscriptions($username)); + } + elsif ($form->submitted eq "Save Preferences" && $form->validate && + defined $form->field("subscriptions")) { + setsubscriptions($username, scalar $form->field('subscriptions')); + } } sub getsubscriptions ($) { @@ -65,9 +62,23 @@ sub subscribe ($$) { length $pagespec ? $pagespec." or ".$addpagespec : $addpagespec); } +# Called by other plugins to subscribe an email to a pagespec. +sub anonsubscribe ($$) { + my $email=shift; + my $addpagespec=shift; + if (IkiWiki::Plugin::passwordauth->can("anonuser")) { + my $user=IkiWiki::Plugin::passwordauth::anonuser($email); + if (! defined $user) { + error(gettext("Cannot subscribe your email address without logging in.")); + } + subscribe($user, $addpagespec); + } +} + sub notify (@) { my @files=@_; return unless @files; + return if $config{rebuild}; eval q{use Mail::Sendmail}; error $@ if $@; @@ -126,11 +137,20 @@ sub notify (@) { if (pagetype($file) eq '_comment') { $subject=gettext("comment notification:")." ".$pagedesc; } + my $prefsurl=IkiWiki::cgiurl_abs(do => 'prefs'); + if (IkiWiki::Plugin::passwordauth->can("anonusertoken")) { + my $token=IkiWiki::Plugin::passwordauth::anonusertoken($userinfo->{$user}); + $prefsurl=IkiWiki::cgiurl_abs( + do => 'tokenauth', + name => $user, + token => $token, + ) if defined $token; + } my $template=template("notifyemail.tmpl"); $template->param( wikiname => $config{wikiname}, url => $url, - prefsurl => $config{cgiurl}."?do=prefs", + prefsurl => $prefsurl, showcontent => $showcontent, content => $content, );