X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e2e1b1cd20928e2b80871e5daffaea60738d054e..0d0b87be5829e3e5671291a643bb4495a4cc7b99:/IkiWiki/Plugin/comments.pm

diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm
old mode 100755
new mode 100644
index bccb977e3..3ad2a0e13
--- a/IkiWiki/Plugin/comments.pm
+++ b/IkiWiki/Plugin/comments.pm
@@ -21,7 +21,8 @@ my %commentstate;
 sub import {
 	hook(type => "checkconfig", id => 'comments',  call => \&checkconfig);
 	hook(type => "getsetup", id => 'comments',  call => \&getsetup);
-	hook(type => "preprocess", id => 'comment', call => \&preprocess);
+	hook(type => "preprocess", id => 'comment', call => \&preprocess,
+		scan => 1);
 	hook(type => "preprocess", id => 'commentmoderation', call => \&preprocess_moderation);
 	# here for backwards compatability with old comments
 	hook(type => "preprocess", id => '_comment', call => \&preprocess);
@@ -143,22 +144,27 @@ sub preprocess {
 	}
 	$content =~ s/\\"/"/g;
 
-	if ($config{comments_allowdirectives}) {
-		$content = IkiWiki::preprocess($page, $params{destpage},
-			$content);
-	}
+	if (defined wantarray) {
+		if ($config{comments_allowdirectives}) {
+			$content = IkiWiki::preprocess($page, $params{destpage},
+				$content);
+		}
 
-	# no need to bother with htmlize if it's just HTML
-	$content = IkiWiki::htmlize($page, $params{destpage}, $format, $content)
-		if defined $format;
+		# no need to bother with htmlize if it's just HTML
+		$content = IkiWiki::htmlize($page, $params{destpage}, $format, $content)
+			if defined $format;
 
-	IkiWiki::run_hooks(sanitize => sub {
-		$content = shift->(
-			page => $page,
-			destpage => $params{destpage},
-			content => $content,
-		);
-	});
+		IkiWiki::run_hooks(sanitize => sub {
+			$content = shift->(
+				page => $page,
+				destpage => $params{destpage},
+				content => $content,
+			);
+		});
+	}
+	else {
+		IkiWiki::preprocess($page, $params{destpage}, $content, 1);
+	}
 
 	# set metadata, possibly overriding [[!meta]] directives from the
 	# comment itself
@@ -167,7 +173,6 @@ sub preprocess {
 	my $commentip;
 	my $commentauthor;
 	my $commentauthorurl;
-	my $commentauthoravatar;
 	my $commentopenid;
 	if (defined $params{username}) {
 		$commentuser = $params{username};
@@ -188,17 +193,6 @@ sub preprocess {
 
 			$commentauthor = $commentuser;
 		}
-
-                eval 'use Libravatar::URL';
-
-                if (! $@) {
-                    if (defined $commentopenid) {
-                        $commentauthoravatar = libravatar_url(openid => $commentopenid, https => $ENV{HTTPS});
-                    }
-                    elsif (my $email = IkiWiki::userinfo_get($commentuser, 'email')) {
-                        $commentauthoravatar = libravatar_url(email => $email, https => $ENV{HTTPS});
-                    }
-                }
 	}
 	else {
 		if (defined $params{ip}) {
@@ -212,7 +206,7 @@ sub preprocess {
 	$commentstate{$page}{commentip} = $commentip;
 	$commentstate{$page}{commentauthor} = $commentauthor;
 	$commentstate{$page}{commentauthorurl} = $commentauthorurl;
-	$commentstate{$page}{commentauthoravatar} = $commentauthoravatar;
+	$commentstate{$page}{commentauthoravatar} = $params{avatar};
 	if (! defined $pagestate{$page}{meta}{author}) {
 		$pagestate{$page}{meta}{author} = $commentauthor;
 	}
@@ -229,7 +223,7 @@ sub preprocess {
 			my $url=$params{url};
 
 			eval q{use URI::Heuristic}; 
-		  	if (! $@) {
+			if (! $@) {
 				$url=URI::Heuristic::uf_uristr($url);
 			}
 
@@ -451,6 +445,12 @@ sub editcomment ($$) {
 		}
 	}
 
+	my $avatar=getavatar($session->param('name'));
+	if (defined $avatar && length $avatar) {
+		$avatar =~ s/"/"/g;
+		$content .= " avatar=\"$avatar\"\n";
+	}
+
 	my $subject = $form->field('subject');
 	if (defined $subject && length $subject) {
 		$subject =~ s/"/"/g;
@@ -574,6 +574,31 @@ sub editcomment ($$) {
 	exit;
 }
 
+sub getavatar ($) {
+	my $user=shift;
+	
+	my $avatar;
+	eval q{use Libravatar::URL};
+	if (! $@) {
+		my $oiduser = eval { IkiWiki::openiduser($user) };
+		my $https=defined $config{url} && $config{url}=~/^https:/;
+
+		if (defined $oiduser) {
+			eval {
+				$avatar = libravatar_url(openid => $user, https => $https);
+			}
+		}
+		if (! defined $avatar &&
+		    (my $email = IkiWiki::userinfo_get($user, 'email'))) {
+			eval {
+				$avatar = libravatar_url(email => $email, https => $https);
+			}
+		}
+	}
+	return $avatar;
+}
+
+
 sub commentmoderation ($$) {
 	my $cgi=shift;
 	my $session=shift;