X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/7dd110ba51c738e249ea974b71f85477c543e5bc..47954c09ee9c200548824371a896da8bbda0443b:/IkiWiki/Plugin/comments.pm?ds=sidebyside diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index b1d8578ae..d7666c852 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -35,6 +35,7 @@ sub import { # Load goto to fix up user page links for logged-in commenters IkiWiki::loadplugin("goto"); IkiWiki::loadplugin("inline"); + IkiWiki::loadplugin("transient"); } sub getsetup () { @@ -437,6 +438,16 @@ sub editcomment ($$) { $page)); } + # There's no UI to get here, but someone might construct the URL, + # leading to a comment that exists in the repository but isn't + # shown + if (!pagespec_match($page, $config{comments_pagespec}, + location => $page)) { + error(sprintf(gettext( + "comments on page '%s' are not allowed"), + $page)); + } + if (pagespec_match($page, $config{comments_closed_pagespec}, location => $page)) { error(sprintf(gettext( @@ -457,12 +468,15 @@ sub editcomment ($$) { $username =~ s/"/"/g; $content .= " username=\"$username\"\n"; } + if (defined $session->param('nickname')) { my $nickname = $session->param('nickname'); $nickname =~ s/"/"/g; $content .= " nickname=\"$nickname\"\n"; } - elsif (defined $session->remote_addr()) { + + if (!(defined $session->param('name') || defined $session->param('nickname')) && + defined $session->remote_addr()) { $content .= " ip=\"".$session->remote_addr()."\"\n"; } @@ -493,8 +507,7 @@ sub editcomment ($$) { $subject = "comment ".(num_comments($page, $config{srcdir}) + 1); } $content .= " subject=\"$subject\"\n"; - - $content .= " date=\"" . strftime_utf8('%Y-%m-%dT%H:%M:%SZ', gmtime) . "\"\n"; + $content .= " " . commentdate() . "\n"; my $editcontent = $form->field('editcontent'); $editcontent="" if ! defined $editcontent; @@ -555,8 +568,8 @@ sub editcomment ($$) { $postcomment=0; if (! $ok) { - $location=unique_comment_location($page, $content, $config{srcdir}, "._comment_pending"); - writefile("$location._comment_pending", $config{srcdir}, $content); + $location=unique_comment_location($page, $content, $IkiWiki::Plugin::transient::transientdir, "._comment_pending"); + writefile("$location._comment_pending", $IkiWiki::Plugin::transient::transientdir, $content); # Refresh so anything that deals with pending # comments can be updated. @@ -622,6 +635,10 @@ sub editcomment ($$) { exit; } +sub commentdate () { + "date=\"" . strftime_utf8('%Y-%m-%dT%H:%M:%SZ', gmtime) . "\""; +} + sub getavatar ($) { my $user=shift; return undef unless defined $user; @@ -681,12 +698,17 @@ sub commentmoderation ($$) { } my $page=IkiWiki::dirname($f); - my $file="$config{srcdir}/$f"; - my $filedir=$config{srcdir}; + my $filedir=$IkiWiki::Plugin::transient::transientdir; + my $file="$filedir/$f"; if (! -e $file) { # old location - $file="$config{wikistatedir}/comments_pending/".$f; - $filedir="$config{wikistatedir}/comments_pending"; + $file="$config{srcdir}/$f"; + $filedir=$config{srcdir}; + if (! -e $file) { + # older location + $file="$config{wikistatedir}/comments_pending/".$f; + $filedir="$config{wikistatedir}/comments_pending"; + } } if ($action eq 'Accept') { @@ -800,6 +822,8 @@ sub comments_pending () { chdir($origdir) || die "chdir $origdir: $!"; }; + $find_comments->($IkiWiki::Plugin::transient::transientdir, "._comment_pending"); + # old location $find_comments->($config{srcdir}, "._comment_pending"); # old location $find_comments->("$config{wikistatedir}/comments_pending/", @@ -991,7 +1015,7 @@ sub num_comments ($$) { return int @comments; } -sub unique_comment_location ($$$$) { +sub unique_comment_location ($$$;$) { my $page=shift; eval q{use Digest::MD5 'md5_hex'}; error($@) if $@;