X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/a5889912b386eaa43774907c3844c90e3e3ca7c8..38c92e63bb012da98019faf9bc11037c5cbd5a99:/IkiWiki/Plugin/comments.pm?ds=inline diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index 6bd18a5cf..8d333f05f 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -9,6 +9,7 @@ use warnings; use strict; use IkiWiki 2.00; use Encode; +use POSIX qw(strftime); use constant PREVIEW => "Preview"; use constant POST_COMMENT => "Post comment"; @@ -17,7 +18,7 @@ use constant CANCEL => "Cancel"; 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); hook(type => "sessioncgi", id => 'comment', call => \&sessioncgi); hook(type => "htmlize", id => "_comment", call => \&htmlize); hook(type => "pagetemplate", id => "comments", call => \&pagetemplate); @@ -25,6 +26,68 @@ sub import { #{{{ IkiWiki::loadplugin("inline"); } # }}} +sub getsetup () { #{{{ + return + plugin => { + safe => 1, + rebuild => 1, + }, + # Pages where comments are shown, but new comments are not + # allowed, will show "Comments are closed". + comments_shown_pagespec => { + type => 'pagespec', + example => 'blog/*', + default => '', + description => 'PageSpec for pages where comments will be shown inline', + link => 'ikiwiki/PageSpec', + safe => 1, + rebuild => 1, + }, + comments_open_pagespec => { + type => 'pagespec', + example => 'blog/* and created_after(close_old_comments)', + default => '', + description => 'PageSpec for pages where new comments can be posted', + link => 'ikiwiki/PageSpec', + safe => 1, + rebuild => 1, + }, + comments_pagename => { + type => 'string', + example => 'comment_', + default => 'comment_', + description => 'Base name for comments, e.g. "comment_" for pages like "sandbox/comment_12"', + safe => 0, # manual page moving required + rebuild => undef, + }, + comments_allowdirectives => { + type => 'boolean', + default => 0, + example => 0, + description => 'Interpret directives in comments?', + safe => 1, + rebuild => 0, + }, + comments_allowauthor => { + type => 'boolean', + default => 0, + example => 0, + description => 'Allow anonymous commenters to set an author name?', + safe => 1, + rebuild => 0, + }, + comments_commit => { + type => 'boolean', + example => 1, + default => 1, + description => 'commit comments to the VCS', + # old uncommitted comments are likely to cause + # confusion if this is changed + safe => 0, + rebuild => 0, + }, +} #}}} + sub htmlize { # {{{ my %params = @_; return $params{content}; @@ -89,12 +152,10 @@ sub preprocess { # {{{ ($commentauthorurl, $commentauthor) = linkuser($params{username}); } - elsif (defined $params{ip}) { - $commentip = $params{ip}; - $commentauthor = sprintf( - gettext("Anonymous (IP: %s)"), $params{ip}); - } else { + if (defined $params{ip}) { + $commentip = $params{ip}; + } $commentauthor = gettext("Anonymous"); } @@ -146,68 +207,6 @@ sub preprocess { # {{{ return $content; } # }}} -sub getsetup () { #{{{ - return - plugin => { - safe => 1, - rebuild => 1, - }, - # Pages where comments are shown, but new comments are not - # allowed, will show "Comments are closed". - comments_shown_pagespec => { - type => 'pagespec', - example => 'blog/*', - default => '', - description => 'PageSpec for pages where comments will be shown inline', - link => 'ikiwiki/PageSpec', - safe => 1, - rebuild => 1, - }, - comments_open_pagespec => { - type => 'pagespec', - example => 'blog/* and created_after(close_old_comments)', - default => '', - description => 'PageSpec for pages where new comments can be posted', - link => 'ikiwiki/PageSpec', - safe => 1, - rebuild => 1, - }, - comments_pagename => { - type => 'string', - example => 'comment_', - default => 'comment_', - description => 'Base name for comments, e.g. "comment_" for pages like "sandbox/comment_12"', - safe => 0, # manual page moving will required - rebuild => undef, - }, - comments_allowdirectives => { - type => 'boolean', - default => 0, - example => 0, - description => 'Interpret directives in comments?', - safe => 1, - rebuild => 0, - }, - comments_allowauthor => { - type => 'boolean', - default => 0, - example => 0, - description => 'Allow anonymous commenters to set an author name?', - safe => 1, - rebuild => 0, - }, - comments_commit => { - type => 'boolean', - example => 1, - default => 1, - description => 'commit comments to the VCS', - # old uncommitted comments are likely to cause - # confusion if this is changed - safe => 0, - rebuild => 0, - }, -} #}}} - sub checkconfig () { #{{{ $config{comments_commit} = 1 unless defined $config{comments_commit}; $config{comments_pagename} = 'comment_' @@ -302,7 +301,7 @@ sub sessioncgi ($$) { #{{{ my $type = $form->param('type'); if (defined $type && length $type && $IkiWiki::hooks{htmlize}{$type}) { - $type = possibly_foolish_untaint($type); + $type = IkiWiki::possibly_foolish_untaint($type); } else { $type = $config{default_pageext}; @@ -405,7 +404,7 @@ sub sessioncgi ($$) { #{{{ my $anchor = "${comments_pagename}${i}"; $editcontent =~ s/"/\\"/g; - my $content = "[[!comment format=$type\n"; + my $content = "[[!_comment format=$type\n"; # FIXME: handling of double quotes probably wrong? if (defined $session->param('name')) { @@ -434,10 +433,12 @@ sub sessioncgi ($$) { #{{{ } my $subject = $form->field('subject'); - $subject =~ s/"/"/g; - $content .= " subject=\"$subject\"\n"; + if (length $subject) { + $subject =~ s/"/"/g; + $content .= " subject=\"$subject\"\n"; + } - $content .= " date=\"" . IkiWiki::formattime(time, '%X %x') . "\"\n"; + $content .= " date=\"" . decode_utf8(strftime('%Y-%m-%dT%H:%M:%SZ', gmtime)) . "\"\n"; $content .= " content=\"\"\"\n$editcontent\n\"\"\"]]\n"; @@ -558,6 +559,8 @@ sub pagetemplate (@) { #{{{ reverse => 'yes', page => $page, destpage => $params{destpage}, + feedfile => 'comments', + emptyfeeds => 'no', ); $comments = IkiWiki::preprocess_inline(@args); }