comments: If comment content checks fail, store the comment (in .ikiwiki/comments_pending) for moderator review.

master
Joey Hess 2009-01-25 15:42:13 -05:00
parent 0cfb159bb0
commit c154fa5d6c
4 changed files with 43 additions and 14 deletions

View File

@ -380,14 +380,7 @@ sub sessioncgi ($$) {
IkiWiki::check_canedit($page, $cgi, $session); IkiWiki::check_canedit($page, $cgi, $session);
$postcomment=0; $postcomment=0;
# FIXME: rather a simplistic way to make the comments... my $location=unique_comment_location($page, $config{srcdir});
my $i = 0;
my $file;
my $location;
do {
$i++;
$location = "$page/$config{comments_pagename}$i";
} while (-e "$config{srcdir}/$location._comment");
my $content = "[[!_comment format=$type\n"; my $content = "[[!_comment format=$type\n";
@ -470,21 +463,33 @@ sub sessioncgi ($$) {
IkiWiki::checksessionexpiry($cgi, $session); IkiWiki::checksessionexpiry($cgi, $session);
$postcomment=1; $postcomment=1;
IkiWiki::check_content(content => $form->field('editcontent'), my $ok=IkiWiki::check_content(content => $form->field('editcontent'),
subject => $form->field('subject'), subject => $form->field('subject'),
$config{comments_allowauthor} ? ( $config{comments_allowauthor} ? (
author => $form->field('author'), author => $form->field('author'),
url => $form->field('url'), url => $form->field('url'),
) : (), ) : (),
page => $location, page => $location,
cgi => $cgi, session => $session cgi => $cgi,
session => $session,
nonfatal => 1,
); );
$postcomment=0; $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 # FIXME: could probably do some sort of graceful retry
# on error? Would require significant unwinding though # on error? Would require significant unwinding though
my $file = "$location._comment";
writefile($file, $config{srcdir}, $content); writefile($file, $config{srcdir}, $content);
my $conflict; 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; package IkiWiki::PageSpec;
sub match_postcomment ($$;@) { sub match_postcomment ($$;@) {

View File

@ -105,11 +105,12 @@ sub check_content (@) {
$ok=1; $ok=1;
} }
elsif (ref $ret eq 'CODE') { elsif (ref $ret eq 'CODE') {
$ret->(); $ret->() unless $params{nonfatal};
$ok=0; $ok=0;
} }
elsif (defined $ret) { elsif (defined $ret) {
error($ret); error($ret) unless $params{nonfatal};
$ok=0;
} }
} }

2
debian/changelog vendored
View File

@ -6,6 +6,8 @@ ikiwiki (3.03) UNRELEASED; urgency=low
* Remove nonstandard css. Closes: #512378 * Remove nonstandard css. Closes: #512378
* blogspam: Fix use of blogspam_options and blogspam_server * blogspam: Fix use of blogspam_options and blogspam_server
config settings. 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 -- Joey Hess <joeyh@debian.org> Sun, 18 Jan 2009 14:50:57 -0500

View File

@ -41,3 +41,10 @@ There are some global options for the setup file:
specify a name for themselves, and the \[[!meta author]] and specify a name for themselves, and the \[[!meta author]] and
\[[!meta authorurl]] directives will not be overridden by the comments \[[!meta authorurl]] directives will not be overridden by the comments
plugin 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.