X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=inline;f=SL%2FMenu.pm;h=0e92cc5b3d75b9ee6f094e0fc2bf286d8ba72c2c;hb=d7680dd2d045638fc4a1925406e0b7bc4cf1cdcf;hp=b91611242ff4c889791dcacaa72a8ab8bed47c67;hpb=02497699124fa6a3bd1a76104a3c39a5131ab981;p=kivitendo-erp.git diff --git a/SL/Menu.pm b/SL/Menu.pm index b91611242..0e92cc5b3 100644 --- a/SL/Menu.pm +++ b/SL/Menu.pm @@ -73,6 +73,8 @@ sub _merge { for my $node (@$data) { my $id = $node->{id}; + die "menu: node with name '$node->{name}' does not have an id" if !$id; + my $merge_to = $by_id->{$id}; if (!$merge_to) { @@ -117,6 +119,19 @@ sub build_tree { push @{ $by_parent{ $node->{parent} // '' } //= [] }, $node; } + # autovivify order in by_parent, so that numerical sorting for entries without order + # preserves their order and position with respect to entries with order. + for (values %by_parent) { + my $last_order = 0; + for my $node (@$_) { + if (defined $node->{order} && $node->{order} * 1) { + $last_order = $node->{order}; + } else { + $node->{order} = ++$last_order; + } + } + } + my $tree = { }; $self->{by_id}{''} = $tree;