summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/rename.pm20
-rw-r--r--doc/plugins/write.mdwn8
2 files changed, 28 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm
index 25ddd2d65..740ca8ac4 100644
--- a/IkiWiki/Plugin/rename.pm
+++ b/IkiWiki/Plugin/rename.pm
@@ -87,6 +87,26 @@ sub check_canrename ($$$$$$) {
IkiWiki::Plugin::attachment::check_canattach($session, $dest, $srcfile);
}
}
+
+ my $canrename;
+ IkiWiki::run_hooks(canrename => sub {
+ return if defined $canrename;
+ my $ret=shift->($src, $q, $session);
+ if (defined $ret) {
+ if ($ret eq "") {
+ $canrename=1;
+ }
+ elsif (ref $ret eq 'CODE') {
+ $ret->();
+ $canrename=0;
+ }
+ elsif (defined $ret) {
+ error($ret);
+ $canrename=0;
+ }
+ }
+ });
+ return $canrename;
}
sub rename_form ($$$) {
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index e20cce763..a927b1629 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -329,6 +329,14 @@ This hook can be used to implement arbitrary access methods to control when
a page can be removed using the web interface (commits from revision control
bypass it). It works exactly like the `canedit` hook.
+### canrename
+
+ hook(type => "canrename", id => "foo", call => \&canrename);
+
+This hook can be used to implement arbitrary access methods to control when
+a page can be renamed using the web interface (commits from revision control
+bypass it). It works exactly like the `canedit` hook.
+
### editcontent
hook(type => "editcontent", id => "foo", call => \&editcontent);