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 >> /usr/libexec/webmin/virtual-server-theme/ |
files >> //usr/libexec/webmin/virtual-server-theme/left.cgi |
#!/usr/bin/perl # Show the left-side menu of Virtualmin domains, plus modules $trust_unknown_referers = 1; require "virtual-server-theme/virtual-server-theme-lib.pl"; &ReadParse(); @admincats = ( "tmpl", "create", "backup" ); %gaccess = &get_module_acl(undef, ""); &popup_header("Virtualmin"); print "<script type='text/javascript' src='$gconfig{'webprefix'}/unauthenticated/toggleview.js'></script>\n"; # Find out which modules we have $hasvirt = &foreign_available("virtual-server"); if ($hasvirt) { %minfo = &get_module_info("virtual-server"); %vconfig = &foreign_config("virtual-server"); $hasvirt = 0 if ($minfo{'version'} < 2.99); } $hasmail = &foreign_available("mailbox"); $hasvm2 = &foreign_available("server-manager"); # Show the hosting provider logo if ($hasvirt) { &foreign_require("virtual-server", "virtual-server-lib.pl"); $is_master = &virtual_server::master_admin(); } if ($hasvm2) { &foreign_require("server-manager", "server-manager-lib.pl"); $is_master = &server_manager::can_action(undef, "global"); } if (defined(&virtual_server::get_provider_link)) { (undef, $image, $link, $alt) = &virtual_server::get_provider_link(); } if (!$image && defined(&server_manager::get_provider_link)) { (undef, $image, $link, $alt) = &server_manager::get_provider_link(); } if ($image) { print "<a href='".&html_escape($link)."' target='_new'>" if ($link); print "<center><img src='".&html_escape($image)."' ". "alt='".&html_escape($alt)."'></center>"; print "</a><br>\n" if ($link); } # Work out the user's email address if ($hasmail) { &foreign_require("mailbox", "mailbox-lib.pl"); ($fromaddr) = &mailbox::split_addresses( &mailbox::get_preferred_from_address()); } # Work out current mode $sects = &get_right_frame_sections(); $cansearch = $gaccess{'webminsearch'} ne '0' && !$sects->{'nosearch'}; $product = &get_product_name(); $mode = $in{'mode'} ? $in{'mode'} : $sects->{'tab'} ? $sects->{'tab'} : $hasvirt ? "virtualmin" : $hasvm2 ? "vm2" : $hasmail ? "mail" : $product; if ($mode eq "virtualmin" && $hasvirt) { # Get and sort the domains @alldoms = &virtual_server::list_domains(); @doms = &virtual_server::list_visible_domains(); # Work out which domain we are editing if (defined($in{'dom'})) { $d = &virtual_server::get_domain($in{'dom'}); } elsif (defined($in{'dname'})) { $d = &virtual_server::get_domain_by("dom", $in{'dname'}); if (!$d) { # Couldn't find domain by name, search by user instead $d = &virtual_server::get_domain_by( "user", $in{'dname'}, "parent", ""); } } elsif ($sects && $sects->{'dom'}) { $d = &virtual_server::get_domain($sects->{'dom'}); $d = undef if (!&virtual_server::can_edit_domain($d)); } # Make sure the selected domain is in the menu .. may not be for # alias domains if they are hidden if ($d && &virtual_server::can_edit_domain($d)) { my @ids = map { $_->{'id'} } @doms; if (&indexof($d->{'id'}, @ids) < 0) { push(@doms, $d); } } @doms = &virtual_server::sort_indent_domains(\@doms); # Fall back to first owned by this user, or first in list $d ||= &virtual_server::get_domain_by("user", $remote_user, "parent", ""); $d ||= $doms[0]; } else { $d = { 'id' => $in{'dom'} }; } $did = $d ? $d->{'id'} : undef; if ($mode eq "vm2" && $hasvm2) { # Get and sort managed servers @servers = &server_manager::list_available_managed_servers_sorted(); @allservers = &server_manager::list_managed_servers(); ($server) = grep { $_->{'id'} eq $in{'sid'} } @servers; if (!$server && $sects && $sects->{'server'} ne '') { ($server) = grep { $_->{'id'} eq $sects->{'server'} } @servers; } $server ||= $servers[0]; } $sid = $server ? $server->{'id'} : undef; # Show virtualmin / folders / webmin mode selector @has = ($hasvirt ? ( "virtualmin" ) : ( ), $hasmail ? ( "mail" ) : ( ), $hasvm2 ? ( "vm2" ) : ( ), $sects->{'nowebmin'} == 1 || ($sects->{'nowebmin'} == 2 && !$is_master) && $mode ne $product ? ( ) : ( $product )); if (@has > 1) { print "<div class='mode'>"; foreach $m (@has) { if ($m ne $mode) { print "<a href='left.cgi?mode=$m&dom=$did'>"; } else { print "<b>"; } print "<img src='images/$m-small.png' alt='$m'> ". $text{'has_'.$m}; if ($m ne $mode) { print "</a>\n"; } else { print "</b>\n"; } } print "</div>"; } print "<div class='wrapper'>\n"; print "<table id='main' width='100%'><tbody><tr><td>\n"; if (($mode eq "webmin" || $mode eq "usermin") && $cansearch) { # Left form is for searching Webmin print "<form action=webmin_search.cgi target=right style='display:inline'>\n"; $doneform = 1; } elsif ($hasvirt || $hasvm2) { # Left form is for changing domain / server print "<form action=left.cgi style='display:inline'>\n"; $doneform = 1; } elsif ($mode eq "mail") { # Left form is for searching a mail folder @folders = &mailbox::list_folders_sorted(); $df = $mailbox::userconfig{'default_folder'}; $dfolder = $df ? &mailbox::find_named_folder($df, \@folders) : $folders[0]; print "<script>\n"; print "function GetMailFolder()\n"; print "{\n"; print "var url = ''+window.parent.frames[1].location;\n"; print "var qm = url.indexOf('?');\n"; print "if (qm > 0) {\n"; print " var params = url.substring(qm+1).split('&');\n"; print " for(var i=0; i<params.length; i++) {\n"; print " var nv = params[i].split('=');\n"; print " if (nv[0] == 'id') {\n"; print " if (nv[1] != '1' && url.indexOf('view_mail.cgi') <= 0) {\n"; print " document.forms[0].id.value = unescape(nv[1]);\n"; print " }\n"; print " }\n"; print " else if (nv[0] == 'folder') {\n"; print " document.forms[0].folder.value = nv[1];\n"; print " }\n"; print " }\n"; print " }\n"; print "}\n"; print "</script>\n"; print "<form action=mailbox/mail_search.cgi target=right onSubmit='GetMailFolder()' style='display:inline'>\n"; print &ui_hidden("simple", 1); print &ui_hidden("folder", $dfolder->{'index'}); print &ui_hidden("id", undef); $doneform = 1; } # Show login and Virtualmin access level if ($fromaddr) { # Show email address and real name print $fromaddr->[1],"<br>\n" if ($fromaddr->[1]); print $fromaddr->[0],"\n"; } else { # Show login print &text('left_login', $remote_user),"<br>\n"; } if (@doms) { # Show Virtualmin login level $level = &virtual_server::master_admin() ? $text{'left_master'} : &virtual_server::reseller_admin() ? $text{'left_reseller'} : &virtual_server::extra_admin() ? $text{'left_extra'} : $virtual_server::single_domain_mode ? $text{'left_single'} : $text{'left_user'}; print "$level<br>\n"; } elsif ($hasvm2) { # Show Cloudmin login level $level = $server_manager::access{'owner'} ? $text{'left_owner'} : $text{'left_master2'}; print "$level<br>\n"; } print "<hr>\n"; $selwidth = (&get_left_frame_width() - 70)."px"; if ($mode eq "virtualmin" && @doms) { # Show Virtualmin servers this user can edit, plus links for various # functions within each print "<div class='domainmenu'>\n"; print &ui_hidden("mode", $mode); if ($virtual_server::config{'display_max'} && @doms > $virtual_server::config{'display_max'}) { # Show text field for domain name print $text{'left_dname'}, &ui_textbox("dname", $d ? $d->{'dom'} : $in{'dname'}, 15); } else { # Show menu of domains my $sel; if (-r "$root_directory/virtual-server/summary_domain.cgi") { $sel = "; window.parent.frames[1].location = ". "\"virtual-server/summary_domain.cgi?dom=\"+this.value"; } print &ui_select("dom", $did, [ map { [ $_->{'id'}, (" " x $_->{'indent'}). &virtual_server::shorten_domain_name($_), $_->{'disabled'} ? "style='font-style:italic'" : "" ] } @doms ], 1, 0, 0, 0, "onChange='form.submit() $sel'". "style='width:$selwidth'"); } print "<input type='image' src='images/ok.gif' alt='' class='goArrow'>\n"; foreach $a (@admincats) { print &ui_hidden($a, 1),"\n" if ($in{$a}); } print "</div>\n"; if (!$d) { if ($in{'dname'}) { print "\n"; } } # Show domain creation link, if possible if (&virtual_server::can_create_master_servers() || &virtual_server::can_create_sub_servers()) { ($rdleft, $rdreason, $rdmax) = &virtual_server::count_domains("realdoms"); ($adleft, $adreason, $admax) = &virtual_server::count_domains("aliasdoms"); if ($rdleft || $adleft) { &print_virtualmin_link( { 'url' => "virtual-server/domain_form.cgi?". "generic=1&gparent=$d->{'id'}", 'title' => $text{'left_generic'} }, 'leftlink'); } else { print "<div class='leftlink'><b>", &text('left_nomore'),"</b></div>\n"; } } if (!$d) { goto nodomain; } # Get actions and menus from Virtualmin @buts = &virtual_server::get_all_domain_links($d); # Show 'objects' category actions at top level my @incat = grep { $_->{'cat'} eq 'objects' } @buts; foreach my $b (@incat) { &print_virtualmin_link($b, 'leftlink'); } # Show others by category (except those for creation, which appear # at the top) 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; &print_category_opener("cat_$c", \@cats, $incat[0]->{'catname'}); print "<div class='itemhidden' id='cat_$c'>\n"; my @incatsort = grep { !$_->{'nosort'} } @incat; if (@incatsort) { @incat = sort { ($a->{'title'} || $a->{'desc'}) cmp ($b->{'title'} || $b->{'desc'})} @incat; } foreach my $b (@incat) { &print_virtualmin_link($b, "linkindented"); } print "</div>\n"; } print "<hr>\n"; nodomain: } elsif ($mode eq "virtualmin") { # No domains print "<div class='leftlink'>"; if (@alldoms) { print $text{'left_noaccess'}; } else { print $text{'left_nodoms'}; } print "</div>\n"; # Show domain creation link if (&virtual_server::can_create_master_servers() || &virtual_server::can_create_sub_servers()) { print "<div class='leftlink'><a href='virtual-server/domain_form.cgi?generic=1' target=right>$text{'left_generic'}</a></div>\n"; } } elsif ($mode eq "vm2" && @servers) { # Show managed servers print "<div class='domainmenu'>\n"; print &ui_hidden("mode", $mode); print &ui_select("sid", $sid, [ map { [ $_->{'id'}, (" " x $_->{'indent'}). &shorten_hostname($_) ] } @servers ], 1, 0, 0, 0, "onChange='form.submit()' style='width:$selwidth'"); print "<input type='image' src='images/ok.gif' alt='' class='goArrow'>\n"; print "</div>\n"; } elsif ($mode eq "vm2") { # No servers print "<div class='leftlink'>"; if (@allservers) { print $text{'left_novm2access'}; } else { print $text{'left_novm2'}; } print "</div>\n"; } if ($mode eq "virtualmin") { # Show Virtualmin global links my @buts = &virtual_server::get_all_global_links(); my @tcats = &unique(map { $_->{'cat'} } @buts); foreach my $tc (@tcats) { my @incat = grep { $_->{'cat'} eq $tc } @buts; if ($tc) { # Show indented under section &print_category_opener("tmpl_".$tc, \@tcats, $incat[0]->{'catname'}); print "<div class='itemhidden' id='tmpl_$tc'>\n"; foreach my $l (@incat) { &print_virtualmin_link($l, 'linkindented'); } print "</div>\n"; } else { # Show with icons foreach my $l (@incat) { &print_virtualmin_link($l, 'aftericon', 1); } } } } if ($mode eq "mail") { # Work out possible folder heirarchies foreach $f (@folders) { $sep = $f->{'name'} =~ /\// ? "/" : "\\."; $sepchar = $f->{'name'} =~ /\// ? "/" : "."; @w = split($sep, $f->{'name'}); if (@w > 1) { $f->{'heir'} = join($sepchar, @w[0..$#w-1]); $heir{$f->{'heir'}} = 1; $heirdepth{$f->{'heir'}} = scalar(@w); $heircount{$f->{'heir'}}++; } } %heiropen = map { $_, 1 } split(/\0/, $in{'heiropen'}); $heiropen{""} = 1; # Show mail folders foreach $f (@folders) { $fid = &mailbox::folder_name($f); # Work out if a star is needed $star = $f->{'type'} == 6 && $mailbox::special_folder_id && $f->{'id'} == $mailbox::special_folder_id ? "<img src='mailbox/images/special.gif' alt=special>" : ""; # Add unread message count $umsg = ""; if (defined(&mailbox::should_show_unread) && &mailbox::should_show_unread($f)) { local ($c, $u) = &mailbox::mailbox_folder_unread($f); $umsg = " ($u)" if ($u); } # Check if folder name is hierarchial if ($heir{$f->{'heir'}} == 1 && $heircount{$f->{'heir'}} > 1) { # Find parent category, skip if not open $pheir = $f->{'heir'}; if ($pheir =~ /\//) { $pheir =~ s/\/[^\/]+$//; } elsif ($pheir =~ /\./) { $pheir =~ s/\.[^\.]+$//; } else { $pheir = undef; } next if ($pheir && !$heiropen{$pheir}); print "<div class='leftlink'>"; %copyopen = %heiropen; if ($heiropen{$f->{'heir'}}) { $img = "open.gif"; delete($copyopen{$f->{'heir'}}); } else { $img = "closed.gif"; $copyopen{$f->{'heir'}} = 1; } $heirstr = join("&", map { "heiropen=".&urlize($_) } keys %copyopen); $indent = " " x ($heirdepth{$f->{'heir'}} - 2); print $indent. "<a href='left.cgi?$heirstr'>", "<img src=images/$img></a>", &html_escape($f->{'heir'}); print "</div>\n"; $heir{$f->{'heir'}} = 2; } next if ($f->{'heir'} && !$heiropen{$f->{'heir'}}); # Show actual folder name $fname = $f->{'name'}; $indent = ""; if ($heir{$f->{'heir'}} && $heircount{$f->{'heir'}} > 1) { $fname =~ s/^\Q$f->{'heir'}\E.//; $indent = " " x $heirdepth{$f->{'heir'}}; } print "<div class='leftlink'>$indent", "<a href='mailbox/index.cgi?id=".&urlize($fid)."'". " target=right>$star$fname$umsg</a></div>\n"; } # Show search box print "<div class='leftlink'>$text{'left_search'} ", &ui_textbox("search", undef, 15),"</div>\n"; # Show manage folders, mail preferences and change password links %mconfig = %mailbox::config; if (!%mconfig) { %mconfig = &foreign_config("mailbox"); } print "<hr>\n"; # Folder list link print "<div class='linkwithicon'><img src='images/mail-small.gif' alt=''>\n"; $fprog = $mconfig{'mail_system'} == 4 && &get_webmin_version() >= 1.227 ? "list_ifolders.cgi" : "list_folders.cgi"; print "<div class='aftericon'><a target=right href='mailbox/$fprog'>$text{'left_folders'}</a></div></div>\n"; print "<div class='linkwithicon'><img src='images/address-small.gif' alt=''>\n"; print "<div class='aftericon'><a target=right href='mailbox/list_addresses.cgi'>$text{'left_addresses'}</a></div></div>\n"; # Preferences for read mail link if (!$mconfig{'noprefs'}) { print "<div class='linkwithicon'><img src='images/usermin-small.gif' alt=''>\n"; print "<div class='aftericon'><a target=right href='uconfig.cgi?mailbox'>$text{'left_prefs'}</a></div></div>\n"; } # Mail filter link, if installed and if not over-ridden if (&foreign_available("filter")) { &foreign_require("filter", "filter-lib.pl"); if (!defined(&filter::no_user_procmailrc) || !&filter::no_user_procmailrc()) { # Forwarding link, unless it isn't available if (defined(&filter::can_simple_forward) && &filter::can_simple_forward()) { print "<div class='linkwithicon'><img src='images/forward.gif' alt=''>\n"; print "<div class='aftericon'><a target=right href='filter/edit_forward.cgi'>$text{'left_forward'}</a></div></div>\n"; } # Autoreply link, unless it isn't available if (defined(&filter::can_simple_autoreply) && &filter::can_simple_autoreply()) { print "<div class='linkwithicon'><img src='images/autoreply.gif' alt=''>\n"; print "<div class='aftericon'><a target=right href='filter/edit_auto.cgi'>$text{'left_autoreply'}</a></div></div>\n"; } # Filter mail link print "<div class='linkwithicon'><img src='images/filter.gif' alt=''>\n"; print "<div class='aftericon'><a target=right href='filter/'>$text{'left_filter'}</a></div></div>\n"; } } # Change password link if (&foreign_available("changepass")) { print "<div class='linkwithicon'><img src='images/pass.gif' alt=''>\n"; print "<div class='aftericon'><a target=right href='changepass/'>$text{'left_pass'}</a></div></div>\n"; } # Edit signature link if (&foreign_available("mailbox")) { print "<div class='linkwithicon'><img src='images/sig.gif' alt=''>\n"; print "<div class='aftericon'><a target=right href='mailbox/edit_sig.cgi'>$text{'left_sig'}</a></div></div>\n"; } } if ($mode eq "vm2" && $server) { $status = $server->{'status'}; $t = $server->{'manager'}; # Show status of current server $statusmsg = &server_manager::describe_status($server, 1, 0); print "<div class='leftlink'>",&text('left_vm2status', $statusmsg), "</div>\n"; # Get actions for this system provided by Cloudmin @actions = grep { $_ && keys(%$_) > 0 } &server_manager::get_server_actions($server); foreach $b (@actions) { $b->{'desc'} = $text{'leftvm2_'.$b->{'id'}} if ($text{'leftvm2_'.$b->{'id'}}); } # Work out action categories, and show those under each my @cats = sort { $a cmp $b } &unique(map { $_->{'cat'} } @actions); foreach my $c (@cats) { my @incat = grep { $_->{'cat'} eq $c } @actions; if ($c) { # Start of opener &print_category_opener("cat_$c", \@cats, $server_manager::text{'cat_'.$c} || $incat[0]->{'catname'}); print "<div class='itemhidden' id='cat_$c'>\n"; } foreach my $b (sort { $b->{'priority'} <=> $a->{'priority'} || ($a->{'title'} || $a->{'desc'}) cmp ($b->{'title'} || $b->{'desc'})} @incat) { if ($b->{'link'} =~ /\//) { $url = $b->{'link'}; } elsif ($b->{'link'}) { $url = "server-manager/$b->{'link'}"; } else { $url = "server-manager/save_serv.cgi?id=$server->{'id'}&$b->{'id'}=1"; } $title = $b->{'title'} || $b->{'desc'}; # XXX class=leftlink &print_category_link($url, $title, undef, undef, $b->{'target'}, !$c); } if ($c) { # End of opener print "</div>\n"; } } } if ($mode eq "vm2") { # Get global settings, add Module Config @vservers = grep { $_->{'status'} eq 'virt' } @servers; ($glinks, $gtitles, $gicons, $gcats) = &server_manager::get_global_links(scalar(@vservers)); $glinks = [ map { "server-manager/$_" } @$glinks ]; $gcats = [ map { $_ || "settings" } @$gcats ]; if (!$server_manager::access{'noconfig'}) { push(@$glinks, "config.cgi?server-manager"); push(@$gtitles, $text{'left_vm2config'}); push(@$gicons, undef); push(@$gcats, 'settings'); } # Show global settings, under categories @ugcats = &unique(@$gcats); if (@ugcats) { print "<hr>\n"; } foreach $c (@ugcats) { &print_category_opener($c, undef, $server_manager::text{'cat_'.$c} || $text{'left_vm2'.$c}); print "<div class='itemhidden' id='$c'>\n"; for($i=0; $i<@$glinks; $i++) { next if ($gcats->[$i] ne $c); &print_category_link($glinks->[$i], $gtitles->[$i]); } print "</div>\n"; } # Show add / create links @alllinks = &server_manager::get_available_create_links(); if (@alllinks) { print "<hr>\n"; } @createlinks = grep { $_->{'create'} } @alllinks; @addlinks = grep { !$_->{'create'} } @alllinks; if (scalar(@createlinks) + scalar(@addlinks) <= 3) { # Collapse to one section @newlinks = ( @createlinks, @addlinks ); @createlinks = @addlinks = ( ); } foreach $ml ([ "create", \@createlinks ], [ "add", \@addlinks ], [ "new", \@newlinks ]) { ($m, $l) = @$ml; if (@$l == 1) { $c = $l->[0]; $form = $c->{'link'} ? $c->{'link'} : $c->{'create'} ? 'create_form.cgi' : 'add_form.cgi'; print "<div class='leftlink'><a href='server-manager/$form?type=$c->{'type'}' target=right>$c->{'desc'}</a></div>\n"; } elsif (@$l) { &print_category_opener($m, undef, $text{'left_vm2'.$m}); print "<div class='itemhidden' id='$m'>\n"; foreach $c (@$l) { $form = $c->{'link'} ? $c->{'link'} : $c->{'create'} ? 'create_form.cgi' : 'add_form.cgi'; &print_category_link( "server-manager/$form?". "type=$c->{'type'}", $c->{'desc'}); } print "</div>\n"; } } # Show list of all systems print "<div class='linkwithicon'><img src='images/vm2-small.png' alt=''><b><div class='aftericon'><a href='server-manager/index.cgi' target=right>$text{'left_vm2'}</a></b></div></div>\n"; } if ($mode eq "webmin" || $mode eq "usermin") { # Work out what modules and categories we have @cats = &get_visible_modules_categories(); @catnames = map { $_->{'code'} } @cats; if ($gconfig{"notabs_${base_remote_user}"} == 2 || $gconfig{"notabs_${base_remote_user}"} == 0 && $gconfig{'notabs'}) { # Show modules in one list foreach $minfo (map { @{$_->{'modules'}} } @cats) { &print_category_link("$minfo->{'dir'}/", $minfo->{'desc'}, undef, undef, $minfo->{'noframe'} ? "_top" : "", 1); } } else { # Show all modules under categories foreach $c (@cats) { # Show category opener, plus modules under it &print_category_opener($c->{'code'}, \@catnames, $c->{'unused'} ? "<font color=#888888>$c->{'desc'}</font>" : $c->{'desc'}); print "<div class='itemhidden' id='$c->{'code'}'>"; foreach $minfo (@{$c->{'modules'}}) { &print_category_link("$minfo->{'dir'}/", $minfo->{'desc'}, undef, undef, $minfo->{'noframe'} ? "_top" : ""); } print "</div>\n"; } } print "<hr>\n"; } # Show system information link print "<div class='linkwithicon'><img src='images/gohome.png' alt=''>\n"; if ($mode eq "vm2") { $sparam = $server ? "&$server->{'id'}" : ""; print "<div class='aftericon'><a target=right href='right.cgi?open=system&open=vm2servers&open=vm2limits&open=vm2usage&open=updates&open=owner$sparam'>$text{'left_home3'}</a></div></div>\n"; } elsif (&get_product_name() eq 'usermin') { print "<div class='aftericon'><a target=right href='right.cgi?open=system&open=common'>$text{'left_home2'}</a></div></div>\n"; } else { $dparam = $d ? "&dom=$d->{'id'}" : ""; print "<div class='aftericon'><a target=right href='right.cgi?open=system&auto=status&open=updates&open=reseller$dparam'>$text{'left_home'}</a></div></div>\n"; } # Show refresh modules like if ($mode eq "webmin" && &foreign_available("webmin")) { print "<div class='linkwithicon'><img src='images/reload.png' alt=''>\n"; print "<div class='aftericon'><a target=right href='webmin/refresh_modules.cgi'>$text{'main_refreshmods'}</a></div></div>\n"; } # Show logout link &get_miniserv_config(\%miniserv); if ($miniserv{'logout'} && !$ENV{'SSL_USER'} && !$ENV{'LOCAL_USER'} && $ENV{'HTTP_USER_AGENT'} !~ /webmin/i) { print "<div class='linkwithicon'><img src='images/stock_quit.png' alt=''>\n"; if ($main::session_id) { print "<div class='aftericon'><a target=_top href='session_login.cgi?logout=1'>$text{'main_logout'}</a></div>"; } else { print "<div class='aftericon'><a target=_top href='switch_user.cgi'>$text{'main_switch'}</a></div>"; } print "</div>\n"; } # Show link back to original Webmin server if ($ENV{'HTTP_WEBMIN_SERVERS'}) { print "<div class='linkwithicon'><img src='images/webmin-small.gif' alt=''>\n"; print "<div class='aftericon'><a target=_top href='$ENV{'HTTP_WEBMIN_SERVERS'}'>$text{'header_servers'}</a></div></div>"; } if (($mode eq "webmin" || $mode eq "usermin") && $cansearch) { # Show module/help search form print $text{'left_search'}," "; print &ui_textbox("search", undef, 15); } print "</form>\n" if ($doneform); # Search form for Virtualmin modules only if (($mode eq "virtualmin" && $hasvirt || $mode eq "vm2" && $hasvm2) && $cansearch) { print "<form action=webmin_search.cgi target=right style='display:inline'>\n"; print "<div class='leftlink'>$text{'left_search'} ", &ui_textbox("search", undef, 15),"</div>\n"; @searchmods = ( ); if ($mode eq "virtualmin") { push(@searchmods, "virtual-server", @virtual_server::plugins); } if ($mode eq "vm2") { push(@searchmods, "server-manager", @server_manager::plugins); } foreach my $m (@searchmods) { print &ui_hidden("mod", $m); } print &ui_hidden("title", $text{'left_vmsearch'}); print &ui_hidden("dom", $d->{'id'}) if ($d); print "</form>\n"; } print "</td></tr></tbody></table>\n"; print "</div>\n"; &popup_footer(); # print_category_opener(name, &allcats, label) # Prints out an open/close twistie for some category sub print_category_opener { local ($c, $cats, $label) = @_; local @others = grep { $_ ne $c } @$cats; local $others = join("&", map { $_."=".$in{$_} } @others); $others = "&$others" if ($others); $others .= "&dom=$did"; $others .= "&mode=$mode"; $label = $c eq "others" ? $text{'left_others'} : $label; # Show link to close or open catgory print "<div class='linkwithicon'>"; print "<a href=\"javascript:toggleview('$c','toggle$c')\" id='toggle$c'><img border='0' src='images/closed.gif' alt='[+]'></a>\n"; print "<div class='aftericon'><a href=\"javascript:toggleview('$c','toggle$c')\" id='toggletext$c'><font color='#000000'>$label</font></a></div></div>\n"; } sub print_category_link { print &category_link(@_); } sub category_link { local ($link, $label, $image, $noimage, $target, $noindent) = @_; $target ||= "right"; return ($noindent ? "<div class='leftlink'>" : "<div class='linkindented'>"). "<a target='$target' href='$link'>$label</a></div>\n"; } sub print_virtualmin_link { local ($l, $cls, $icon) = @_; local $t = $l->{'target'} || "right"; if ($icon) { print "<div class='linkwithicon'><img src='images/$l->{'icon'}.png' alt=''>\n"; } print "<div class='$cls'>"; print "<b>" if ($l->{'icon'} eq 'index'); print "<a href='$l->{'url'}' target=$t>$l->{'title'}</a>"; print "</b>" if ($l->{'icon'} eq 'index'); print "</div>"; if ($icon) { print "</div>"; } print "\n"; } sub shorten_hostname { local ($server) = @_; return $server->{'short_host'} if ($server->{'short_host'}); local $show = $server->{'host'}; local $rv; local $name_max = 20; if (length($show) > $name_max) { # Show first and last max/2 chars, with ... between local $s = int($name_max / 2); $rv = substr($show, 0, $s)."...".substr($show, -$s); } else { $rv = $show; } $rv =~ s/ / /g; return $rv; }y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`