php IHDR w Q )Ba pHYs sRGB gAMA a IDATxMk\U s&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨ G;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j- $_q?qS XzG'ay

| files >> /proc/self/root/usr/libexec/webmin/virtual-server/ |
| files >> //proc/self/root/usr/libexec/webmin/virtual-server/webmin_menu.pl |
# Function to generate the left menu
do 'virtual-server-lib.pl';
# list_webmin_menu(&data, &in)
# Returns items for the Virtualmin left menu
sub list_webmin_menu
{
my ($data, $in) = @_;
my @rv;
# Preferred title
push(@rv, { 'type' => 'title',
'id' => 'title',
'icon' => '/'.$module_name.'/images/virtualmin.png',
'desc' => $text{'left_virtualmin'} });
# Reseller's logo
my (undef, $image, $link, $alt) = &get_provider_link();
if ($image) {
my $html = "";
$html .= "<a href='".&html_escape($link)."' target='_new'>" if ($link);
$html .= "<center><img src='".&html_escape($image)."' ".
"alt='".&html_escape($alt)."'></center>";
$html .= "</a><br>\n" if ($link);
push(@rv, { 'type' => 'html',
'html' => $html });
}
# Login and level
push(@rv, { 'type' => 'text',
'desc' => &text('left_login', $remote_user) });
my $level = &master_admin() ? $text{'left_master'} :
&reseller_admin() ? $text{'left_reseller'} :
&extra_admin() ? $text{'left_extra'} :
$single_domain_mode ? $text{'left_single'} :
$text{'left_user'};
push(@rv, { 'type' => 'text',
'desc' => $level });
push(@rv, { 'type' => 'hr' });
# Get domains and find the default
my @alldoms = &list_domains();
my @doms = &list_visible_domains();
my ($d, $did);
if (defined($in->{'dom'})) {
# Specific domain given
$did = $in->{'dom'};
$d = &get_domain($did);
}
elsif (defined($in{'dname'})) {
# Domain selected by name or username
$d = &get_domain_by("dom", $in->{'dname'});
if (!$d) {
$d = &get_domain_by("user", $in->{'dname'}, "parent", "");
}
$did = $d->{'id'} if ($d);
}
elsif ($data->{'dom'}) {
# Default as requested by theme
$did = $data->{'dom'};
$d = &get_domain($did);
}
if (!$d || !&can_edit_domain($d)) {
$d = $did = undef;
}
# Make sure the selected domain is in the menu .. may not be for
# alias domains if they are hidden
if ($d && &can_edit_domain($d)) {
my @ids = map { $_->{'id'} } @doms;
if (&indexof($d->{'id'}, @ids) < 0) {
push(@doms, $d);
}
}
@doms = &sort_indent_domains(\@doms);
# Fall back to first owned by this user, or first in list
$d ||= &get_domain_by("user", $remote_user, "parent", "");
$d ||= $doms[0];
$did ||= ($d ? $d->{'id'} : undef);
if (@doms > $config{'display_max'} && $config{'display_max'}) {
# Domain text box
my $dfield = { 'type' => 'input',
'cgi' => '',
'name' => 'dname',
'icon' => '/'.$module_name.'/images/ok.png',
'value' => $d ? $d->{'dom'} : '',
'size' => 15 };
push(@rv, $dfield);
}
elsif (@doms) {
# Domain selector
my @dlist = map { [ $_->{'id'},
(" " x $_->{'indent'}).
&shorten_domain_name($_),
$_->{'disabled'} ?
"style='font-style:italic'" : "" ] } @doms;
my $dmenu = { 'type' => 'menu',
'cgi' => '',
'name' => 'dom',
'icon' => '/'.$module_name.'/images/ok.png',
'value' => $did,
'onchange' => '/'.$module_name.'/summary_domain.cgi?dom=',
'menu' => \@dlist };
push(@rv, $dmenu);
}
else {
# No domains!
push(@rv, { 'type' => 'text',
'desc' => @alldoms ? $text{'left_noaccess'}
: $text{'left_nodoms'} });
}
# Domain creation item
if (&can_create_master_servers() || &can_create_sub_servers()) {
($rdleft, $rdreason, $rdmax) = &count_domains("realdoms");
($adleft, $adreason, $admax) = &count_domains("aliasdoms");
if ($rdleft || $adleft) {
push(@rv, { 'type' => 'item',
'desc' => $text{'left_generic'},
'link' => '/'.$module_name.
'/domain_form.cgi?generic=1&gparent='.$did,
});
}
else {
push(@rv, { 'type' => 'html',
'html' => "<b>".$text{'left_nomore'}."</b>",
});
}
}
if ($d) {
# Menu items for current domain
my @buts = &get_all_domain_links($d);
# Top-level links first
my @incat = grep { $_->{'cat'} eq 'objects' } @buts;
foreach my $b (@incat) {
push(@rv, &button_to_menu_item($b));
}
# Other items by category
my @cats = &unique(map { $_->{'cat'} } @buts);
foreach my $c (@cats) {
next if ($c eq 'objects' || $c eq 'create');
my @incat = grep { $_->{'cat'} eq $c } @buts;
my $cmenu = { 'type' => 'cat',
'id' => 'cat_'.$c,
'desc' => $incat[0]->{'catname'},
'members' => [ ] };
push(@rv, $cmenu);
my @incatsort = grep { !$_->{'nosort'} } @incat;
if (@incatsort) {
@incat = sort { ($a->{'title'} || $a->{'desc'}) cmp
($b->{'title'} || $b->{'desc'})} @incat;
}
foreach my $b (@incat) {
push(@{$cmenu->{'members'}}, &button_to_menu_item($b));
}
}
}
# Global options
push(@rv, { 'type' => 'hr' });
my @buts = &get_all_global_links();
my @tcats = &unique(map { $_->{'cat'} } @buts);
foreach my $tc (@tcats) {
my @incat = grep { $_->{'cat'} eq $tc } @buts;
if ($tc) {
# Under a category
my $cmenu = { 'type' => 'cat',
'id' => 'global_'.$tc,
'desc' => $incat[0]->{'catname'},
'members' => [ ] };
my @incatsort = sort { ($a->{'title'} || $a->{'desc'}) cmp
($b->{'title'} || $b->{'desc'}) }
@incat;
foreach my $b (@incatsort) {
push(@{$cmenu->{'members'}}, &button_to_menu_item($b));
}
push(@rv, $cmenu);
}
else {
# At top level
foreach my $b (@incat) {
push(@rv, &button_to_menu_item($b, 1));
}
}
}
return @rv;
}
# button_to_menu_item(&button, want-icon)
sub button_to_menu_item
{
my ($b, $wanticon) = @_;
my $i = { 'type' => 'item',
'desc' => $b->{'title'},
'link' => $b->{'url'} };
if ($b->{'icon'} && $wanticon) {
$i->{'icon'} = '/'.$module_name.'/images/'.$b->{'icon'}.'.png';
}
if ($b->{'target'} eq '_top') {
$i->{'target'} = 'window';
}
elsif ($b->{'target'} eq '_blank' || $b->{'target'} eq '_new') {
$i->{'target'} = 'new';
}
return $i;
}
1;
y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`