From bb44bac175c530a2b6099011e4dc25acc0da4b9e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 30 Mar 2011 11:13:31 -0400 Subject: [PATCH] look up avatar at comment post time There is a tension between looking up the avatar at post time and build time. I have not yet decided which is better. Lookup at build time has the benefit that if a user changes their email address, or sets up their own federated libravatar server, on rebuild their new avatar will show up. It also allows getting a https version of the avatar easily if the site was using http but was changed to use https. And it can look up avatars for posts that have already been made. Which is a nice thing, especially as we roll this out, eh? But it has a drawback, that it depends on the sessiondb contents for emails and so rebuilding a site w/o that will lose info. And, it means dns lookups every time a comment is rendered. A page with a lot of comments on it would render them all whenever another is posted or the page is changed, and that could significantly slow things down. (This could be amelorated by caching the lookups.) Since I'm undecided, I have moved it into a function that could be called either way. Currently looking up only at post time. --- IkiWiki/Plugin/comments.pm | 51 ++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index cb0196728..9fb81d15a 100755 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -167,7 +167,6 @@ sub preprocess { my $commentip; my $commentauthor; my $commentauthorurl; - my $commentauthoravatar; my $commentopenid; if (defined $params{username}) { $commentuser = $params{username}; @@ -188,23 +187,6 @@ sub preprocess { $commentauthor = $commentuser; } - - eval q{use Libravatar::URL}; - if (! $@) { - my $https=defined $config{url} && $config{url}=~/^https:/; - - if (defined $commentopenid) { - eval { - $commentauthoravatar = libravatar_url(openid => $commentopenid, https => $https); - } - } - if (! defined $commentauthoravatar && - (my $email = IkiWiki::userinfo_get($commentuser, 'email'))) { - eval { - $commentauthoravatar = libravatar_url(email => $email, https => $https); - } - } - } } else { if (defined $params{ip}) { @@ -218,7 +200,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; } @@ -457,6 +439,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; @@ -580,6 +568,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; -- 2.39.5