diff options
author | Joey Hess <joey@gnu.kitenet.net> | 2009-02-12 16:31:05 -0500 |
---|---|---|
committer | Joey Hess <joey@gnu.kitenet.net> | 2009-02-12 16:33:35 -0500 |
commit | 2c51b18aec0cebd1a433cb541fe80f8ade7b3936 (patch) | |
tree | 575b6ab25cb3ff52b7c12311f4a56f5fa5f1d2cf /IkiWiki.pm | |
parent | c0405e0f20e49c382b656bf9c83c4dd1aa0fc187 (diff) | |
download | ikiwiki-2c51b18aec0cebd1a433cb541fe80f8ade7b3936.tar ikiwiki-2c51b18aec0cebd1a433cb541fe80f8ade7b3936.tar.gz |
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.pm | 64 |
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 () { |