summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2009-01-25 15:42:13 -0500
committerJoey Hess <joey@gnu.kitenet.net>2009-01-25 15:42:13 -0500
commitc154fa5d6cd1620be7b139b08040740a1bdfafbc (patch)
treededb206dfb05f839c9196096f89bb92bf721947f
parent0cfb159bb0f14b769f7182b0ca13e019c5df6d04 (diff)
comments: If comment content checks fail, store the comment (in .ikiwiki/comments_pending) for moderator review.
-rw-r--r--IkiWiki/Plugin/comments.pm43
-rw-r--r--IkiWiki/Plugin/editpage.pm5
-rw-r--r--debian/changelog2
-rw-r--r--doc/plugins/comments.mdwn7
4 files changed, 43 insertions, 14 deletions
diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm
index 6d0e45a97..4d225b90a 100644
--- a/IkiWiki/Plugin/comments.pm
+++ b/IkiWiki/Plugin/comments.pm
@@ -380,14 +380,7 @@ sub sessioncgi ($$) {
IkiWiki::check_canedit($page, $cgi, $session);
$postcomment=0;
- # FIXME: rather a simplistic way to make the comments...
- my $i = 0;
- my $file;
- my $location;
- do {
- $i++;
- $location = "$page/$config{comments_pagename}$i";
- } while (-e "$config{srcdir}/$location._comment");
+ my $location=unique_comment_location($page, $config{srcdir});
my $content = "[[!_comment format=$type\n";
@@ -470,21 +463,33 @@ sub sessioncgi ($$) {
IkiWiki::checksessionexpiry($cgi, $session);
$postcomment=1;
- IkiWiki::check_content(content => $form->field('editcontent'),
+ my $ok=IkiWiki::check_content(content => $form->field('editcontent'),
subject => $form->field('subject'),
$config{comments_allowauthor} ? (
author => $form->field('author'),
url => $form->field('url'),
) : (),
page => $location,
- cgi => $cgi, session => $session
+ cgi => $cgi,
+ session => $session,
+ nonfatal => 1,
);
$postcomment=0;
-
- my $file = "$location._comment";
+
+ if (! $ok) {
+ my $penddir=$config{wikistatedir}."/comments_pending";
+ $location=unique_comment_location($page, $penddir);
+ writefile("$location._comment", $penddir, $content);
+ print IkiWiki::misctemplate(gettext(gettext("comment stored for moderation")),
+ "<p>".
+ gettext("Your comment will be posted after moderator review"),
+ "</p>");
+ exit;
+ }
# FIXME: could probably do some sort of graceful retry
# on error? Would require significant unwinding though
+ my $file = "$location._comment";
writefile($file, $config{srcdir}, $content);
my $conflict;
@@ -654,6 +659,20 @@ sub pagetemplate (@) {
}
}
+sub unique_comment_location ($) {
+ my $page=shift;
+ my $dir=shift;
+
+ my $location;
+ my $i = 0;
+ do {
+ $i++;
+ $location = "$page/$config{comments_pagename}$i";
+ } while (-e "$dir/$location._comment");
+
+ return $location;
+}
+
package IkiWiki::PageSpec;
sub match_postcomment ($$;@) {
diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm
index bba52e4fd..c206d96a4 100644
--- a/IkiWiki/Plugin/editpage.pm
+++ b/IkiWiki/Plugin/editpage.pm
@@ -105,11 +105,12 @@ sub check_content (@) {
$ok=1;
}
elsif (ref $ret eq 'CODE') {
- $ret->();
+ $ret->() unless $params{nonfatal};
$ok=0;
}
elsif (defined $ret) {
- error($ret);
+ error($ret) unless $params{nonfatal};
+ $ok=0;
}
}
diff --git a/debian/changelog b/debian/changelog
index 96089c101..002ae12c1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,6 +6,8 @@ ikiwiki (3.03) UNRELEASED; urgency=low
* Remove nonstandard css. Closes: #512378
* blogspam: Fix use of blogspam_options and blogspam_server
config settings.
+ * comments: If comment content checks fail, store the comment
+ (in .ikiwiki/comments_pending) for moderator review.
-- Joey Hess <joeyh@debian.org> Sun, 18 Jan 2009 14:50:57 -0500
diff --git a/doc/plugins/comments.mdwn b/doc/plugins/comments.mdwn
index 72b11af64..4cee3b9ad 100644
--- a/doc/plugins/comments.mdwn
+++ b/doc/plugins/comments.mdwn
@@ -41,3 +41,10 @@ There are some global options for the setup file:
specify a name for themselves, and the \[[!meta author]] and
\[[!meta authorurl]] directives will not be overridden by the comments
plugin
+
+## comment moderation
+
+If you enable the [[blogspam]] plugin, comments that appear spammy will be
+held for moderation. These comments are stored in
+`.ikiwiki/comments_pending/`, and can be deleted, or moved into the
+wiki's srcdir to be posted.