po: initial infrastructure to deal with renamed master page

This is a skeleton that does nothing yet.
See the comments in the code for an overview of the issue that arises, due to
the renamepage hook never being called globally.

Signed-off-by: intrigeri <intrigeri@boum.org>
master
intrigeri 2008-11-13 03:55:55 +01:00
parent c390056eb2
commit d795a295c9
1 changed files with 71 additions and 4 deletions

View File

@ -35,6 +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 => "renamepage", id => "po", call => \&renamepage);
hook(type => "delete", id => "po", call => \&mydelete);
hook(type => "change", id => "po", call => \&change);
hook(type => "editcontent", id => "po", call => \&editcontent);
@ -326,15 +327,43 @@ sub pagetemplate (@) { #{{{
}
} # }}}
# 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.
#
# FIXME:
# This hook is called once per page linking to the old page, which
# means our delete hook won't know it should not delete a renamed orphan
# page's translation.
#
# Moreover, we can't recognize such pages at delete stage:
# existing links are fixed in the renaming process, so every
# renamed page's old location will be an orphan anyway at this time.
sub renamepage(@) { #{{{
my %params=@_;
my $oldpage=$params{oldpage};
my $newpage=$params{newpage};
setrenamed($oldpage, $newpage) if istranslatable($oldpage);
return $params{content};
} #}}}
sub mydelete(@) { #{{{
my @deleted=@_;
map { deletetranslations($_) } grep istranslatablefile($_), @deleted;
map {
deletetranslations($_);
} grep { istranslatablefile($_) && ! renamed(pagename($_))} @deleted;
} #}}}
sub change(@) { #{{{
my @rendered=@_;
my $eachrenamed=eachrenamed();
while (my ($oldpage, $newpage) = $eachrenamed->()) {
renametranslations($oldpage, $newpage);
}
my $updated_po_files=0;
# Refresh/create POT and PO files as needed.
@ -373,6 +402,7 @@ sub change(@) { #{{{
}
# Reinitialize module's private variables.
resetalreadyfiltered();
resetrenamed();
resettranslationscache();
flushmemoizecache();
# Trigger a wiki refresh.
@ -496,6 +526,34 @@ sub myurlto ($$;$) { #{{{
} #}}}
}
{
my %renamed;
sub renamed ($) { #{{{
my $page=shift;
if (exists $renamed{$page} &&
defined $renamed{$page}) {
return $renamed{$page};
}
return;
} #}}}
sub setrenamed ($$) { #{{{
my $oldpage=shift;
my $newpage=shift;
$renamed{$oldpage}=$newpage;
} #}}}
sub resetrenamed () { #{{{
undef %renamed;
} #}}}
sub eachrenamed () { #{{{
return sub { each %renamed };
} #}}}
}
# ,----
# | Helper functions
@ -764,13 +822,22 @@ sub homepageurl (;$) { #{{{
return urlto('', $page);
} #}}}
# do *not* implement this until the renamepage hook works
# - do *not* implement this until the renamepage hook works
# - do *not* delete translations of pages that were orphans
# before being renamed (see renamepage hook comments above)
sub deletetranslations ($) { #{{{
my $file=shift;
my $deletedmasterfile=shift;
debug 'po(deletetranslations): TODO: delete translations of ' . $file;
debug "po(deletetranslations): TODO: delete translations of $deletedmasterfile";
} #}}}
sub renametranslations (@) { #{{{
my ($oldpage, $newpage)=shift;
debug "po(renametranslations): TODO: rename translations of $oldpage to $newpage";
} #}}}
# ,----
# | PageSpec's
# `----