X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/1ca191b5707ef38af5cbe196e314d57cd5c8c065..41eca80e253ff6c0666a88a3f23e81c180a31f9e:/IkiWiki/Plugin/rename.pm?ds=inline

diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm
index 54c7faf13..82639a073 100644
--- a/IkiWiki/Plugin/rename.pm
+++ b/IkiWiki/Plugin/rename.pm
@@ -87,6 +87,27 @@ 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->($q, $session, src => $src, srcfile => $srcfile,
+				dest => $dest, destfile => $destfile);
+		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 ($$$) {
@@ -195,7 +216,7 @@ sub postrename ($;$$$) {
 		# Update edit form content to fix any links present
 		# on it.
 		$postrename->param("editcontent",
-			renamepage_hook($dest, $src, $dest,
+			renamelink_hook($dest, $src, $dest,
 				 $postrename->param("editcontent")));
 
 		# Get a new edit token; old was likely invalidated.
@@ -291,6 +312,8 @@ sub sessioncgi ($$) {
 				required => 1,
 			};
 
+			IkiWiki::run_hooks(rename => sub { shift->(\@torename, $q, $session); });
+
 			# See if any subpages need to be renamed.
 			if ($q->param("subpages") && $src ne $dest) {
 				foreach my $p (keys %pagesources) {
@@ -420,10 +443,10 @@ sub sessioncgi ($$) {
 	}
 }
 
-sub renamepage_hook ($$$$) {
+sub renamelink_hook ($$$$) {
 	my ($page, $src, $dest, $content)=@_;
 
-	IkiWiki::run_hooks(renamepage => sub {
+	IkiWiki::run_hooks(renamelink => sub {
 		$content=shift->(
 			page => $page,
 			oldpage => $src,
@@ -480,7 +503,7 @@ sub fixlinks ($$$) {
 		if ($needfix) {
 			my $file=$pagesources{$page};
 			my $oldcontent=readfile($config{srcdir}."/".$file);
-			my $content=renamepage_hook($page, $rename->{src}, $rename->{dest}, $oldcontent);
+			my $content=renamelink_hook($page, $rename->{src}, $rename->{dest}, $oldcontent);
 			if ($oldcontent ne $content) {
 				my $token=IkiWiki::rcs_prepedit($file);
 				eval { writefile($file, $config{srcdir}, $content) };