summaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2011-03-30 11:13:31 -0400
committerJoey Hess <joey@kitenet.net>2011-03-30 11:24:01 -0400
commitbb44bac175c530a2b6099011e4dc25acc0da4b9e (patch)
tree75f82f292ca50d78b7b68a056c64ddeb2defcb7b /IkiWiki
parent51e8a4eeda24f0a2cfdb0e579ddf1e6df9972544 (diff)
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.
Diffstat (limited to 'IkiWiki')
-rwxr-xr-xIkiWiki/Plugin/comments.pm51
1 files 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/"/&quot;/g;
+ $content .= " avatar=\"$avatar\"\n";
+ }
+
my $subject = $form->field('subject');
if (defined $subject && length $subject) {
$subject =~ s/"/&quot;/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;