X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/7befc6deb328c5edf32c0ec0e6c67a69778b67bb..cc43a6ea70e867ac0d74158fd912540fe2576a19:/IkiWiki/Plugin/rename.pm diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm index 553a67396..5dcd4e936 100644 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm @@ -6,12 +6,21 @@ use strict; use IkiWiki 2.00; sub import { #{{{ + hook(type => "getsetup", id => "rename", call => \&getsetup); hook(type => "formbuilder_setup", id => "rename", call => \&formbuilder_setup); hook(type => "formbuilder", id => "rename", call => \&formbuilder); hook(type => "sessioncgi", id => "rename", call => \&sessioncgi); } # }}} +sub getsetup () { #{{{ + return + plugin => { + safe => 1, + rebuild => 0, + }, +} #}}} + sub check_canrename ($$$$$$$) { #{{{ my $src=shift; my $srcfile=shift; @@ -102,7 +111,7 @@ sub rename_form ($$$) { #{{{ return $f, ["Rename", "Cancel"]; } #}}} -sub rename_start ($$$$) { +sub rename_start ($$$$) { #{{{ my $q=shift; my $session=shift; my $attachment=shift; @@ -127,10 +136,11 @@ sub rename_start ($$$$) { IkiWiki::showform($f, $buttons, $session, $q); exit 0; -} +} #}}} -sub postrename ($;$$) { +sub postrename ($;$$$) { #{{{ my $session=shift; + my $src=shift; my $dest=shift; my $attachment=shift; @@ -139,18 +149,27 @@ 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); + } - # Get a new edit token; old likely not valid. - $postrename->param("rcsinfo", IkiWiki::rcs_prepedit($pagesources{$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 was likely invalidated. + $postrename->param("rcsinfo", + IkiWiki::rcs_prepedit($pagesources{$dest})); + } IkiWiki::cgi_editpage($postrename, $session); -} +} #}}} sub formbuilder (@) { #{{{ my %params=@_; @@ -248,6 +267,7 @@ sub sessioncgi ($$) { #{{{ my $bestlink=bestlink($page, $link); if ($bestlink eq $src) { $needfix=1; + last; } } if ($needfix) { @@ -279,12 +299,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 +333,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);