X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FMenu.pm;h=19b2d2d16c66ecf1507e6b6b7c0e495455336708;hb=90c31393ba44d8c9f52bea079f57582958421cf2;hp=57d8b4e8aa059b1ac044bac668e5df8dfb17f78f;hpb=4780fc8426841be0838551dea12d8329f32ef65e;p=kivitendo-erp.git diff --git a/SL/Menu.pm b/SL/Menu.pm index 57d8b4e8a..19b2d2d16 100644 --- a/SL/Menu.pm +++ b/SL/Menu.pm @@ -42,14 +42,19 @@ use strict; sub new { $main::lxdebug->enter_sub(); - my ($type, $menufile) = @_; + my ($type, @menufiles) = @_; + my $self = bless {}, $type; - my $self = {}; - my $inifile = Inifile->new($menufile); + my @order; - map { $self->{$_} = $inifile->{$_} } keys %{ $inifile }; + foreach my $menufile (grep { -f } @menufiles) { + my $inifile = Inifile->new($menufile); - bless $self, $type; + push @order, @{ delete($inifile->{ORDER}) || [] }; + $self->{$_} = $inifile->{$_} for keys %{ $inifile }; + } + + $self->{ORDER} = \@order; $self->set_access(); @@ -94,7 +99,7 @@ sub access_control { my @menu = (); - if ($menulevel eq "") { + if (!$menulevel) { @menu = grep { !/--/ } @{ $self->{ORDER} }; } else { @menu = grep { /^${menulevel}--/ } @{ $self->{ORDER} }; @@ -157,6 +162,11 @@ sub parse_access_string { return SL::Auth::evaluate_rights_ary($stack[0]); } +sub parse_instance_conf_string { + my ($self, $setting) = @_; + return $::instance_conf->data->{$setting}; +} + sub set_access { my $self = shift; @@ -166,6 +176,7 @@ sub set_access { my $entry = $self->{$key}; $entry->{GRANTED} = $entry->{ACCESS} ? $self->parse_access_string($key, $entry->{ACCESS}) : 1; + $entry->{GRANTED} &&= $self->parse_instance_conf_string($entry->{INSTANCE_CONF}) if $entry->{INSTANCE_CONF}; $entry->{IS_MENU} = $entry->{submenu} || ($key !~ m/--/); $entry->{NUM_VISIBLE_CHILDREN} = 0;