From 985a34b09e8b856e700b9ecccd707cb54e9fc659 Mon Sep 17 00:00:00 2001
From: Joey Hess <joey@kodama.kitenet.net>
Date: Wed, 23 Jul 2008 19:20:11 -0400
Subject: fixup editpage links on rename

---
 IkiWiki/Plugin/rename.pm | 36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm
index 553a67396..5fda526a8 100644
--- a/IkiWiki/Plugin/rename.pm
+++ b/IkiWiki/Plugin/rename.pm
@@ -129,8 +129,9 @@ sub rename_start ($$$$) {
 	exit 0;
 }
 
-sub postrename ($;$$) {
+sub postrename ($;$$$) {
 	my $session=shift;
+	my $src=shift;
 	my $dest=shift;
 	my $attachment=shift;
 
@@ -139,15 +140,24 @@ sub postrename ($;$$) {
 	$session->clear("postrename");
 	IkiWiki::cgi_savesession($session);
 
-	if (defined $dest && ! $attachment) {
-		# They renamed the page they were editing. This requires
-		# fixups to the edit form state.
-		# Tweak the edit form to be editing the new page.
-		$postrename->param("page", $dest);
-	}
+	if (defined $dest) {
+		if (! $attachment) {
+			# They renamed the page they were editing. This requires
+			# fixups to the edit form state.
+			# Tweak the edit form to be editing the new page.
+			$postrename->param("page", $dest);
+		}
+
+		# Update edit form content to fix any links present
+		# on it.
+		$postrename->param("editcontent",
+			renamepage_hook($dest, $src, $dest,
+				 $postrename->param("editcontent")));
 
-	# Get a new edit token; old likely not valid.
-	$postrename->param("rcsinfo", IkiWiki::rcs_prepedit($pagesources{$dest}));
+		# Get a new edit token; old was likely invalidated.
+		$postrename->param("rcsinfo",
+			IkiWiki::rcs_prepedit($pagesources{$dest}));
+	}
 
 	IkiWiki::cgi_editpage($postrename, $session);
 }
@@ -248,6 +258,7 @@ sub sessioncgi ($$) { #{{{
 					my $bestlink=bestlink($page, $link);
 					if ($bestlink eq $src) {
 						$needfix=1;
+						last;
 					}
 				}
 				if ($needfix) {
@@ -279,12 +290,15 @@ sub sessioncgi ($$) { #{{{
 			# Scan for any remaining broken links to $src.
 			my @brokenlinks;
 			foreach my $page (keys %links) {
+				my $broken=0;
 				foreach my $link (@{$links{$page}}) {
 					my $bestlink=bestlink($page, $link);
 					if ($bestlink eq $src) {
-						push @brokenlinks, $page;
+						$broken=1;
+						last;
 					}
 				}
+				push @brokenlinks, $page if $broken;
 			}
 
 			# Generate a rename summary, that will be shown at the top
@@ -310,7 +324,7 @@ sub sessioncgi ($$) { #{{{
 			]);
 			$renamesummary=$template->output;
 
-			postrename($session, $dest, $q->param("attachment"));
+			postrename($session, $src, $dest, $q->param("attachment"));
 		}
 		else {
 			IkiWiki::showform($form, $buttons, $session, $q);
-- 
cgit v1.2.3