diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 081752132..15b07e84b 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -35,7 +35,7 @@ sub import { #{{{ hook(type => "filter", id => "po", call => \&filter); hook(type => "htmlize", id => "po", call => \&htmlize); hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1); - hook(type => "rename", id => "po", call => \&renamepage); + hook(type => "rename", id => "po", call => \&renamepages); hook(type => "delete", id => "po", call => \&mydelete); hook(type => "change", id => "po", call => \&change); hook(type => "editcontent", id => "po", call => \&editcontent); @@ -327,15 +327,30 @@ sub pagetemplate (@) { #{{{ } } # }}} +# Add the renamed page translations to the list of to-be-renamed pages. # Save information about master page rename, so that: # - our delete hook can ignore the translations not renamed already # - our change hook can rename the translations accordingly. -sub renamepage(@) { #{{{ - my %params=@_; - my $oldpage=$params{oldpage}; - my $newpage=$params{newpage}; +sub renamepages() { #{{{ + my $torename=shift; + my @torename=@{$torename}; - setrenamed($oldpage, $newpage) if istranslatable($oldpage); + foreach my $rename (@torename) { + next unless istranslatable($rename->{src}); + setrenamed($rename->{src}, $rename->{dest}); + my %otherpages=%{otherlanguages($rename->{src})}; + debug "bla".$rename->{src}; + while (my ($lang, $otherpage) = each %otherpages) { + push @{$torename}, { + src => $otherpage, + srcfile => $pagesources{$otherpage}, + dest => otherlanguage($rename->{dest}, $lang), + destfile => $rename->{dest}.".".$lang.".po", + required => 0, + }; + debug "po(renamepages): pushed src=$otherpage, dest=".otherlanguage($rename->{dest}, $lang); + } + } } #}}} sub mydelete(@) { #{{{ @@ -821,7 +836,8 @@ sub deletetranslations ($) { #{{{ sub renametranslations (@) { #{{{ my ($oldpage, $newpage)=(shift, shift); - debug "po(renametranslations): TODO: rename translations of $oldpage to $newpage"; + # FIXME - not needed anymore : debug "po(renametranslations): TODO: rename translations of $oldpage to $newpage"; + } #}}} diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm index 2200235f6..227f59bfa 100644 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm @@ -291,6 +291,8 @@ sub sessioncgi ($$) { required => 1, }; + IkiWiki::run_hooks(rename => sub { shift->(\@torename); }); + # See if any subpages need to be renamed. if ($q->param("subpages") && $src ne $dest) { foreach my $p (keys %pagesources) { @@ -338,16 +340,10 @@ sub sessioncgi ($$) { sprintf(gettext("rename %s to %s"), $srcfile, $destfile), $session->param("name"), $ENV{REMOTE_ADDR}) if $config{rcs}; + # Then link fixups. foreach my $rename (@torename) { next if $rename->{src} eq $rename->{dest}; next if $rename->{error}; - IkiWiki::run_hooks(rename => sub { - shift->( - oldpage => $src, - newpage => $dest, - ); - }); - # Then link fixups. foreach my $p (fixlinks($rename, $session)) { # map old page names to new foreach my $r (@torename) { diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 79a9066ce..d024a5dd4 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -373,11 +373,12 @@ new page. ### rename - hook(type => "rename", id => "foo", call => \&renamepage); + hook(type => "rename", id => "foo", call => \&renamepages); When a page or set of pages is renamed, the referenced function is -called once per renamed page, and passed named parameters: `oldpage`, -`newpage`. +called, and passed a reference to an array of hashes with keys: +`src`, `srcfile`, `dest`, `destfile`, `required`. It can modify +the array. ### getsetup