hook(type => "htmlize", id => "_comment", call => \&htmlize);
hook(type => "pagetemplate", id => "comments", call => \&pagetemplate);
hook(type => "cgi", id => "comments", call => \&linkcgi);
+ hook(type => "formbuilder_setup", id => "comments", call => \&formbuilder_setup);
IkiWiki::loadplugin("inline");
}
# - this means that if they do, rocks fall and everyone dies
if ($form->submitted eq PREVIEW) {
- $form->tmpl_param(page_preview =>
- previewcomment($content, $location, $page, time));
+ my $preview=previewcomment($content, $location, $page, time);
+ IkiWiki::run_hooks(format => sub {
+ $preview = shift->(page => $page,
+ content => $preview);
+ });
+ $form->tmpl_param(page_preview => $preview);
}
else {
$form->tmpl_param(page_preview => "");
if (defined $cgi->param('sid')) {
IkiWiki::checksessionexpiry($cgi, $session);
+ my $rejectalldefer=$cgi->param('rejectalldefer');
+
my %vars=$cgi->Vars;
my $added=0;
foreach my $id (keys %vars) {
if ($id =~ /(.*)\Q._comment\E$/) {
my $action=$cgi->param($id);
- next if $action eq 'Defer';
+ next if $action eq 'Defer' && ! $rejectalldefer;
# Make sure that the id is of a legal
# pending comment before untainting.
}
my @comments=map {
- my $id=$_;
+ my ($id, $ctime)=@{$_};
my $file="$config{wikistatedir}/comments_pending/$id";
my $content=readfile($file);
- my $ctime=(stat($file))[10];
+ my $preview=previewcomment($content, $id,
+ IkiWiki::dirname($_), $ctime);
{
id => $id,
- view => previewcomment($content, $id,
- IkiWiki::dirname($_), $ctime),
+ view => $preview,
}
- } comments_pending();
+ } sort { $b->[1] <=> $a->[1] } comments_pending();
my $template=template("commentmoderation.tmpl");
$template->param(
comments => \@comments,
);
IkiWiki::printheader($session);
- print IkiWiki::misctemplate(gettext("comment moderation"), $template->output);
+ my $out=$template->output;
+ IkiWiki::run_hooks(format => sub {
+ $out = shift->(page => "", content => $out);
+ });
+ print IkiWiki::misctemplate(gettext("comment moderation"), $out);
exit;
}
+sub formbuilder_setup (@) {
+ my %params=@_;
+
+ my $form=$params{form};
+ if ($form->title eq "preferences") {
+ push @{$params{buttons}}, "Comment Moderation";
+ if ($form->submitted && $form->submitted eq "Comment Moderation") {
+ commentmoderation($params{cgi}, $params{session});
+ }
+ }
+}
+
sub comments_pending () {
my $dir="$config{wikistatedir}/comments_pending/";
return unless -d $dir;
$File::Find::prune=0;
my ($f)=/$config{wiki_file_regexp}/; # untaint
if (defined $f && $f =~ /\Q._comment\E$/) {
+ my $ctime=(stat($f))[10];
$f=~s/^\Q$dir\E\/?//;
- push @ret, $f;
+ push @ret, [$f, $ctime];
}
}
}
my $preview = IkiWiki::htmlize($location, $page, '_comment',
IkiWiki::linkify($location, $page,
- IkiWiki::preprocess($location, $page,
- IkiWiki::filter($location,
- $page, $content),
- 0, 1)));
- IkiWiki::run_hooks(format => sub {
- $preview = shift->(page => $page,
- content => $preview);
- });
+ IkiWiki::preprocess($location, $page,
+ IkiWiki::filter($location, $page, $content), 0, 1)));
my $template = template("comment.tmpl");
$template->param(content => $preview);