% foreach my $submenu (@processed_menu) {
- >
<% shift @$submenu %>
% if ( @$submenu ) {
% foreach my $link ( @$submenu ) {
- <% $link %>
% }
% }
% }
<%init>
my %opt = @_;
#my $cust_main = $opt{'cust_main'};
#my $custnum = $cust_main->custnum;
#my $curuser = $FS::CurrentUser::CurrentUser;
#my $conf = FS::Conf->new;
#
#my %payby = map { $_ => 1 } $conf->config('payby');
#
## cached for conditions, to avoid looking it up twice
#my $invoicing_list_emailonly = $cust_main->invoicing_list_emailonly;
my @processed_menu;
foreach my $submenu (@{ $opt{menu} }) {
my @links;
my $first = 1;
foreach my $entry ( @$submenu ) {
# if the menu head was skipped, skip the whole menu
last if (!$first and !@links);
$first = 0;
my $a = entry2link($entry, \%opt);
push @links, $a if length($a);
} # foreach $entry
if (@links) {
push @processed_menu, \@links;
}
}
sub entry2link {
my( $entry, $opt ) = @_;
# check conditions
if ( $entry->{acl} ) {
return ''
unless $FS::CurrentUser::CurrentUser->access_right( $entry->{acl} );
}
if ( $entry->{confexists} ) {
if ( $entry->{confexists} =~ /^!(.*)/ ) {
# confexists => !foo, a negative condition
return '' if FS::Conf->new->exists( $1 );
} else {
return '' unless FS::Conf->new->exists( $entry->{confexists} );
}
}
if ( $entry->{condition} ) {
return '' unless &{ $entry->{condition} }($opt->{cust_main});
}
my $label = emt($entry->{label});
if ( $entry->{submenu} ) {
my $a = ''. $label.
''.
'';
}
my $target = $entry->{content}
|| $entry->{popup}
|| $entry->{url};
if ( ref($target) eq 'CODE' ) {
$target = &$target($opt->{cust_main});
}
return $target if $entry->{content}; #the coderef specified the whole thing
if ( $entry->{show} ) {
$target = $opt->{self_url}. $entry->{show};
my $a = qq[ {show} eq $entry->{show};
return $a. qq[>$label ];
} elsif ( $entry->{popup} ) {
#$target =~ s/\$custnum/$custnum/g;
$target = $p.$target;
return include('/elements/popup_link.html',
action => $target,
width => 616,
height => 410,
%$entry,
label => $label,
);
} elsif ( $entry->{url} ) {
#$target =~ s/\$custnum/$custnum/g;
$target = $p.$target;
return qq[ $label ];
} else {
die "bad entry ". join(',',%$entry). " in menu: no url, popup or content";
}
}
%init>