summaryrefslogtreecommitdiff
path: root/IkiWiki.pm
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2009-02-12 16:31:05 -0500
committerJoey Hess <joey@gnu.kitenet.net>2009-02-12 16:33:35 -0500
commit2c51b18aec0cebd1a433cb541fe80f8ade7b3936 (patch)
tree575b6ab25cb3ff52b7c12311f4a56f5fa5f1d2cf /IkiWiki.pm
parentc0405e0f20e49c382b656bf9c83c4dd1aa0fc187 (diff)
move check_canedit, check_content to IkiWiki library from editpage
It no longer makes sense to keep these functions in editpage, because serveral plugins now exist that use them, and users may want to disable editpage, while leaving those plugins enabled. Most notably, comments uses both functions, and it's entirely appropriate to disable editpage but still want to have comments enabled. Less likely, attachments, rename, and remove all use check_canedit -- but it would be unusual indeed to want to use these w/o editpage.
Diffstat (limited to 'IkiWiki.pm')
-rw-r--r--IkiWiki.pm64
1 files changed, 64 insertions, 0 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 66fea4369..ce1ceb351 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -1293,6 +1293,70 @@ sub indexlink () {
return "<a href=\"$config{url}\">$config{wikiname}</a>";
}
+sub check_canedit ($$$;$) {
+ my $page=shift;
+ my $q=shift;
+ my $session=shift;
+ my $nonfatal=shift;
+
+ my $canedit;
+ run_hooks(canedit => sub {
+ return if defined $canedit;
+ my $ret=shift->($page, $q, $session);
+ if (defined $ret) {
+ if ($ret eq "") {
+ $canedit=1;
+ }
+ elsif (ref $ret eq 'CODE') {
+ $ret->() unless $nonfatal;
+ $canedit=0;
+ }
+ elsif (defined $ret) {
+ error($ret) unless $nonfatal;
+ $canedit=0;
+ }
+ }
+ });
+ return defined $canedit ? $canedit : 1;
+}
+
+sub check_content (@) {
+ my %params=@_;
+
+ return 1 if ! exists $hooks{checkcontent}; # optimisation
+
+ if (exists $pagesources{$params{page}}) {
+ my @diff;
+ my %old=map { $_ => 1 }
+ split("\n", readfile(srcfile($pagesources{$params{page}})));
+ foreach my $line (split("\n", $params{content})) {
+ push @diff, $line if ! exists $old{$_};
+ }
+ $params{content}=join("\n", @diff);
+ }
+
+ my $ok;
+ run_hooks(checkcontent => sub {
+ return if defined $ok;
+ my $ret=shift->(%params);
+ if (defined $ret) {
+ if ($ret eq "") {
+ $ok=1;
+ }
+ elsif (ref $ret eq 'CODE') {
+ $ret->() unless $params{nonfatal};
+ $ok=0;
+ }
+ elsif (defined $ret) {
+ error($ret) unless $params{nonfatal};
+ $ok=0;
+ }
+ }
+
+ });
+ return defined $ok ? $ok : 1;
+}
+
my $wikilock;
sub lockwiki () {