diff options
author | Joey Hess <joey@kitenet.net> | 2012-03-28 18:52:11 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2012-03-28 18:52:11 -0400 |
commit | a22be4eef0781548158fdb22bcbfe23ab6581ff6 (patch) | |
tree | 2c7e0d08f2396383dea8d71721b2789fd691c64f /IkiWiki | |
parent | d68d25526816d40048ca47ad360304bce162b659 (diff) | |
download | ikiwiki-a22be4eef0781548158fdb22bcbfe23ab6581ff6.tar ikiwiki-a22be4eef0781548158fdb22bcbfe23ab6581ff6.tar.gz |
finish notifyemail plugin
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/notifyemail.pm (renamed from IkiWiki/Plugin/changemail.pm) | 67 |
1 files changed, 43 insertions, 24 deletions
diff --git a/IkiWiki/Plugin/changemail.pm b/IkiWiki/Plugin/notifyemail.pm index c112502a4..192e8d7a3 100644 --- a/IkiWiki/Plugin/changemail.pm +++ b/IkiWiki/Plugin/notifyemail.pm @@ -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 |