aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/comments.pm
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2012-04-02 13:39:29 -0400
committerJoey Hess <joey@kitenet.net>2012-04-02 13:45:39 -0400
commitc885ec66e0ffeefb41462b87707f5e80c0ffa993 (patch)
tree50d6bef132f6d057a42d2a7e69be68b28bf19f7e /IkiWiki/Plugin/comments.pm
parentc16b1e638e3ccc936ec24daa8419d64c4f6d5016 (diff)
downloadikiwiki-c885ec66e0ffeefb41462b87707f5e80c0ffa993.tar
ikiwiki-c885ec66e0ffeefb41462b87707f5e80c0ffa993.tar.gz
allow users to subscribe to comments w/o registering
Technically, when the user does this, a passwordless account is created for them. The notify mails include a login url, and once logged in that way, the user can enter a password to get a regular account (although one with an annoying username). This all requires the passwordauth plugin is enabled. A future enhancement could be to split the passwordless user concept out into a separate plugin.
Diffstat (limited to 'IkiWiki/Plugin/comments.pm')
-rw-r--r--IkiWiki/Plugin/comments.pm42
1 files changed, 30 insertions, 12 deletions
diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm
index c2b2d919d..0d5e3c078 100644
--- a/IkiWiki/Plugin/comments.pm
+++ b/IkiWiki/Plugin/comments.pm
@@ -302,7 +302,7 @@ sub editcomment ($$) {
my @buttons = (POST_COMMENT, PREVIEW, CANCEL);
my $form = CGI::FormBuilder->new(
fields => [qw{do sid page subject editcontent type author
- url subscribe}],
+ email url subscribe anonsubscribe}],
charset => 'utf-8',
method => 'POST',
required => [qw{editcontent}],
@@ -349,24 +349,33 @@ sub editcomment ($$) {
my $username=$session->param('name');
$form->tmpl_param(username => $username);
- if (defined $username && IkiWiki::Plugin::notifyemail->can("subscribe")) {
- $form->field(name => "subscribe",
- options => [gettext("email replies to me")]);
- }
- else {
- $form->field(name => "subscribe", type => 'hidden');
+
+ $form->field(name => "subscribe", type => 'hidden');
+ $form->field(name => "anonsubscribe", type => 'hidden');
+ if (IkiWiki::Plugin::notifyemail->can("subscribe")) {
+ if (defined $username) {
+ $form->field(name => "subscribe", type => "checkbox",
+ options => [gettext("email replies to me")]);
+ }
+ elsif (IkiWiki::Plugin::passwordauth->can("anonuser")) {
+ $form->field(name => "anonsubscribe", type => "checkbox",
+ options => [gettext("email replies to me")]);
+ }
}
if ($config{comments_allowauthor} and
! defined $session->param('name')) {
$form->tmpl_param(allowauthor => 1);
$form->field(name => 'author', type => 'text', size => '40');
+ $form->field(name => 'email', type => 'text', size => '40');
$form->field(name => 'url', type => 'text', size => '40');
}
else {
$form->tmpl_param(allowauthor => 0);
$form->field(name => 'author', type => 'hidden', value => '',
force => 1);
+ $form->field(name => 'email', type => 'hidden', value => '',
+ force => 1);
$form->field(name => 'url', type => 'hidden', value => '',
force => 1);
}
@@ -500,10 +509,18 @@ sub editcomment ($$) {
if ($form->submitted eq POST_COMMENT && $form->validate) {
IkiWiki::checksessionexpiry($cgi, $session);
- if (defined $username && length $form->field("subscribe") &&
- IkiWiki::Plugin::notifyemail->can("subscribe")) {
- IkiWiki::Plugin::notifyemail::subscribe($username,
- "comment($page)");
+ if (IkiWiki::Plugin::notifyemail->can("subscribe")) {
+ my $subspec="comment($page)";
+ if (defined $username &&
+ length $form->field("subscribe")) {
+ IkiWiki::Plugin::notifyemail::subscribe(
+ $username, $subspec);
+ }
+ elsif (length $form->field("email") &&
+ length $form->field("anonsubscribe")) {
+ IkiWiki::Plugin::notifyemail::anonsubscribe(
+ $form->field("email"), $subspec);
+ }
}
$postcomment=1;
@@ -590,7 +607,8 @@ sub editcomment ($$) {
sub getavatar ($) {
my $user=shift;
-
+ return undef unless defined $user;
+
my $avatar;
eval q{use Libravatar::URL};
if (! $@) {