]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/comments.pm
bugfix
[ikiwiki.git] / IkiWiki / Plugin / comments.pm
index 0a808aaeff9de1fb99dbe9cb2a150517cf59c48f..077c4776bb85e68337bf356093e20a0b5c087290 100644 (file)
@@ -473,7 +473,7 @@ sub editcomment ($$) {
                $postcomment=0;
 
                if (! $ok) {
-                       $location=unique_comment_location($page, $content, $config{srcdir});
+                       $location=unique_comment_location($page, $content, $config{srcdir}, "._comment_pending");
                        writefile("$location._comment_pending", $config{srcdir}, $content);
 
                        # Refresh so anything that deals with pending
@@ -557,7 +557,7 @@ sub commentmoderation ($$) {
                my %vars=$cgi->Vars;
                my $added=0;
                foreach my $id (keys %vars) {
-                       if ($id =~ /(.*)\Q._comment(?:_pending)?\E$/) {
+                       if ($id =~ /(.*)\._comment(?:_pending)?$/) {
                                my $action=$cgi->param($id);
                                next if $action eq 'Defer' && ! $rejectalldefer;
 
@@ -621,7 +621,7 @@ sub commentmoderation ($$) {
                        id => $id,
                        view => $preview,
                }
-       } sort { $b->[1] <=> $a->[1] } comments_pending();
+       } sort { $b->[2] <=> $a->[2] } comments_pending();
 
        my $template=template("commentmoderation.tmpl");
        $template->param(
@@ -858,22 +858,20 @@ sub num_comments ($$) {
        return @comments;
 }
 
-sub unique_comment_location ($$$) {
+sub unique_comment_location ($$$$) {
        my $page=shift;
-
        eval q{use Digest::MD5 'md5_hex'};
        error($@) if $@;
        my $content_md5=md5_hex(Encode::encode_utf8(shift));
-
        my $dir=shift;
+       my $ext=shift || "._comment";
 
        my $location;
        my $i = num_comments($page, $dir);
        do {
                $i++;
                $location = "$page/$config{comments_pagename}${i}_${content_md5}";
-       } while (-e "$dir/$location._comment" ||
-                -e "$dir/$location._comment_pending");
+       } while (-e "$dir/$location$ext");
 
        return $location;
 }
@@ -907,9 +905,9 @@ sub match_comment ($$;@) {
        my $glob = shift;
 
        my $match=match_glob($page, "$glob/*", internal => 1, @_);
-       if ($match) {
+       if ($match && exists $IkiWiki::pagesources{$page}) {
                my $type=IkiWiki::pagetype($IkiWiki::pagesources{$page});
-               if ($type ne "_comment") {
+               if (defined $type && $type ne "_comment") {
                        return IkiWiki::FailReason->new("$page is not a comment");
                }
        }
@@ -921,9 +919,9 @@ sub match_comment_pending ($$;@) {
        my $glob = shift;
 
        my $match=match_glob($page, "$glob/*", internal => 1, @_);
-       if ($match) {
+       if ($match && $IkiWiki::pagesources{$page}) {
                my $type=IkiWiki::pagetype($IkiWiki::pagesources{$page});
-               if ($type ne "_comment_pending") {
+               if (defined $type && $type ne "_comment_pending") {
                        return IkiWiki::FailReason->new("$page is not a pending comment");
                }
        }