diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/menu.pl | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/scripts/menu.pl b/scripts/menu.pl index 622c0cce..6836c1b4 100644 --- a/scripts/menu.pl +++ b/scripts/menu.pl @@ -44,15 +44,42 @@ sub expanding_menu { template => 'menu_expand', format => 'HTML', ); - $request->{menu_items} = []; - for (keys %$menu){ - push @{$request->{menu_items}}, $menu->{$_}; - } + $request->{subs} = []; + _attach_references({source => $menu, dest => $request->{subs}, path => ""}); $menu->debug({file => '/tmp/debug-menu'}); - $request->{menu_items} = {}; - $request->{menu_items}->{subs} = $menu; $request->debug({file => '/tmp/debug'}); $template->render($request); } +sub _attach_references { + no strict qw(refs); + my ($args) = @_; + my ($source, $dest, $path) + = ($args->{source}, $args->{dest}, $args->{path}); + my %hash; + if ($path and $source->{id}){ + for (sort keys %$source){ + next if $_ eq 'subs'; + $hash{$_} = $source->{$_}; + } + $hash{path} = $path; + push @{$dest}, \%hash; + foreach (sort keys %{$source->{subs}}) { + _attach_references({ + source => $source->{subs}->{$_}, + dest => $dest, + path => "$path--$_", + }); + } + } else { + foreach (sort keys %$source){ + _attach_references({ + source => $source->{$_}, + dest => $dest, + path => "$_", + }); + } + } +} + 1; |