X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/a63929f6cc7778ffc4ba57d784cdf2206ec650c7..7a016ad4185eb9059add6eef1ffe2f9ff09ea684:/IkiWiki/Plugin/moderatedcomments.pm

diff --git a/IkiWiki/Plugin/moderatedcomments.pm b/IkiWiki/Plugin/moderatedcomments.pm
index afe1ceedf..5957833fc 100644
--- a/IkiWiki/Plugin/moderatedcomments.pm
+++ b/IkiWiki/Plugin/moderatedcomments.pm
@@ -17,10 +17,11 @@ sub getsetup () {
 			rebuild => 0,
 			section => "auth",
 		},
-		moderate_users => {
-			type => 'boolean',
-			example => 1,
-			description => 'Moderate comments of logged-in users?',
+		moderate_pagespec => {
+			type => 'pagespec',
+			example => '*',
+			description => 'PageSpec matching users or comment locations to moderate',
+			link => 'ikiwiki/PageSpec',
 			safe => 1,
 			rebuild => 0,
 		},
@@ -32,14 +33,32 @@ sub checkcontent (@) {
 	# only handle comments	
 	return undef unless pagespec_match($params{page}, "postcomment(*)",
 	                	location => $params{page});
+	
+	# backwards compatability
+	if (exists $config{moderate_users} &&
+	    ! exists $config{moderate_pagespec}) {
+		$config{moderate_pagespec} = $config{moderate_users}
+			? "!admin()"
+			: "!user(*)";
+	}
 
-	# admins and maybe users can comment w/o moderation
-	my $session=$params{session};
-	my $user=$session->param("name") if $session;
-	return undef if defined $user && (IkiWiki::is_admin($user) ||
-		(exists $config{moderate_users} && ! $config{moderate_users}));
+	# default is to moderate all except admins
+	if (! exists $config{moderate_pagespec}) {
+		$config{moderate_pagespec}="!admin()";
+	}
 
-	return gettext("comment needs moderation");
+	my $session=$params{session};
+	my $user=$session->param("name");
+	if (pagespec_match($params{page}, $config{moderate_pagespec},
+			location => $params{page},
+			(defined $user ? (user => $user) : ()),
+			(defined $session->remote_addr() ? (ip => $session->remote_addr()) : ()),
+	)) {
+		return gettext("comment needs moderation");
+	}
+	else {
+		return undef;
+	}
 }
 
 1