comments: Duplicate logic and CGI hook from recentchanges to link user pages correctly
authorSimon McVittie <smcv@ http://smcv.pseudorandom.co.uk/>
Sun, 23 Nov 2008 18:31:11 +0000 (18:31 +0000)
committerSimon McVittie <smcv@ http://smcv.pseudorandom.co.uk/>
Thu, 11 Dec 2008 21:14:05 +0000 (21:14 +0000)
IkiWiki/Plugin/comments.pm

index 45b13168ab9a65694f70028973440a27c9598195..8b82341c078503b724db14b0dd1ecd113a2d9ff4 100644 (file)
@@ -20,6 +20,7 @@ sub import { #{{{
        hook(type => "sessioncgi", id => 'comment', call => \&sessioncgi);
        hook(type => "htmlize", id => "_comment", call => \&htmlize);
        hook(type => "pagetemplate", id => "comments", call => \&pagetemplate);
+       hook(type => "cgi", id => "comments", call => \&linkcgi);
        IkiWiki::loadplugin("inline");
        IkiWiki::loadplugin("mdwn");
 } # }}}
@@ -157,7 +158,36 @@ sub getcgiuser ($) { # {{{
        return $user;
 } # }}}
 
-# FIXME: logic adapted from recentchanges, should be common code?
+# This is exactly the same as recentchanges_link :-(
+sub linkcgi ($) { #{{{
+       my $cgi=shift;
+       if (defined $cgi->param('do') && $cgi->param('do') eq "commenter") {
+
+               my $page=decode_utf8($cgi->param("page"));
+               if (!defined $page) {
+                       error("missing page parameter");
+               }
+
+               IkiWiki::loadindex();
+
+               my $link=bestlink("", $page);
+               if (! length $link) {
+                       print "Content-type: text/html\n\n";
+                       print IkiWiki::misctemplate(gettext(gettext("missing page")),
+                               "<p>".
+                               sprintf(gettext("The page %s does not exist."),
+                                       htmllink("", "", $page)).
+                               "</p>");
+               }
+               else {
+                       IkiWiki::redirect($cgi, urlto($link, undef, 1));
+               }
+
+               exit;
+       }
+}
+
+# FIXME: basically the same logic as recentchanges
 # returns (author URL, pretty-printed version)
 sub linkuser ($) { # {{{
        my $user = shift;
@@ -166,11 +196,15 @@ sub linkuser ($) { # {{{
        if (defined $oiduser) {
                return ($user, $oiduser);
        }
+       # FIXME: it'd be good to avoid having such a link for anonymous
+       # posts
        else {
-               my $page = bestlink('', (length $config{userdir}
-                               ? "$config{userdir}/"
-                               : "").$user);
-               return (urlto($page, undef, 1), $user);
+               return (IkiWiki::cgiurl(
+                               do => 'commenter',
+                               page => (length $config{userdir}
+                                       ? "$config{userdir}/"
+                                       : "")
+                       ).$user, $user);
        }
 } # }}}