Compare commits

...

128 Commits
1.720 ... 1.730

Author SHA1 Message Date
Jamie Cameron
10eb872ec5 Finally fix some long-standing perl warnings about undef strings 2014-12-30 23:19:14 -08:00
Jamie Cameron
95a2815ea6 Declare variable to prevent skipping of options on subsequent calls 2014-12-30 23:07:51 -08:00
Jamie Cameron
38e698aab9 Merge branch 'master' of git@github.com:webmin/webmin 2014-12-30 22:34:52 -08:00
Jamie Cameron
bea0787a10 If searching by file, only open diffs for matching files 2014-12-30 22:33:07 -08:00
Joe Cooper
8ae37f2c09 strict and warnings conversion. remove & from sub calls. 2014-12-30 19:34:55 -06:00
Jamie Cameron
44287db830 Logout link should go to top window 2014-12-30 17:08:11 -08:00
Jamie Cameron
591d8e1f01 Multiple modules may use the same ID 2014-12-30 14:35:41 -08:00
Jamie Cameron
e0c17bc26c Version bump 2014-12-29 22:49:59 -08:00
Jamie Cameron
90c3d79967 Merge branch 'master' of git@github.com:webmin/webmin 2014-12-29 22:37:37 -08:00
Jamie Cameron
c6d9112581 changelog for permissions fix 2014-12-29 22:36:42 -08:00
Joe Cooper
95bb656222 A few perlcritic fixes 2014-12-29 22:50:44 -06:00
Joe Cooper
431f55fd4c Fix image links, convert some local vars to my vars 2014-12-29 22:42:05 -06:00
Jamie Cameron
9a1b5a19d7 Fix function name typo 2014-12-29 13:56:45 -08:00
Jamie Cameron
8116d356cd Fix join warning by converting undefs to empty strings 2014-12-29 09:44:42 -08:00
Jamie Cameron
72235d84a4 Create array before using it 2014-12-28 21:37:03 -08:00
Jamie Cameron
77600ecbcf Add function to safely delete a file 2014-12-28 21:32:23 -08:00
Jamie Cameron
4fa0168437 Don't read a missing file, again 2014-12-28 21:29:15 -08:00
Jamie Cameron
53664157fc Don't read a missing file 2014-12-28 21:28:43 -08:00
Jamie Cameron
86fca5f20b Use correct permissions for folder moves 2014-12-28 17:27:27 -08:00
Jamie Cameron
3eb55ffee4 Remove debug message 2014-12-28 13:42:20 -08:00
Jamie Cameron
c031dfcb18 Allow nested calls to switch function, check perms when copying a folder 2014-12-27 20:26:48 -08:00
Jamie Cameron
cffb8971b3 Deal with modules that don't need a UI for the status monitor 2014-12-27 20:09:22 -08:00
Jamie Cameron
1323ae9191 Increase copy buffer size for more efficiency 2014-12-27 17:16:09 -08:00
Jamie Cameron
b4fa4db0d6 Update more functions to operate as the correct user 2014-12-27 16:40:37 -08:00
Jamie Cameron
200dae2390 Handle relative links to sites-available properly http://virtualmin.com/node/35658 2014-12-27 12:09:06 -08:00
Jamie Cameron
7bfd7ced5d Fix timeout of unkown session error 2014-12-27 11:11:44 -08:00
Jamie Cameron
f098a1a6f1 HTML escape OS and version 2014-12-25 18:17:50 -08:00
Jamie Cameron
f0e7c038ed German translation updates from Raymond Vetter 2014-12-22 23:18:26 -08:00
Jamie Cameron
2ea378e63d Allow modules to veto blocks from other modules 2014-12-22 14:49:33 -08:00
Jamie Cameron
44a8f78212 Merge branch 'master' of git@github.com:webmin/webmin 2014-12-22 14:41:54 -08:00
Jamie Cameron
1a4e3bcab6 Add ID to overall system info 2014-12-22 14:41:41 -08:00
Joe Cooper
be2db73504 Merge branch 'master' of github.com:webmin/webmin 2014-12-21 04:50:37 -06:00
Joe Cooper
236250c344 Revert because something mysterious is broken when variables are
localized and such. I have no idea what, but long file lists get concatenated
when using the new version (or maybe long HTML pages).
2014-12-21 04:49:30 -06:00
Joe Cooper
3595cbde04 Perl path to /usr/local/bin/perl 2014-12-20 19:04:55 -06:00
Joe Cooper
8685fd23e8 Remove strict and warn, as it causes a bunch of warnings when
executing. A bunch of undefined things need to be defined, but
I don't understand it well enough yet to make it happen.
2014-12-20 18:50:03 -06:00
Jamie Cameron
1728a31105 Show headers above sections 2014-12-20 16:01:41 -08:00
Jamie Cameron
3293374843 Support new param for link target 2014-12-20 13:57:37 -08:00
Jamie Cameron
e9030b6d2d Catalan updates 2014-12-20 12:23:34 -08:00
Jamie Cameron
a4b5951dda give credit for translations 2014-12-20 12:22:32 -08:00
Jamie Cameron
e0a1b43518 Catalan update from Jaume Badiella 2014-12-20 12:21:36 -08:00
Jamie Cameron
77c87bc228 Catalan update from Jaume Badiella 2014-12-20 12:21:15 -08:00
Jamie Cameron
8838cf6b50 Support for wide table rows 2014-12-19 19:37:30 -08:00
Jamie Cameron
521cfd6afd Support links on right frame, and add one to refresh system info 2014-12-19 17:09:50 -08:00
Jamie Cameron
a44eb9cd3d Support openable status blocks 2014-12-19 15:22:47 -08:00
Jamie Cameron
4c11ecfaa3 Fix chart that disappeared 2014-12-19 15:16:52 -08:00
Jamie Cameron
81a13478a4 Allow manual editing of all config files 2014-12-18 23:50:28 -08:00
Jamie Cameron
593f8ed232 Timeout must be > 0 2014-12-18 20:23:23 -08:00
Jamie Cameron
38fc48e893 Add validation for timeout field https://sourceforge.net/p/webadmin/bugs/4526/ 2014-12-18 20:21:56 -08:00
Jamie Cameron
ef3cbdda13 Dalvik user agent is used by mobiile browsers 2014-12-18 16:53:18 -08:00
Jamie Cameron
6a2127e3f8 Remove obsolete options 2014-12-18 16:48:02 -08:00
Jamie Cameron
28822295d5 German translation updates from Raymond Vetter 2014-12-17 20:11:37 -08:00
Jamie Cameron
bd1e2ca828 Add param for selecting user to backup as 2014-12-17 14:54:32 -08:00
Jamie Cameron
dc4ea2a94d Complete support for showing warnings on right frame 2014-12-17 14:54:09 -08:00
Jamie Cameron
5eb9821920 Extend API for right frame 2014-12-17 14:08:56 -08:00
Jamie Cameron
0b35796814 Respect commented out squid cache dir https://sourceforge.net/p/webadmin/bugs/4523/ 2014-12-17 10:42:34 -08:00
Jamie Cameron
2ede9a5cae Merge branch 'master' of git@github.com:webmin/webmin 2014-12-16 21:47:19 -08:00
Jamie Cameron
895e5bbbd1 Don't fail just because some system actions can't be looked up https://sourceforge.net/p/webadmin/bugs/4522/ 2014-12-16 21:43:57 -08:00
Joe Cooper
1b5a7b0218 strictures and warnings update 2014-12-16 03:28:00 -06:00
Jamie Cameron
908edc961f Modify mail safely 2014-12-15 22:44:59 -08:00
Jamie Cameron
115683ca39 Use correct permissions when writing mail 2014-12-15 22:36:57 -08:00
Jamie Cameron
b1a0f07c3a More work on using correct permissions for folder ops 2014-12-15 22:31:04 -08:00
Jamie Cameron
a97677018e German translation updates from Raymond Vetter 2014-12-14 19:45:45 -08:00
Jamie Cameron
152ce12fc3 Use folder permissions for opendir 2014-12-14 11:33:33 -08:00
Jamie Cameron
c250754496 Start of work on reading mail folders with permissions of the owner 2014-12-14 11:04:55 -08:00
Jamie Cameron
bff24c157c Allow un-applying when in direct editing mode http://virtualmin.com/node/35467 2014-12-14 10:16:48 -08:00
Jamie Cameron
64a79b77cb Functions for safely reading and writing mail files 2014-12-13 19:58:49 -08:00
Jamie Cameron
adda7e7b87 Remove ancient check clicks function 2014-12-13 18:19:14 -08:00
Jamie Cameron
b6f2167e02 Remove functions that we've marked as useless now 2014-12-13 11:17:09 -08:00
Jamie Cameron
a4ea571e8e Remove useless comments 2014-12-13 11:15:15 -08:00
Jamie Cameron
704a70169a By default use start/stop commands that are compatible with systemd as well http://sourceforge.net/p/webadmin/bugs/4521/ 2014-12-13 10:49:14 -08:00
Jamie Cameron
59f2fd488e Cache negative UUID lookups 2014-12-12 21:21:52 -08:00
Jamie Cameron
7226c6d943 German translation updates from Raymond Vetter 2014-12-11 22:18:11 -08:00
Jamie Cameron
6f72be02b1 Fix typos 2014-12-11 22:17:59 -08:00
Jamie Cameron
bd683637c0 Log resolved hostname on login and logout http://sourceforge.net/p/webadmin/bugs/4520 2014-12-11 17:05:15 -08:00
Jamie Cameron
d2ca839d0a Always delete lock before creating 2014-12-11 13:06:47 -08:00
Jamie Cameron
3fd769a8a1 Force non-root users to enter a server name https://sourceforge.net/p/webadmin/bugs/4519/ 2014-12-11 11:26:58 -08:00
Jamie Cameron
a87400c0ea Add support for charts 2014-12-10 22:01:35 -08:00
Jamie Cameron
a80248b068 BIND needs new zone files to be group readable 2014-12-09 21:23:59 -08:00
Jamie Cameron
217f691850 Set some new mysql.user fields 2014-12-09 21:05:54 -08:00
Jamie Cameron
2a451a411a German translation updates from Raymond Vetter 2014-12-09 19:11:17 -08:00
Jamie Cameron
85ecfa47a4 Delete .lock files that are hard links 2014-12-09 19:08:06 -08:00
Jamie Cameron
4c0e851424 Make temp files unreadable by other users 2014-12-09 19:02:19 -08:00
Jamie Cameron
cc4442b140 Show charts 2014-12-09 17:02:34 -08:00
Jamie Cameron
2cfd48f095 Don't create virtualhost dir if user cannot be determined https://sourceforge.net/p/webadmin/bugs/4518/ 2014-12-09 16:44:15 -08:00
Jamie Cameron
b5772892df Start of work to show status from new API 2014-12-08 23:05:42 -08:00
Jamie Cameron
28ce1fd358 Show CPU and drive temps 2014-12-08 23:04:00 -08:00
Jamie Cameron
6697810b99 Actually there is no need to support a different right.cgi, as this theme will be package with Webmin. Also, remove refereces to Virtualmin. 2014-12-08 22:50:02 -08:00
Jamie Cameron
860fc5464b Strict and warnings complaince 2014-12-08 22:46:30 -08:00
Jamie Cameron
6754be9cd9 Convert gray theme to use new API for modules and left side nagivation 2014-12-08 18:52:18 -08:00
Jamie Cameron
bc105a9038 Clarify meaning of chart type 2014-12-08 18:50:34 -08:00
Jamie Cameron
439ca40645 Remove confusing message 2014-12-08 18:45:08 -08:00
Jamie Cameron
4b723c2c53 If the old blue theme is selected, change it to gray theme 2014-12-08 14:53:13 -08:00
Jamie Cameron
b9a27b27da Blue theme is now just a copy of gray theme for compatibility reasons 2014-12-07 18:15:42 -08:00
Jamie Cameron
a84f077a93 Return old blue theme 2014-12-07 18:12:52 -08:00
Jamie Cameron
4a6d43eb62 Stop linking to blue theme 2014-12-07 18:07:37 -08:00
Jamie Cameron
8e2dddb959 Start creating a separate theme .pl file 2014-12-07 17:55:40 -08:00
Jamie Cameron
b8c98bebfe Start creating a separate theme .pl file 2014-12-07 17:51:30 -08:00
Jamie Cameron
d697f904dc More work on new system inf ofunction 2014-12-07 16:21:26 -08:00
Jamie Cameron
5b9fed246f Start of work on new system info provider 2014-12-07 11:23:10 -08:00
Jamie Cameron
7bb7b9719a Strict and warnings compliance 2014-12-07 10:57:35 -08:00
Jamie Cameron
33b6270467 Define new API function for right-frame info 2014-12-06 15:42:59 -08:00
Jamie Cameron
b34a096b23 Add API function for theme authors to get the menu of Webmin modules 2014-12-06 14:49:48 -08:00
Jamie Cameron
dd114f4bf5 Merge branch 'master' of git@github.com:webmin/webmin 2014-12-05 21:40:35 -08:00
Jamie Cameron
e12e75639a Add support for NSEC3PARAM records 2014-12-05 21:39:46 -08:00
Joe Cooper
9311335206 Fix img link. 2014-12-05 17:19:08 -06:00
Jamie Cameron
b7684cd544 German translation updates from Raymond Vetter 2014-12-05 13:26:10 -08:00
Jamie Cameron
f36b480df8 Use proper params 2014-12-03 20:14:55 -08:00
Jamie Cameron
4c54492b4e Show number of rule users 2014-12-03 20:14:15 -08:00
Jamie Cameron
c2b42e9e38 Work on NSEC3PARAM record type support 2014-12-03 20:13:58 -08:00
Jamie Cameron
cd40c2072c Show number of rule users 2014-12-03 19:24:33 -08:00
Jamie Cameron
4c3da19911 Document new param properly 2014-12-02 20:29:40 -08:00
Jamie Cameron
c8bd68190e Document new param 2014-12-02 20:15:45 -08:00
Jamie Cameron
706cf5c1db Hide SSL icon for non-SSL sites http://virtualmin.com/node/35457 2014-12-01 22:39:00 -08:00
Jamie Cameron
e8232c6be1 Open new usermin port on firewall https://virtualmin.com/node/35448 2014-11-30 20:27:23 -08:00
Jamie Cameron
7ac3b37d14 Port fixes to ip_match function to webmin configuration module 2014-11-30 15:04:16 -08:00
Jamie Cameron
22af9bc18e Just having a dash doesn't mean a string is an IP range https://sourceforge.net/p/webadmin/bugs/4511/ 2014-11-30 15:02:12 -08:00
Jamie Cameron
ecfff11982 Use tar to backup /etc/webmin , and exclude known large directories 2014-11-29 22:58:27 -08:00
Jamie Cameron
870acb09e0 Prevent double inclusion 2014-11-29 15:07:48 -08:00
Jamie Cameron
4affdb6338 Actually export new function 2014-11-29 14:44:03 -08:00
Jamie Cameron
0ca360f610 More strict conversion 2014-11-29 14:43:42 -08:00
Jamie Cameron
ea32cfc6ee Strict and warnings compliance 2014-11-29 14:30:15 -08:00
Jamie Cameron
56ae0eca2e Prevent duplicate require when in strict mode 2014-11-29 14:19:08 -08:00
Jamie Cameron
f9ea811781 Allow caseless match 2014-11-28 17:55:00 -08:00
Jamie Cameron
0aa5a5f465 Don't allow viewing directory index by default http://sourceforge.net/p/webadmin/bugs/4514 2014-11-28 11:28:15 -08:00
Jamie Cameron
a1b6645633 Fix incorrect string https://www.virtualmin.com/node/35413 2014-11-27 23:12:53 -08:00
Jamie Cameron
552ee47540 German translation updates from Raymond Vetter 2014-11-24 19:13:32 -08:00
Jamie Cameron
ac3fdd0d62 German translation updates from Raymond Vetter 2014-11-24 19:13:28 -08:00
Jamie Cameron
86357937f5 Fix item granting to use new server API 2014-11-23 10:27:21 -08:00
999 changed files with 3016 additions and 4611 deletions

View File

@@ -208,3 +208,7 @@ Catalan updates, thanks to Jaume Badiella.
Added additional protected against Shellshock exploits made via the Webmin webserver.
---- Changes since 1.710 ----
SSL v2 and v3 are now disabled by default at Webmin install time, to block the POODLE attack. They can be re-enabled on the SSL Encryption page of the Webmin Configuration module.
---- Changes since 1.720 ----
Deprecated the old blue-theme in favor of the new gray-theme.
Catalan translation updates from Jaume Badiella.
More German translation updates, thanks to Raymond Vetter.

2
README
View File

@@ -1,4 +1,4 @@
Webmin Version 1.720
Webmin Version 1.730
--------------------
Webmin is a web-based interface for system administration for Unix.
Using any browser that supports tables and forms, you can setup user

File diff suppressed because one or more lines are too long

View File

@@ -462,7 +462,10 @@ else {
my $deny = $user->{'deny'} || "";
$deny =~ s/:/;/g;
&print_tempfile($fh,
"$user->{'name'}:$user->{'pass'}:$user->{'sync'}:$user->{'cert'}:",
$user->{'name'},":",
$user->{'pass'},":",
($user->{'sync'} || ""),":",
($user->{'cert'} || ""),":",
($allow ? "allow $allow" :
$deny ? "deny $deny" : ""),":",
join(" ", @times),":",
@@ -647,8 +650,10 @@ else {
if ($l =~ /^([^:]+):([^:]*)/ && $1 eq $username) {
&add_old_password($user, "$2", \%miniserv);
&print_tempfile($fh,
"$user->{'name'}:$user->{'pass'}:",
"$user->{'sync'}:$user->{'cert'}:",
$user->{'name'},":",
$user->{'pass'},":",
($user->{'sync'} || ""),":",
($user->{'cert'} || ""),":",
($allow ? "allow $allow" :
$deny ? "deny $deny" : ""),":",
join(" ", @times),":",

View File

@@ -1,7 +1,9 @@
use strict;
use warnings;
do "acl-lib.pl";
if (!$main::done_foreign_require{"acl","acl-lib.pl"}) {
do "acl-lib.pl";
}
our (%config, $config_directory);
# useradmin_create_user(&details)
@@ -81,7 +83,7 @@ if ($u && $u->{'sync'}) {
}
if ($_[0]->{'user'} ne $_[0]->{'olduser'}) {
if ($_[0]->{'olduser'} && $_[0]->{'user'} ne $_[0]->{'olduser'}) {
# Check other users' acl module acls
foreach my $u (&list_users()) {
my %uaccess = &get_module_acl($u->{'name'});

View File

@@ -1101,19 +1101,20 @@ close(USERS);
# some context (global, virtual, directory or htaccess)
sub config_icons
{
local ($ctx, $prog) = @_;
local($m, $func, $e, %etype, $i, $c);
foreach $m (sort { $a cmp $b } (keys %httpd_modules)) {
$func = $m."_directives";
if (defined(&$func)) {
foreach $e (&$func($httpd_modules{$m})) {
if ($e->{$_[0]}) { $etype{$e->{'type'}}++; }
if ($e->{$ctx}) { $etype{$e->{'type'}}++; }
}
}
}
local (@titles, @links, @icons);
for($i=0; $text{"type_$i"}; $i++) {
if ($etype{$i} && $access_types{$i}) {
push(@links, $_[1]."type=$i");
push(@links, $prog."type=$i");
push(@titles, $text{"type_$i"});
push(@icons, "images/type_icon_$i.gif");
}
@@ -1843,7 +1844,8 @@ if ($config{'link_dir'}) {
opendir(LINKDIR, $config{'link_dir'});
foreach my $f (readdir(LINKDIR)) {
if ($f ne "." && $f ne ".." &&
(&resolve_links($config{'link_dir'}."/".$f) eq $file ||
(&simplify_path(
&resolve_links($config{'link_dir'}."/".$f)) eq $file ||
$short eq $f)) {
&unlink_logged($config{'link_dir'}."/".$f);
}

View File

@@ -3,9 +3,9 @@ httpd_dir=/srv/www
httpd_conf=/etc/apache2/httpd.conf
mime_types=/etc/apache2/mime.types
httpd_path=/usr/sbin/httpd2-prefork
start_cmd=/etc/init.d/apache2 start
stop_cmd=/etc/init.d/apache2 stop
apply_cmd=/etc/init.d/apache2 restart
start_cmd=service apache2 start
stop_cmd=service apache2 stop
apply_cmd=service apache2 restart
show_order=0
max_servers=100
test_config=1

View File

@@ -74,15 +74,14 @@ if (!$in{'name_def'}) {
!$in{'root'} || &allowed_auth_file($in{'root'}) ||
&error(&text('cvirt_eroot3', $in{'root'}));
if ($in{'root'} && !-d $in{'root'}) {
if ($in{'root'} && !-e $in{'root'}) {
# create the document root
mkdir($in{'root'}, 0755) ||
&error(&text('cvirt_eroot2', $in{'root'}, $!));
$user = &find_directive("User", $conf);
$group = &find_directive("Group", $conf);
$uid = $user ? getpwnam($user) : 0;
$gid = $group ? getgrnam($group) : 0;
chown($uid, $gid, $in{'root'});
$user || &error($text{'cvirt_eroot4'});
&set_ownership_permissions($user, $group, undef, $in{'root'});
}
# find file to add to
@@ -222,7 +221,7 @@ if ($in{'adddir'} && $in{'root'}) {
{ 'name' => 'allow',
'value' => 'from all' },
{ 'name' => 'Options',
'value' => '+Indexes' },
'value' => 'None' },
] });
}

View File

@@ -417,8 +417,6 @@ if ($access{'create'}) {
&ui_checkbox("nv", 1, $text{'index_nv'}, 1)."<br>" : "").
&ui_checkbox("listen", 1, $text{'index_listen'}, 1));
# Work out sensible default port
# Port
print &ui_table_row($text{'index_port'},
&choice_input(@nvports ? 2 : 0,
@@ -434,8 +432,16 @@ if ($access{'create'}) {
&ui_checkbox("adddir", 1, $text{'index_adddir'}, 1));
# Server name
print &ui_table_row($text{'index_name'},
&opt_input("", "name", $text{'index_auto'}, 30));
if ($access{'virts'} eq '*') {
print &ui_table_row($text{'index_name'},
&opt_input("", "name", $text{'index_auto'}, 30));
}
else {
# Require that non-root users enter a server name, or else it
# will be impossible to grant access to the new virtualhost
print &ui_table_row($text{'index_name'},
&ui_textbox("name", "", 30));
}
# Add to file
print &ui_table_row($text{'index_file'},

View File

@@ -359,6 +359,8 @@ core_ehlimit=$1 no
core_dport=Port per defecte:
core_address=Adreça
core_port=Port
core_portname=Protocol
core_protoany=&lt;Qualsevol&gt;
core_listen=Escolta les adreces i els ports
core_eaddress='$1' no és una adreça vàlida
core_eport='$1' no és un port vàlid

View File

@@ -343,6 +343,7 @@ cvirt_eport='$1' ist kein g&#252;ltiger Port
cvirt_eroot1=Sie m&#252;ssen ein Dokument-Root angeben
cvirt_eroot2=Fehler beim Anlegen des Verzeichnisses '$1' : $2
cvirt_eroot3=Sie sind nicht berechtigt das Root-Verzeichnis '$1' zu benutzen
cvirt_eroot4=Keine Benutzer in der Apache-Konfiguration definiert
cvirt_err=Fehler beim Anlegen des virtuellen Server
cvirt_etaken=Ein virtuellen Server mit dem selben Namen und demselben Port existiert bereits
default_serv=Standard Server

View File

@@ -67,6 +67,7 @@ cvirt_ename='$1' is not a valid server name
cvirt_eroot1=You must enter a document root
cvirt_eroot2=Failed to create directory '$1' : $2
cvirt_eroot3=You are not allowed to use the root directory '$1'
cvirt_eroot4=No User defined in the Apache configuration
cvirt_etaken=A virtual server with the same name and port already exists
cvirt_efile=Failed to write to $1 : $2
cvirt_emissing=The new virtual server was added to $1, but this file is not used by Apache. Check the <a href='$2'>module configuration</a> and make sure the 'File or directory to add virtual servers to' is correct.

View File

@@ -18,6 +18,10 @@ if ($in{'virt'} && $access{'types'} eq '*') {
"name" => $text{'virt_edit'},
"link" => "manual_form.cgi?virt=$in{'virt'}" };
}
if ($v->{'value'} =~ /:80/ && $v->{'value'} !~ /:443/) {
# Hide SSL icon for non-SSL sites
$access_types{14} = 0;
}
&config_icons("virtual", "edit_virt.cgi?virt=$in{'virt'}&", $sw_icon,
$ed_icon ? $ed_icon : ());

View File

@@ -140,3 +140,5 @@ Added a module configuration option to use the SPF type for Sender Permitted Fro
---- Changes since 1.660 ----
Added a warning if the chroot directory that Webmin thinks BIND is using looks wrong.
Slave zone files in raw format can now be displayed by Webmin.
---- Changes since 1.720 ----
Added support for NSEC3PARAM records.

View File

@@ -1124,6 +1124,25 @@ elsif ($type eq "SPF") {
&ui_opt_textbox("spfexp", $spf->{'exp'}, 40,
$text{'value_spfnoexp'}), 3);
}
elsif ($type eq "NSEC3PARAM") {
# NSEC records have a hash type, flags, number of interations, salt
# length and salt
print &ui_table_row($text{'value_NSEC3PARAM1'},
&ui_select("value0", $v[0] || 1,
[ [ 1, "SHA1" ] ], 1, 0, 1));
print &ui_table_row($text{'value_NSEC3PARAM2'},
&ui_select("value1", $v[1],
[ [ 0, $text{'value_delegated'} ],
[ 1, $text{'value_notdelegated'} ] ]));
print &ui_table_row($text{'value_NSEC3PARAM3'},
&ui_textbox("value2", $v[2], 4));
print &ui_table_row($text{'value_NSEC3PARAM5'},
&ui_textbox("value4", $v[4], 20));
}
else {
# All other types just have a text box
print &ui_table_row($text{'value_other'},
@@ -2753,7 +2772,7 @@ $slave_error = $_[0];
sub get_forward_record_types
{
return ("A", "NS", "CNAME", "MX", "HINFO", "TXT", "SPF", "WKS", "RP", "PTR", "LOC", "SRV", "KEY", $config{'support_aaaa'} ? ( "AAAA" ) : ( ), @extra_forward);
return ("A", "NS", "CNAME", "MX", "HINFO", "TXT", "SPF", "WKS", "RP", "PTR", "LOC", "SRV", "KEY", "NSEC3PARAM", $config{'support_aaaa'} ? ( "AAAA" ) : ( ), @extra_forward);
}
sub get_reverse_record_types
@@ -3188,11 +3207,12 @@ foreach my $key (@keys) {
# Remove records
local @recs = &read_zone_file($fn, $dom);
local $tools = &have_dnssec_tools_support();
for(my $i=$#recs; $i>=0; $i--) {
if ($recs[$i]->{'type'} eq 'NSEC' ||
$recs[$i]->{'type'} eq 'NSEC3' ||
$recs[$i]->{'type'} eq 'RRSIG' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
$recs[$i]->{'type'} eq 'DNSKEY') {
&delete_record($fn, $recs[$i]);
}
@@ -3600,10 +3620,11 @@ sub dt_sign_zone
# Remove DNSSEC records and save the unsigned zone file
@recs = &read_zone_file($z, $dom);
local $tools = &have_dnssec_tools_support();
for(my $i=$#recs; $i>=0; $i--) {
if ($recs[$i]->{'type'} eq 'NSEC' ||
$recs[$i]->{'type'} eq 'NSEC3' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
$recs[$i]->{'type'} eq 'RRSIG' ||
$recs[$i]->{'type'} eq 'DNSKEY') {
&delete_record($z, $recs[$i]);
@@ -3679,10 +3700,11 @@ sub dt_resign_zone
# Remove DNSSEC records and save the unsigned zone file
@recs = &read_zone_file($z, $dom);
local $tools = &have_dnssec_tools_support();
for(my $i=$#recs; $i>=0; $i--) {
if ($recs[$i]->{'type'} eq 'NSEC' ||
$recs[$i]->{'type'} eq 'NSEC3' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
$recs[$i]->{'type'} eq 'RRSIG' ||
$recs[$i]->{'type'} eq 'DNSKEY') {
&delete_record($z, $recs[$i]);
@@ -3870,10 +3892,11 @@ sub dt_delete_dnssec_state
# remove DNSSEC records from zonefile
@recs = &read_zone_file($z, $dom);
local $tools = &have_dnssec_tools_support();
for(my $i=$#recs; $i>=0; $i--) {
if ($recs[$i]->{'type'} eq 'NSEC' ||
$recs[$i]->{'type'} eq 'NSEC3' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
$recs[$i]->{'type'} eq 'RRSIG' ||
$recs[$i]->{'type'} eq 'DNSKEY') {
&delete_record($z, $recs[$i]);

View File

@@ -74,7 +74,7 @@ else {
if (@recs) {
@recs = &sort_records(@recs);
foreach $v (keys %text) {
if ($v =~ /^value_([A-Z]+)(\d+)/) {
if ($v =~ /^value_([A-Z0-9]+)(\d+)/) {
$hmap{$1}->[$2-1] = $text{$v};
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -293,6 +293,8 @@ edit_espfip6='$1' is not a valid IPv6 address or IPv6/prefix to allow sending fr
edit_espfinclude='$1' is not a valid additional domain from which mail is sent
edit_espfredirect='$1' is not a valid alternate domain name
edit_espfexp='$1' is a valid record name for a rejection message
edit_ensec3value2=Missing or non-numeric number of iterations
edit_ensec3value2=Missing or non-base64 salt
text_title=Edit Records File
text_title2=View Records File
@@ -369,6 +371,7 @@ type_NS=Name Server
type_CNAME=Name Alias
type_MX=Mail Server
type_HINFO=Host Information
type_NSEC3PARAM=DNSSEC Parameters
type_TXT=Text
type_SPF=Sender Permitted From
type_WKS=Well Known Service
@@ -393,6 +396,7 @@ edit_PTR=Reverse Address
edit_LOC=Location
edit_SRV=Service Address
edit_KEY=Public Key
edit_NSEC3PARAM=DNSSEC Parameters
recs_defttl=Default TTL
recs_A=Address
@@ -410,6 +414,7 @@ recs_LOC=Location
recs_SRV=Service Address
recs_ALL=All
recs_KEY=Public Key
recs_NSEC3PARAM=DNSSEC Parameters
recs_delete=Delete Selected
value_A1=Address
@@ -437,6 +442,13 @@ value_KEY2=Protocol
value_KEY3=Algorithm
value_KEY4=Key data
value_SPF1=SPF specification
value_NSEC3PARAM1=Hash algorithm
value_NSEC3PARAM2=NSEC3 flags
value_NSEC3PARAM3=Number of hash iterations
value_NSEC3PARAM4=Length of salt
value_NSEC3PARAM5=Salt string
value_delegated=Delegated zone
value_notdelegated=Other zone
value_other=Values (one per line)
value_spfa=Allow sending from domain's IP address?
value_spfmx=Allow sending from domain's MX hosts?
@@ -706,7 +718,7 @@ zonedef_this=System hostname ($1)
zonedef_eprins=Missing or invalid default nameserver for master domains
zonedef_dnssec=Create DNSSEC key and sign new zones?
zonedef_dnssec_dt=Automate all DNSSEC operations (ignore other settings below)?
zonedef_dne=Authenticated Denial of Existance Using
zonedef_dne=Authenticated Denial of Existence Using
zonedef_alg=Initial key algorithm
zonedef_size=Initial key size
zonedef_single=Number of keys to create

View File

@@ -339,6 +339,16 @@ else {
}
$vals = "\"".&join_spf($spf)."\"";
}
elsif ($in{'type'} eq 'NSEC3PARAM') {
# Save DNSSEC parameters
$in{'value2'} =~ /^\d+$/ ||
&error($text{'edit_ensec3value2'});
$in{'value4'} =~ /^[a-zA-Z0-9\+\/]+$/ ||
&error($text{'edit_ensec3value2'});
$vals = join(" ", "(", $in{'value0'}, $in{'value1'},
$in{'value2'}, length($in{'value4'}),
$in{'value4'}, ")");
}
else {
# For other record types, just save the lines
$in{'values'} =~ s/\r//g;

1
blue-theme Symbolic link
View File

@@ -0,0 +1 @@
gray-theme

View File

@@ -1,22 +0,0 @@
---- Changes since 1.280 ----
First version of this theme.
---- Changes since 1.290 ----
The current category name is now underlined.
Reduced the thickness of border lines.
All icons are now shown half the usual size, with the titles to the right instead of below.
---- Changes since 1.300 ----
Totally re-worked theme to use a new framed design, with a Javascript collapsing category menu.
---- Changes since 1.310 ----
Added Webmin Servers link on the left menu, when accessed via the Webmin Servers Index module.
---- Changes since 1.320 ----
Added a feedback link to the left menu, but only when a custom feedback address is set.
---- Changes since 1.330 ----
Updated the color schema to match the new webmin.com, and made table borders and forms nicer (thanks to Joe).
Added a whole new set of icons from Virtualmin.
---- Changes since 1.340 ----
Fixed bad table indentation on some browsers.
Changed link colors to be darker.
---- Changes since 1.400 ----
Display system uptime in the right frame after logging in.
---- Changes since 1.430 ----
Updated CSS and all UI elements to match the Virtualmin theme, except for colors and icons.

View File

@@ -1,15 +0,0 @@
cs_header=427AD1 class='maintitle'
cs_table=EFEFEF class='mainbody'
texttitles=1
functions=theme.pl
applet_body=e8e8ea
applet_text=000000
applet_light_edge=dadaf0
applet_dark_edge=333366
applet_light_edge_hi=dadaf8
applet_dark_edge_hi=333350
applet_dark_bg=8888aa
applet_light_bg=ffffff
noindex=1
inframe=1
framed=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 800 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 768 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 B

View File

@@ -1,68 +0,0 @@
<public:component>
<public:attach event="onpropertychange" onevent="doFix()" />
<script type="text/javascript">
// IE5.5+ PNG Alpha Fix v1.0RC4
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com
// This is licensed under the CC-GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
// This must be a path to a blank image. That's all the configuration you need.
if (typeof blankImg == 'undefined') var blankImg = '/images/blank.gif';
var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
function filt(s, m)
{
if (filters[f])
{
filters[f].enabled = s ? true : false;
if (s) with (filters[f]) { src = s; sizingMethod = m }
}
else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
}
function doFix()
{
// Assume IE7 is OK.
if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
(event && !/(background|src)/.test(event.propertyName))) return;
var bgImg = currentStyle.backgroundImage || style.backgroundImage;
if (tagName == 'IMG')
{
if ((/\.png$/i).test(src))
{
if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
style.width = offsetWidth + 'px';
filt(src, 'scale');
src = blankImg;
}
else if (src.indexOf(blankImg) < 0) filt();
}
else if (bgImg && bgImg != 'none')
{
if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
{
var s = RegExp.$1;
if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
style.width = offsetWidth + 'px';
style.backgroundImage = 'none';
filt(s, 'crop');
// IE link fix.
for (var n = 0; n < childNodes.length; n++)
if (childNodes[n].style) childNodes[n].style.position = 'relative';
}
else filt();
}
}
doFix();
</script>
</public:component>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 584 B

View File

@@ -1,42 +0,0 @@
#!/usr/bin/perl
BEGIN { push(@INC, ".."); };
use WebminCore;
&ReadParse();
&init_config();
%text = &load_language($current_theme);
if ($in{'mod'}) {
$minfo = { &get_module_info($in{'mod'}) };
}
else {
$minfo = &get_goto_module();
}
$goto = $minfo ? "$minfo->{'dir'}/" :
$in{'page'} ? "" :
"right.cgi?open=system&open=status";
if ($minfo) {
$cat = "?$minfo->{'category'}=1";
}
if ($in{'page'}) {
$goto .= "/".$in{'page'};
}
# Show frameset
$title = &get_html_framed_title();
$cols = &get_product_name() eq 'usermin' ? 180 : 230;
&popup_header($title, undef, undef, 1);
print <<EOF;
<frameset cols="$cols,*" border=0>
<frame name="left" src="left.cgi$cat" scrolling="auto">
<frame name="right" src="$goto" noresize>
<noframes>
<body>
<p>This page uses frames, but your browser doesn't support them.</p>
</body>
</noframes>
</frameset>
EOF
&popup_footer(1);

View File

@@ -1,44 +0,0 @@
left_login=Identificació: $1
left_home=Informació del Sistema
left_oc=Esponsoritzat per OpenCountry
left_feedback=Envia opinions
left_search_webmin=Busca a Webmin:
left_search_usermin=Busca a Usermin:
left_search=Busca:
left_logs=Visualitza els Registres del Mòdul
left_others=Altres
right_header0=Informació del Sistema
right_host=Nom de host del sistema
right_os=Sistema operatiu
right_login=Identificat com a:
right_from=Identificat des de:
right_webmin=Versió Webmin
right_usermin=Versió Usermin
right_cpu=Càrrega mitjana de la CPU
right_cpuinfo=Informació del processador
right_cputype=$5, $8 nuclis
right_load=$1 (1 min) $2 (5 mins) $3 (15 mins)
right_cpuuse=Ús de la CPU
right_cpustats=$1% usuari, $2% nucli, $4% E/S, $3% desocupada
right_real=Memòria real
right_virt=Memòria virtual
right_procs=Processos en execució
right_disk=Espai local en disc
right_used=$1 total, $2 utilitzat
right_out=$1&nbsp;de&nbsp;$2
right_quota=Ús del disc i quota
right_header5=Informació del Compte
right_uquota=Quota de disc i ús
right_time=Hora del sistema
right_uptime=En execució durant
right_updays=$1 dies, $2 hores, $3 minuts
right_uphours=$1 hores, $2 minuts
right_upmins=$1 minuts
right_kernel=Nucli i CPU
right_kernelon=$1 $2 a $3
right_updates=Actualitzacions de paquets
right_upok=Tots els paquets instal·lats estan actualitzats
right_upneed=Hi ha $1 actualitzacions de paquets disponibles
right_upsec=Hi ha $1 actualitzacions de paquets disponibles, de les quals $2 són actualitzacions de seguretat
__norefs=1

View File

@@ -1,43 +0,0 @@
__norefs=1
left_feedback=Feedback versenden
left_home=Systeminformation
left_login=Login: $1
left_logs=Zeige Modul Logs an
left_oc=Gesponsert von OpenCountry
left_others=Andere
left_search=Suchen:
left_search_usermin=Suche Usermin:
left_search_webmin=Suche Webmin:
right_cpu=CPU-Last im Durchschnitt
right_cpuinfo=Prozessorinformation
right_cpustats=$1% Benutzer, $2% Kernel, $4% IO, $3% Leerlauf
right_cputype=$5, $8 cores
right_cpuuse=CPU Auslastung
right_disk=Lokaler Festplattenspeicher
right_from=Eingeloggt von
right_header0=Systeminformation
right_header5=Accountinformationen
right_host=System Hostname
right_kernel=Kernel und CPU
right_kernelon=$1 $2 auf $3
right_load=$1 (1 Minute) $2 (5 Minuten) $3 (15 Minuten)
right_login=Eingeloggt als
right_os=Betriebssystem
right_out=$1&nbsp;von&nbsp;$2
right_procs=Laufende Prozesse
right_quota=Festplattenauslastung und Quota
right_real=Realer Speicher
right_time=Systemzeit
right_updates=Paketupdates
right_updays=$1 Tag(e), $2 Stunde(n), $3 Minute(n)
right_uphours=$1 Stunde(n), $2 Minute(n)
right_upmins=$1 Minute(n)
right_upneed=$1 Paketupdates sind verf&#252;gbar
right_upok=Alle installierten Pakete sind auf dem aktuellen Stand
right_upsec=$1 Paketupdates sind verf&#252;gbar, von dem $2 Sicherheitsupdates sind
right_uptime=System Laufzeit
right_uquota=Festplatten Quota und Auslastung
right_used=$1 gesamt, $2 benutzt
right_usermin=Usermin Version
right_virt=Virtueller Speicher
right_webmin=Webmin Version

View File

@@ -1,31 +0,0 @@
left_feedback=Envoyer un rapport
left_home=Information Syst&#232;me
left_login=Connexion : $1
left_logs=Voir les journaux du module
left_oc=Sponsoris&#233; par "OpenCountry"
left_others=Autres
left_search=Rechercher :
right_cpu=Moyennes de charge CPU
right_cpuinfo=Information sur le CPU
right_disk=Espace disque local
right_header0=Information Syst&#232;me
right_header5=Information sur le compte
right_host=Nom d'h&#244;te du syst&#232;me
right_kernel=Noyau et CPU
right_kernelon=$1 $2 sur $3
right_load=$1 (1 min) $2 (5 mins) $3 (15 mins)
right_os=Syst&#232;me d'exploitation
right_out=$1&nbsp;sur&nbsp;$2
right_procs=Processus en cours
right_real=M&#233;moire r&#233;elle
right_time=Date et heure du syst&#232;me
right_updates=Mises &#224; jours de Paquet
right_updays=$1 jours, $2 heures, $3 minutes
right_uphours=$1 heures, $2 minutes
right_upmins=$1 minutes
right_uptime=Dur&#232;e de fonctionnement du syst&#232;me
right_uquota=Utilisation et quota disque
right_used=$1 total, $2 utilis&#233;
right_usermin=Version de Usermin
right_virt=M&#233;moire virtuelle
right_webmin=Version de Webmin

View File

@@ -1,23 +0,0 @@
left_login=ログイン名: $1
left_home=システム情報
left_oc=提供OpenCountry
right_header0=システム情報
right_host=ホスト名
right_os=オペレーティングシステム
right_login=ログイン中のユーザ
right_from=接続元
right_webmin=Webmin バージョン
right_usermin=Usermin バージョン
right_cpu=CPU 平均負荷
right_load=$1 (1分) $2 (5分) $3 (15分)
right_real=実メモリ
right_virt=仮想メモリ
right_procs=走行プロセス数
right_disk=ローカルディスク容量
right_used=合計 $1 , 使用 $2
right_out=$1&nbsp;of&nbsp;$2
right_quota=ディスク使用量とクオータ
right_header5=アカウント情報
right_uquota=ディスククオータと使用量
right_time=サーバ上の時刻

View File

@@ -1,43 +0,0 @@
__norefs=1
left_feedback=Hantar Maklum Balas
left_home=Maklumat Sistem
left_login=Log masuk: $1
left_logs=Lihat log modul
left_oc=Ditaja oleh OpenCountry
left_others=Lain-lain
left_search=Carian:
left_search_usermin=Carian Usermin:
left_search_webmin=Carian Webmin
right_cpu=Purata beban CPU
right_cpuinfo=Maklumat pemproses
right_cpustats=$1% user, $2% kernel, $4% IO, $3% idle
right_cputype=$5, $8 teras
right_cpuuse=Penggunaan CPU
right_disk=Ruang disk setempat
right_from=Telah log masuk dari
right_header0=Maklumat Sistem
right_header5=Maklumat Akaun
right_host=Nama hos sistem
right_kernel=Kernel dan CPU
right_kernelon=$1 $2 pada $3
right_load=$1 (1 min) $2 (5 min) $3 (15 min)
right_login=Telah log masuk sebagai
right_os=Sistem operasi
right_out=$1&nbsp;daripada&nbsp;$2
right_procs=Proses yang dijalankan
right_quota=Penggunaan disk dan kuota
right_real=Memori sebenar
right_time=Masa pada sistem
right_updates=Pakej kemaskini
right_updays=$1 hari, $2 jam, $3 minit
right_uphours=$1 jam, $2 minit
right_upmins=$1 minit
right_upneed=terdapat $1 pakej kemaskini
right_upok=Semua pakej yang dipasang adalah terkini
right_upsec=terdapat $1 pakej kemaskini, dimana $2 darinya adalah kemaskini keselamatan
right_uptime=Sistem uptime
right_uquota=Kuota disk dan penggunaan
right_used=total $1, $2 digunakan
right_usermin=Versi Usermin
right_virt=Ingatan maya
right_webmin=Versi Webmin

View File

@@ -1,43 +0,0 @@
__norefs=1
left_feedback=Verstuur Opmerkingen
left_home=Systeem Informatie
left_login=Login: $1
left_logs=Bekijk Module's Logs
left_oc=Gesponserd door OpenCountry
left_others=Andere
left_search=Zoek:
left_search_usermin=Zoek Usermin:
left_search_webmin=Zoek Webmin:
right_cpu=CPU belasting gemiddelde
right_cpuinfo=Processor informatie
right_cpustats=$1% gebruiker, $2% kernel, $4% IO, $3% slaapt
right_cputype=$5, $8 cores
right_cpuuse=CPU gebruik
right_disk=Locale harddisk ruimte
right_from=Ingelogd van
right_header0=Systeem Informatie
right_header5=Account Informatie
right_host=Systeem hostnaam
right_kernel=Kernel en CPU
right_kernelon=$1 $2 op $3
right_load=$1 (1 min) $2 (5 minuten) $3 (15 minuten)
right_login=Ingelogd als
right_os=Besturing systeem
right_out=$1&nbsp;van&nbsp;$2
right_procs=Lopende processen
right_quota=Harddisk gebruik en quota
right_real=Echt geheugen
right_time=Systeemtijd
right_updates=Pakketten update's
right_updays=$1 dagen, $2 uur, $3 minuten
right_uphours=$1 uur, $2 minuten
right_upmins=$1 minuten
right_upneed=Er zijn $1 pakketten updates beschikbaar
right_upok=Al de geinstalleerde pakketten zijn up to date
right_upsec=Er zijn $1 pakketten updates beschikbaar, waarvan er $2 veiligheid updates zijn
right_uptime=Systeem werkt nu
right_uquota=Harddisk quota en gebruik
right_used=$1 totaal, $2 gebruikt
right_usermin=Usermin Versie
right_virt=Virtueel geheugen
right_webmin=Webmin versie

View File

@@ -1,43 +0,0 @@
__norefs=1
left_feedback=Send tilbakemelding
left_home=System informasjon
left_login=Brukernavn: $1
left_logs=Vis modulens logger
left_oc=Sponset av OpenCountry
left_others=Andre
left_search=S&#248;k:
left_search_usermin=S&#248;k i Usermin:
left_search_webmin=S&#248;k i Webmin:
right_cpu=CPU gj.snittsbelastninger
right_cpuinfo=Prosessor informasjon
right_cpustats=$1% bruker, $2% kjerne, $4% IO, $3% ledig
right_cputype=$5, $8 kjerner
right_cpuuse=CPU bruk
right_disk=Lokal diskplass
right_from=Logget inn fra
right_header0=System informasjon
right_header5=Konto informasjon
right_host=System vertsnavn
right_kernel=Kjerne og CPU
right_kernelon=$1 $2 p&#229; $3
right_load=$1 (1 min) $2 (5 min.) $3 (15 min.)
right_login=Logget inn som
right_os=Operativsystem
right_out=$1&nbsp;av&nbsp;$2
right_procs=Kj&#248;rende prosesser
right_quota=Diskbruk og kvote
right_real=Fysisk minne
right_time=Tid p&#229; systemet
right_updates=Pakkeoppdateringer
right_updays=$1 dager, $2 timer, $3 minutter
right_uphours=$1 timer, $2 minutter
right_upmins=$1 minutter
right_upneed=$1 pakkeoppdateringer er tilgjengelige
right_upok=Alle installerte pakker er oppdatert
right_upsec=$1 pakkeoppdateringer er tilgjengelige, og $2 av disse er sikkerhetsoppdateringer
right_uptime=System oppetid
right_uquota=Diskkvote og bruk
right_used=$1 totalt, $2 brukt
right_usermin=Usermin versjon
right_virt=Virtuelt minne
right_webmin=Webmin versjon

View File

@@ -1,43 +0,0 @@
__norefs=1
left_feedback=Wyślij informacje zwrotne
left_home=Informacje o systemie
left_login=Login: $1
left_logs=Wyświetl logi modułu
left_oc=Sponsorowana przez OpenCountry
left_others=Inne
left_search=Wyszukaj:
left_search_usermin=Wyszukaj w Usermin:
left_search_webmin=Wyszukaj w Webmin:
right_cpu=Średnie obciążenie CPU
right_cpuinfo=Informacje o procesorze
right_cpustats=$1% użytkownik, $2% jądro, $4% IO, $3% bezczynny
right_cputype=$5, $8 rdzeni
right_cpuuse=Użycie CPU
right_disk=Miejsce na dysku lokalnym
right_from=Formularz logowania
right_header0=Infomacje o systemie
right_header5=Infomacje o koncie
right_host=Nazwa hosta systemu
right_kernel=Jądro i CPU
right_kernelon=$1 $2 na $3
right_load=$1 (1 min) $2 (5 minut) $3 (15 minut)
right_login=Zalogowany jako
right_os=System operacyjny
right_out=$1&nbsp;z&nbsp;$2
right_procs=Uruchomionych procesów
right_quota=Użycie dysku i quota
right_real=Pamięć rzeczywista
right_time=Czas systemowy
right_updates=Uaktualnienia paczek
right_updays=$1 dni, $2 godzin, $3 minut
right_uphours=$1 godzin, $2 minut
right_upmins=$1 minut
right_upneed=Dostępnych $1 uaktualnień paczek
right_upok=Wszystkie zainstalowane paczki są aktualne
right_upsec=Dostępnych jest $1 uaktualnień, z których $2 to uaktualnienia bezpieczeństwa
right_uptime=Czas działania systmu
right_uquota=Quota dyskowa i użycie
right_used=Razem $1, używane $2
right_usermin=Wersja Usermina
right_virt=Pamięć wirtualna
right_webmin=Wersja Webmina

View File

@@ -1,34 +0,0 @@
left_login=Login: $1
left_home=Informações do Sistema
left_oc=Patrocinado por OpenCountry
left_feedback=Enviar Feedback
left_search_webmin=Procurar no Webmin:
left_search_usermin=Procurar no Usermin:
left_search=Procurar:
left_logs=Ver Registros do Módulos
left_others=Outros
right_header0=Informações do Sistema
right_host=Nome de host do sistema
right_os=Sistema operacional
right_login=Conectado como
right_from=Conectado de
right_webmin=Versão do Webmin
right_usermin=Versão do Usermin
right_cpu=Médias de carga da CPU
right_load=$1 (1 minuto) $2 (5 minutos) $3 (15 minutos)
right_real=Memória real
right_virt=Memória virtual
right_procs=Processos em execução
right_disk=Espaço em disco local
right_used=$1 no total, $2 em uso
right_out=$1&nbsp;of&nbsp;$2
right_quota=Uso e cota de espaço em disco
right_header5=Informações da Conta
right_uquota=Cota e uso de espaço em disco
right_time=Tempo no sistema
right_uptime=Tempo de atividade do sistema
right_updays=$1 dias, $2 horas, $3 minutos
right_uphours=$1 horas, $2 minutos
right_upmins=$1 minutos
right_kernel=Kernel e CPU
right_kernelon=$1 $2 em $3

View File

@@ -1,39 +0,0 @@
left_feedback=Отправить отзыв
left_home=Информация о системе
left_login=Логин: $1
left_logs=Просмотреть журнал модулей
left_oc=При поддержке OpenCountry
left_others=Остальные
left_search=Поиск:
left_search_usermin=Поиск Usermin:
left_search_webmin=Поиск Webmin:
right_cpu=Средняя загрузка процессора
right_cpuinfo=Информация о процессоре
right_cpustats=$1% пользователь, $2% ядро, $4% IO, $3% простой
right_cputype=$5, $8 ядер
right_cpuuse=Использование процессора
right_disk=Место на локальном диске
right_header0=Информация о системе
right_header5=Информация об аккаунте
right_host=Имя хоста
right_kernel=Ядро и процессор
right_kernelon=$1 $2 на $3
right_login=Вошел как
right_os=Операционная система
right_procs=Запущенно процессов
right_quota=Использование диск и квота
right_real=Физическая память
right_time=Системное время
right_updates=Обновление пакетов
right_updays=$1 дней, $2 часов, $3 минут
right_uphours=$1 часов, $2 минут
right_upmins=$1 минут
right_upneed=Доступно $1 обновленных пакетов
right_upok=Все установленные пакеты имеют последнюю версию
right_upsec=Доступно $1 обновленных пакетов, из которых $2 содержат обновления безопасности
right_uptime=Uptime системы
right_uquota=Дисковая квота и использование
right_used=$1 всего, $2 используется
right_usermin=Версия Usermin
right_virt=Виртуальная память
right_webmin=Версия Webmin

View File

@@ -1,176 +0,0 @@
#!/usr/bin/perl
# Show the left-side menu of Webmin modules
BEGIN { push(@INC, ".."); };
use WebminCore;
&init_config();
&ReadParse();
%text = &load_language($current_theme);
%gaccess = &get_module_acl(undef, "");
# Work out what modules and categories we have
@cats = &get_visible_modules_categories();
@modules = map { @{$_->{'modules'}} } @cats;
&popup_header();
print <<EOF;
<link rel="stylesheet" type="text/css" href="left.css" />
<script>
function toggleview (id1,id2) {
var obj1 = document.getElementById(id1);
var obj2 = document.getElementById(id2);
(obj1.className=="itemshown") ? obj1.className="itemhidden" : obj1.className="itemshown";
(obj1.className=="itemshown") ? obj2.innerHTML="<img border='0' src='images/open.gif' alt='[&ndash;]'>" : obj2.innerHTML="<img border='0' src='images/closed.gif' alt='[+]'>";
}
// Show the logs for the current module in the right
function show_logs() {
var url = ''+window.parent.frames[1].location;
var sl1 = url.indexOf('//');
var mod = '';
if (sl1 > 0) {
var sl2 = url.indexOf('/', sl1+2);
if (sl2 > 0) {
var sl3 = url.indexOf('/', sl2+1);
if (sl3 > 0) {
mod = url.substring(sl2+1, sl3);
} else {
mod = url.substring(sl2+1);
}
}
}
if (mod && mod.indexOf('.cgi') <= 0) {
// Show one module's logs
window.parent.frames[1].location = 'webminlog/search.cgi?tall=4&uall=1&fall=1&mall=0&module='+mod;
}
else {
// Show all logs
window.parent.frames[1].location = 'webminlog/search.cgi?tall=4&uall=1&fall=1&mall=0&mall=1'
}
}
</script>
</head>
<body>
EOF
# Show login
print &text('left_login', $remote_user),"<br>\n";
if ($gconfig{"notabs_${base_remote_user}"} == 2 ||
$gconfig{"notabs_${base_remote_user}"} == 0 && $gconfig{'notabs'} ||
@modules <= 1) {
# Show all modules in one list
foreach $minfo (@modules) {
$target = $minfo->{'noframe'} ? "_top" : "right";
print "<a target=$target href=$minfo->{'dir'}/>$minfo->{'desc'}</a><br>\n";
}
}
else {
# Show all modules under categories
foreach $c (@cats) {
# Show category opener, plus modules under it
&print_category_opener(
$c->{'code'},
$in{$c->{'code'}} ? 1 : 0,
$c->{'unused'} ?
"<font color=#888888>$c->{'desc'}</font>" :
$c->{'desc'});
$cls = $in{$c->{'code'}} ? "itemshown" : "itemhidden";
print "<div class='$cls' id='$c->{'code'}'>";
foreach my $minfo (@{$c->{'modules'}}) {
&print_category_link("$minfo->{'dir'}/",
$minfo->{'desc'},
undef,
undef,
$minfo->{'noframe'} ? "_top" : "",
);
}
print "</div>\n";
}
}
# Show module/help search form
if (-r "$root_directory/webmin_search.cgi" &&
$gaccess{'webminsearch'}) {
print "<form action=webmin_search.cgi target=right>\n";
print $text{'left_search'},"&nbsp;";
print &ui_textbox("search", undef, 15);
}
print "<div class='leftlink'><hr></div>\n";
# Show current module's log search, if logging
if ($gconfig{'log'} && &foreign_available("webminlog")) {
print "<div class='linkwithicon'><img src=images/logs.gif>\n";
print "<div class='aftericon'><a target=right href='webminlog/' onClick='show_logs(); return false;'>$text{'left_logs'}</a></div></div>\n";
}
# Show info link
print "<div class='linkwithicon'><img src=images/gohome.gif>\n";
print "<div class='aftericon'><a target=right href='right.cgi?open=system&open=status'>$text{'left_home'}</a></div></div>\n";
# Show feedback link, but only if a custom email is set
%gaccess = &get_module_acl(undef, "");
if (&get_product_name() eq 'webmin' && # For Webmin
!$ENV{'ANONYMOUS_USER'} &&
$gconfig{'nofeedbackcc'} != 2 &&
$gaccess{'feedback'} &&
$gconfig{'feedback_to'} ||
&get_product_name() eq 'usermin' && # For Usermin
!$ENV{'ANONYMOUS_USER'} &&
$gconfig{'feedback'}
) {
print "<div class='linkwithicon'><img src=images/mail-small.gif>\n";
print "<div class='aftericon'><a target=right href='feedback_form.cgi'>$text{'left_feedback'}</a></div></div>\n";
}
# Show refesh modules link, for master admin
if (&foreign_available("webmin")) {
print "<div class='linkwithicon'><img src=images/refresh-small.gif>\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.gif>\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>\n";
print "<div class='aftericon'><a target=_top href='$ENV{'HTTP_WEBMIN_SERVERS'}'>$text{'header_servers'}</a></div>";
}
&popup_footer();
# print_category_opener(name, &allcats, label)
# Prints out an open/close twistie for some category
sub print_category_opener
{
local ($c, $status, $label) = @_;
$label = $c eq "others" ? $text{'left_others'} : $label;
local $img = $status ? "open.gif" : "closed.gif";
# 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/$img' alt='[+]'></a>\n";
print "<div class='aftericon'><a href=\"javascript:toggleview('$c','toggle$c')\" id='toggle$c'><font color=#000000>$label</font></a></div></div>\n";
}
sub print_category_link
{
local ($link, $label, $image, $noimage, $target) = @_;
$target ||= "right";
print "<div class='linkindented'><a target=$target href=$link>$label</a></div>\n";
}

View File

@@ -1,51 +0,0 @@
.mode {
left: auto;
right: auto;
}
.linkwithicon {
position: relative;
white-space: nowrap;
left: 2px;
width: 16px;
padding-top: 2px;
}
.leftlink {
position: relative;
left: 4px;
right: 4px;
line-height: 150%;
}
.linkindented {
border: none;
position: relative;
padding-top: 2px;
margin-right: 2px;
margin-left: 20px;
}
.linknotindented {
border: none;
position: relative;
padding-top: 2px;
margin-right: 2px;
margin-left: 4px;
}
.aftericon {
display: inline;
}
.domainmenu {
white-space: nowrap;
position: relative;
left: 4px;
padding-top: 2px;
}
div.menubody {
border:1px solid #D9D9D9;
background-color:#F5F5F5;
padding:0;
margin:0;
}
div.menubodyInner {
border:1px solid #FFFFFF;
margin:0;
padding:0;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 826 B

View File

@@ -1,310 +0,0 @@
#!/usr/local/bin/perl
# Show server or domain information
BEGIN { push(@INC, ".."); };
use WebminCore;
&init_config();
&ReadParse();
&load_theme_library();
if (&get_product_name() eq "usermin") {
$level = 3;
}
else {
$level = 0;
}
%text = &load_language($current_theme);
$bar_width = 300;
foreach $o (split(/\0/, $in{'open'})) {
push(@open, $o);
$open{$o} = 1;
}
$prehead = defined(&WebminCore::theme_prehead) ?
&capture_function_output(\&WebminCore::theme_prehead) : "";
&popup_header(undef, $prehead);
print "<center>\n";
# Webmin logo
if (&get_product_name() eq 'webmin') {
print "<a href=http://www.webmin.com/ target=_new><img src=images/webmin-blue.png border=0></a><p>\n";
}
if ($level == 0) {
# Show general system information
print "<table width=70%>\n";
# Ask status module for collected info
&foreign_require("system-status");
$info = &system_status::get_collected_info();
# Hostname
$ip = $info && $info->{'ips'} ? $info->{'ips'}->[0]->[0] :
&to_ipaddress(get_system_hostname());
$ip = " ($ip)" if ($ip);
print "<tr> <td><b>$text{'right_host'}</b></td>\n";
print "<td>",&get_system_hostname(),$ip,"</td> </tr>\n";
# Operating system
print "<tr> <td><b>$text{'right_os'}</b></td>\n";
if ($gconfig{'os_version'} eq '*') {
print "<td>$gconfig{'real_os_type'}</td> </tr>\n";
}
else {
print "<td>$gconfig{'real_os_type'} $gconfig{'real_os_version'}</td> </tr>\n";
}
# Webmin version
print "<tr> <td><b>$text{'right_webmin'}</b></td>\n";
print "<td>",&get_webmin_version(),"</td> </tr>\n";
# System time
$tm = localtime(time());
print "<tr> <td><b>$text{'right_time'}</b></td>\n";
if (&foreign_available("time")) {
$tm = "<a href=time/>$tm</a>";
}
print "<td>$tm</td> </tr>\n";
# Kernel and CPU
if ($info->{'kernel'}) {
print "<tr> <td><b>$text{'right_kernel'}</b></td>\n";
print "<td>",&text('right_kernelon',
$info->{'kernel'}->{'os'},
$info->{'kernel'}->{'version'},
$info->{'kernel'}->{'arch'}),"</td> </tr>\n";
}
# CPU type and cores
if ($info->{'load'}) {
@c = @{$info->{'load'}};
if (@c > 3) {
print "<tr> <td><b>$text{'right_cpuinfo'}</b></td>\n";
print "<td>",&text('right_cputype', @c),"</td> </tr>\n";
}
}
# System uptime
&foreign_require("proc");
my $uptime;
my ($d, $h, $m) = &proc::get_system_uptime();
if ($d) {
$uptime = &text('right_updays', $d, $h, $m);
}
elsif ($m) {
$uptime = &text('right_uphours', $h, $m);
}
elsif ($m) {
$uptime = &text('right_upmins', $m);
}
if ($uptime) {
print "<tr> <td><b>$text{'right_uptime'}</b></td>\n";
print "<td>$uptime</td> </tr>\n";
}
# Running processes
if (&foreign_check("proc")) {
@procs = &proc::list_processes();
$pr = scalar(@procs);
print "<tr> <td><b>$text{'right_procs'}</b></td>\n";
if (&foreign_available("proc")) {
$pr = "<a href=proc/>$pr</a>";
}
print "<td>$pr</td> </tr>\n";
}
# Load averages
if ($info->{'load'}) {
@c = @{$info->{'load'}};
if (@c) {
print "<tr> <td><b>$text{'right_cpu'}</b></td>\n";
print "<td>",&text('right_load', @c),"</td> </tr>\n";
}
}
# CPU usage
if ($info->{'cpu'}) {
@c = @{$info->{'cpu'}};
print "<tr> <td><b>$text{'right_cpuuse'}</b></td>\n";
print "<td>",&text('right_cpustats', @c),"</td> </tr>\n";
}
# Memory usage
if ($info->{'mem'}) {
@m = @{$info->{'mem'}};
if (@m && $m[0]) {
print "<tr> <td><b>$text{'right_real'}</b></td>\n";
print "<td>",&text('right_used',
&nice_size($m[0]*1024),
&nice_size(($m[0]-$m[1])*1024)),
"</td> </tr>\n";
print "<tr> <td></td>\n";
print "<td>",&bar_chart($m[0], $m[0]-$m[1], 1),
"</td> </tr>\n";
}
if (@m && $m[2]) {
print "<tr> <td><b>$text{'right_virt'}</b></td>\n";
print "<td>",&text('right_used',
&nice_size($m[2]*1024),
&nice_size(($m[2]-$m[3])*1024)),
"</td> </tr>\n";
print "<tr> <td></td>\n";
print "<td>",&bar_chart($m[2], $m[2]-$m[3], 1),
"</td> </tr>\n";
}
}
# Disk space on local drives
if ($info->{'disk_total'}) {
($total, $free) = ($info->{'disk_total'}, $info->{'disk_free'});
print "<tr> <td><b>$text{'right_disk'}</b></td>\n";
print "<td>",&text('right_used',
&nice_size($total),
&nice_size($total-$free)),"</td> </tr>\n";
print "<tr> <td></td>\n";
print "<td>",&bar_chart($total, $total-$free, 1),
"</td> </tr>\n";
}
# Package updates
if ($info->{'poss'}) {
print "<tr> <td><b>$text{'right_updates'}</b></td>\n";
@poss = @{$info->{'poss'}};
@secs = grep { $_->{'security'} } @poss;
if (@poss && @secs) {
$msg = &text('right_upsec', scalar(@poss),
scalar(@secs));
}
elsif (@poss) {
$msg = &text('right_upneed', scalar(@poss));
}
else {
$msg = $text{'right_upok'};
}
if (&foreign_available("package-updates")) {
$msg = "<a href='package-updates/index.cgi?mode=updates'>$msg</a>";
}
print "<td>$msg</td> </tr>\n";
}
print "</table>\n";
# Check for incorrect OS
if (&foreign_check("webmin")) {
&foreign_require("webmin", "webmin-lib.pl");
&webmin::show_webmin_notifications();
}
}
elsif ($level == 3) {
# Show Usermin user's information
print "<h3>$text{'right_header5'}</h3>\n";
print "<table width=70%>\n";
# Host and login info
print "<tr> <td><b>$text{'right_host'}</b></td>\n";
print "<td>",&get_system_hostname(),"</td> </tr>\n";
print "<tr> <td><b>$text{'right_os'}</b></td>\n";
if ($gconfig{'os_version'} eq '*') {
print "<td>$gconfig{'real_os_type'}</td> </tr>\n";
}
else {
print "<td>$gconfig{'real_os_type'} $gconfig{'real_os_version'}</td> </tr>\n";
}
print "<tr> <td><b>$text{'right_usermin'}</b></td>\n";
print "<td>",&get_webmin_version(),"</td> </tr>\n";
# System time
$tm = localtime(time());
print "<tr> <td><b>$text{'right_time'}</b></td>\n";
print "<td>$tm</td> </tr>\n";
# Disk quotas
if (&foreign_installed("quota")) {
&foreign_require("quota", "quota-lib.pl");
$n = &quota::user_filesystems($remote_user);
$usage = 0;
$quota = 0;
for($i=0; $i<$n; $i++) {
if ($quota::filesys{$i,'hblocks'}) {
$quota += $quota::filesys{$i,'hblocks'};
$usage += $quota::filesys{$i,'ublocks'};
}
elsif ($quota::filesys{$i,'sblocks'}) {
$quota += $quota::filesys{$i,'sblocks'};
$usage += $quota::filesys{$i,'ublocks'};
}
}
if ($quota) {
$bsize = $quota::config{'block_size'};
print "<tr> <td><b>$text{'right_uquota'}</b></td>\n";
print "<td>",&text('right_out',
&nice_size($usage*$bsize),
&nice_size($quota*$bsize)),"</td> </tr>\n";
print "<tr> <td></td>\n";
print "<td>",&bar_chart($quota, $usage, 1),
"</td> </tr>\n";
}
}
print "</table>\n";
}
print "</center>\n";
&popup_footer();
# bar_chart(total, used, blue-rest)
# Returns HTML for a bar chart of a single value
sub bar_chart
{
local ($total, $used, $blue) = @_;
local $rv;
$rv .= sprintf "<img src=images/red.gif width=%s height=10>",
int($bar_width*$used/$total)+1;
if ($blue) {
$rv .= sprintf "<img src=images/blue.gif width=%s height=10>",
$bar_width - int($bar_width*$used/$total)-1;
}
else {
$rv .= sprintf "<img src=images/white.gif width=%s height=10>",
$bar_width - int($bar_width*$used/$total)-1;
}
return $rv;
}
# bar_chart_three(total, used1, used2, used3)
# Returns HTML for a bar chart of three values, stacked
sub bar_chart_three
{
local ($total, $used1, $used2, $used3) = @_;
local $rv;
local $w1 = int($bar_width*$used1/$total)+1;
local $w2 = int($bar_width*$used2/$total);
local $w3 = int($bar_width*$used3/$total);
$rv .= sprintf "<img src=images/red.gif width=%s height=10>", $w1;
$rv .= sprintf "<img src=images/purple.gif width=%s height=10>", $w2;
$rv .= sprintf "<img src=images/blue.gif width=%s height=10>", $w3;
$rv .= sprintf "<img src=images/grey.gif width=%s height=10>",
$bar_width - $w1 - $w2 - $w3;
return $rv;
}
# collapsed_header(text, name)
sub collapsed_header
{
local ($text, $name) = @_;
print "<br><font style='font-size:16px'>";
local $others = join("&", map { "open=$_" } grep { $_ ne $name } @open);
$others = "&$others" if ($others);
if ($open{$name}) {
print "<img src=images/open.gif border=0>\n";
print &ui_link("right.cgi?$others",$text);
}
else {
print "<img src=images/closed.gif border=0>\n";
print &ui_link("right.cgi?open=$name$others",$text);
}
print "</font><br>\n";
return $open{$name};
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1,12 +0,0 @@
webmin=1
usermin=1
version=1.480
desc=Blue Framed Theme
longdesc=A simple theme with minimal graphics, which uses a categorized layout.
depends=1.336 1.480
desc_nl=Blauw Frame Theme
longdesc_ja_JP.euc=
longdesc_nl=Een eenvoudig grafish theme, welke catagorie layout gebruikt
desc_fr=
longdesc_fr=
desc_ja_JP.euc=

View File

@@ -1,664 +0,0 @@
# Virtualmin Framed heme
# Icons copyright David Vignoni, all other theme elements copyright 2005-2007
# Virtualmin, Inc.
$default_domains_to_show = 10;
# Global state for wrapper
# if 0, wrapper isn't on, add one and open it, if 1 close it, if 2+, subtract
# but don't close
$WRAPPER_OPEN = 0;
# theme_ui_post_header([subtext])
# Returns HTML to appear directly after a standard header() call
sub theme_ui_post_header
{
local ($text) = @_;
my $rv;
$rv .= "<div class='ui_post_header'>$text</div>\n" if (defined($text));
#$rv .= "<div class='section'>\n";
$rv .= "<p>" if (!defined($text));
return $rv;
}
# theme_ui_pre_footer()
# Returns HTML to appear directly before a standard footer() call
sub theme_ui_pre_footer
{
my $rv;
$rv .= "</div><p>\n";
return $rv;
}
# ui_print_footer(args...)
# Print HTML for a footer with the pre-footer line. Args are the same as those
# passed to footer()
sub theme_ui_print_footer
{
local @args = @_;
print &ui_pre_footer();
&footer(@args);
}
sub theme_icons_table
{
my ($i, $need_tr);
my $cols = $_[3] ? $_[3] : 4;
my $per = int(100.0 / $cols);
print "<div class='wrapper'>\n";
print "<table class='icons_table' id='main' width=100% cellpadding=5>\n";
for($i=0; $i<@{$_[0]}; $i++) {
if ($i%$cols == 0) { print "<tr>\n"; }
print "<td width=$per% align=center valign=top>\n";
&generate_icon($_[2]->[$i], $_[1]->[$i], $_[0]->[$i],
$_[4], $_[5], $_[6], $_[7]->[$i], $_[8]->[$i]);
print "</td>\n";
if ($i%$cols == $cols-1) { print "</tr>\n"; }
}
while($i++%$cols) { print "<td width=$per%></td>\n"; $need_tr++; }
print "</tr>\n" if ($need_tr);
print "</table>\n";
print "</div>\n";
}
sub theme_generate_icon
{
my $w = !defined($_[4]) ? "width=48" : $_[4] ? "width=$_[4]" : "";
my $h = !defined($_[5]) ? "height=48" : $_[5] ? "height=$_[5]" : "";
if ($tconfig{'noicons'}) {
if ($_[2]) {
print "$_[6]<a href=\"$_[2]\" $_[3]>$_[1]</a>$_[7]\n";
}
else {
print "$_[6]$_[1]$_[7]\n";
}
}
elsif ($_[2]) {
print "<table><tr><td width=48 height=48>\n",
"<a href=\"$_[2]\" $_[3]><img src=\"$_[0]\" alt=\"\" border=0 ",
"$w $h></a></td></tr></table>\n";
print "$_[6]<a href=\"$_[2]\" $_[3]>$_[1]</a>$_[7]\n";
}
else {
print "<table><tr><td width=48 height=48>\n",
"<img src=\"$_[0]\" alt=\"\" border=0 $w $h>",
"</td></tr></table>\n$_[6]$_[1]$_[7]\n";
}
}
sub theme_post_change_modules
{
print <<EOF;
<script>
var url = '' + top.left.location;
top.left.location = url;
</script>
EOF
}
sub theme_prebody
{
my $module_name = &get_module_name();
if ($script_name =~ /session_login.cgi/) {
# Generate CSS link
print "<link rel='stylesheet' type='text/css' href='$gconfig{'webprefix'}/unauthenticated/style.css'>\n";
}
}
sub theme_prehead
{
print "<link rel='stylesheet' type='text/css' href='$gconfig{'webprefix'}/unauthenticated/style.css' />\n";
print "<script type='text/javascript' src='$gconfig{'webprefix'}/unauthenticated/toggleview.js'></script>\n";
print "<script>\n";
print "var rowsel = new Array();\n";
print "</script>\n";
print "<script type='text/javascript' src='$gconfig{'webprefix'}/unauthenticated/sorttable.js'></script>\n";
}
sub theme_popup_prehead
{
return &theme_prehead();
}
# ui_table_start(heading, [tabletags], [cols], [&default-tds], [right-heading])
# A table with a heading and table inside
sub theme_ui_table_start
{
my ($heading, $tabletags, $cols, $tds, $rightheading) = @_;
if (! $tabletags =~ /width/) { $tabletages .= " width=100%"; }
if (defined($main::ui_table_cols)) {
# Push on stack, for nested call
push(@main::ui_table_cols_stack, $main::ui_table_cols);
push(@main::ui_table_pos_stack, $main::ui_table_pos);
push(@main::ui_table_default_tds_stack, $main::ui_table_default_tds);
}
my $rv;
my $colspan = 1;
if (!$WRAPPER_OPEN) {
$rv .= "<table class='shrinkwrapper' $tabletags>\n";
$rv .= "<tr><td>\n";
}
$WRAPPER_OPEN++;
$rv .= "<table class='ui_table' $tabletags>\n";
if (defined($heading) || defined($rightheading)) {
$rv .= "<thead><tr class='ui_table_head'>";
if (defined($heading)) {
$rv .= "<td><b>$heading</b></td>"
}
if (defined($rightheading)) {
$rv .= "<td align=right>$rightheading</td>";
$colspan++;
}
$rv .= "</tr></thead>\n";
}
$rv .= "<tbody> <tr class='ui_table_body'> <td colspan=$colspan>".
"<table width=100%>\n";
$main::ui_table_cols = $cols || 4;
$main::ui_table_pos = 0;
$main::ui_table_default_tds = $tds;
return $rv;
}
# ui_table_end()
# The end of a table started by ui_table_start
sub theme_ui_table_end
{
my $rv;
if ($main::ui_table_cols == 4 && $main::ui_table_pos) {
# Add an empty block to balance the table
$rv .= &ui_table_row(" ", " ");
}
if (@main::ui_table_cols_stack) {
$main::ui_table_cols = pop(@main::ui_table_cols_stack);
$main::ui_table_pos = pop(@main::ui_table_pos_stack);
$main::ui_table_default_tds = pop(@main::ui_table_default_tds_stack);
}
else {
$main::ui_table_cols = undef;
$main::ui_table_pos = undef;
$main::ui_table_default_tds = undef;
}
$rv .= "</tbody></table></td></tr></table>\n";
if ($WRAPPER_OPEN==1) {
#$rv .= "</div>\n";
$rv .= "</td></tr>\n";
$rv .= "</table>\n";
}
$WRAPPER_OPEN--;
return $rv;
}
# theme_ui_tabs_start(&tabs, name, selected, show-border)
# Render a row of tabs from which one can be selected. Each tab is an array
# ref containing a name, title and link.
sub theme_ui_tabs_start
{
my ($tabs, $name, $sel, $border) = @_;
my $rv;
if (!$main::ui_hidden_start_donejs++) {
$rv .= &ui_hidden_javascript();
}
# Build list of tab titles and names
my $tabnames = "[".join(",", map { "\"".&quote_escape($_->[0])."\"" } @$tabs)."]";
my $tabtitles = "[".join(",", map { "\"".&quote_escape($_->[1])."\"" } @$tabs)."]";
$rv .= "<script>\n";
$rv .= "document.${name}_tabnames = $tabnames;\n";
$rv .= "document.${name}_tabtitles = $tabtitles;\n";
$rv .= "</script>\n";
# Output the tabs
my $imgdir = "$gconfig{'webprefix'}/images";
$rv .= &ui_hidden($name, $sel)."\n";
$rv .= "<table border=0 cellpadding=0 cellspacing=0 class='ui_tabs'>\n";
$rv .= "<tr><td bgcolor=#ffffff colspan=".(scalar(@$tabs)*2+1).">";
if ($ENV{'HTTP_USER_AGENT'} !~ /msie/i) {
# For some reason, the 1-pixel space above the tabs appears huge on IE!
$rv .= "<img src=$imgdir/1x1.gif>";
}
$rv .= "</td></tr>\n";
$rv .= "<tr>\n";
$rv .= "<td bgcolor=#ffffff width=1><img src=$imgdir/1x1.gif></td>\n";
foreach my $t (@$tabs) {
if ($t ne $tabs[0]) {
# Spacer
$rv .= "<td width=2 bgcolor=#ffffff class='ui_tab_spacer'>".
"<img src=$imgdir/1x1.gif></td>\n";
}
my $tabid = "tab_".$t->[0];
$rv .= "<td id=${tabid} class='ui_tab'>";
$rv .= "<table cellpadding=0 cellspacing=0 border=0><tr>";
if ($t->[0] eq $sel) {
# Selected tab
$rv .= "<td valign=top class='tabSelected'>".
"<img src=$imgdir/lc2.gif alt=\"\"></td>";
$rv .= "<td class='tabSelected' nowrap>".
"&nbsp;<b>$t->[1]</b>&nbsp;</td>";
$rv .= "<td valign=top class='tabSelected'>".
"<img src=$imgdir/rc2.gif alt=\"\"></td>";
}
else {
# Other tab (which has a link)
$rv .= "<td valign=top class='tabUnselected'>".
"<img src=$imgdir/lc1.gif alt=\"\"></td>";
$rv .= "<td class='tabUnselected' nowrap>".
"&nbsp;<a href='$t->[2]' ".
"onClick='return select_tab(\"$name\", \"$t->[0]\")'>".
"$t->[1]</a>&nbsp;</td>";
$rv .= "<td valign=top class='tabUnselected'>".
"<img src=$imgdir/rc1.gif ".
"alt=\"\"></td>";
$rv .= "</td>\n";
}
$rv .= "</tr></table>";
$rv .= "</td>\n";
}
$rv .= "<td bgcolor=#ffffff width=1><img src=$imgdir/1x1.gif></td>\n";
$rv .= "</table>\n";
if ($border) {
# All tabs are within a grey box
$rv .= "<table width=100% cellpadding=0 cellspacing=0 ".
"class='ui_tabs_box'>\n";
$rv .= "<tr> <td bgcolor=#ffffff rowspan=3 width=1><img src=$imgdir/1x1.gif></td>\n";
$rv .= "<td $cb colspan=3 height=2><img src=$imgdir/1x1.gif></td> </tr>\n";
$rv .= "<tr> <td $cb width=2><img src=$imgdir/1x1.gif></td>\n";
$rv .= "<td valign=top>";
}
$main::ui_tabs_selected = $sel;
return $rv;
}
# theme_ui_columns_start(&headings, [width-percent], [noborder], [&tdtags], [heading])
# Returns HTML for a multi-column table, with the given headings
sub theme_ui_columns_start
{
my ($heads, $width, $noborder, $tdtags, $heading) = @_;
my ($href) = grep { $_ =~ /<a\s+href/i } @$heads;
my $rv;
$theme_ui_columns_row_toggle = 0;
if (!$noborder && !$WRAPPER_OPEN) {
$rv .= "<table class='wrapper' width="
. ($width ? $width : "100")
. "% class='ui_columns'>\n";
$rv .= "<tr><td>\n";
}
if (!$noborder) {
$WRAPPER_OPEN++;
}
local @classes;
push(@classes, "ui_table") if (!$noborder);
push(@classes, "sortable") if (!$href);
$rv .= "<table".(@classes ? " class='".join(" ", @classes)."'" : "").
(defined($width) ? " width=$width%" : "").">\n";
if ($heading) {
$rv .= "<thead> <tr $tb title='ui_columns_heading'>".
"<td colspan=".scalar(@$heads).
"><b>$heading</b></td></tr> </thead>\n";
}
$rv .= "<thead> <tr $tb class='ui_columns_heads'>\n";
my $i;
for($i=0; $i<@$heads; $i++) {
$rv .= "<td ".$tdtags->[$i]."><b>".
($heads->[$i] eq "" ? "<br>" : $heads->[$i])."</b></td>\n";
}
$rv .= "</tr></thead> <tbody>\n";
$theme_ui_columns_count++;
return $rv;
}
# theme_ui_columns_row(&columns, &tdtags)
# Returns HTML for a row in a multi-column table
sub theme_ui_columns_row
{
$theme_ui_columns_row_toggle = $theme_ui_columns_row_toggle ? '0' : '1';
local ($cols, $tdtags) = @_;
my $rv;
$rv .= "<tr class='ui_columns row$theme_ui_columns_row_toggle' onMouseOver=\"this.className='mainhigh'\" onMouseOut=\"this.className='mainbody row$theme_ui_columns_row_toggle'\">\n";
my $i;
for($i=0; $i<@$cols; $i++) {
$rv .= "<td ".$tdtags->[$i].">".
($cols->[$i] !~ /\S/ ? "<br>" : $cols->[$i])."</td>\n";
}
$rv .= "</tr>\n";
return $rv;
}
# theme_ui_columns_end()
# Returns HTML to end a table started by ui_columns_start
sub theme_ui_columns_end
{
my $rv;
$rv = "</tbody> </table>\n";
if ($WRAPPER_OPEN == 1) { # Last wrapper
$rv .= "</td> </tr> </table>\n";
}
$WRAPPER_OPEN--;
return $rv;
}
# theme_ui_grid_table(&elements, columns, [width-percent], [tds], [tabletags],
# [title])
# Given a list of HTML elements, formats them into a table with the given
# number of columns. However, themes are free to override this to use fewer
# columns where space is limited.
sub theme_ui_grid_table
{
my ($elements, $cols, $width, $tds, $tabletags, $title) = @_;
return "" if (!@$elements);
my $rv = "<table class='wrapper' "
. ($width ? " width=$width%" : " width=100%")
. ($tabletags ? " ".$tabletags : "")
. "><tr><td>\n";
$rv .= "<table class='ui_grid_table'"
. ($width ? " width=$width%" : "")
. ($tabletags ? " ".$tabletags : "")
. ">\n";
if ($title) {
$rv .= "<thead><tr $tb class='ui_grid_heading'> ".
"<td colspan=$cols><b>$title</b></td> </tr></thead>\n";
}
$rv .= "<tbody>\n";
my $i;
for($i=0; $i<@$elements; $i++) {
$rv .= "<tr class='ui_grid_row'>" if ($i%$cols == 0);
$rv .= "<td ".$tds->[$i%$cols]." valign=top class='ui_grid_cell'>".
$elements->[$i]."</td>\n";
$rv .= "</tr>" if ($i%$cols == $cols-1);
}
if ($i%$cols) {
while($i%$cols) {
$rv .= "<td ".$tds->[$i%$cols]." class='ui_grid_cell'><br></td>\n";
$i++;
}
$rv .= "</tr>\n";
}
$rv .= "</table>\n";
$rv .= "</tbody>\n";
$rv .= "</td></tr></table>\n"; # wrapper
return $rv;
}
# theme_ui_hidden_table_start(heading, [tabletags], [cols], name, status,
# [&default-tds], [rightheading])
# A table with a heading and table inside, and which is collapsible
sub theme_ui_hidden_table_start
{
my ($heading, $tabletags, $cols, $name, $status, $tds, $rightheading) = @_;
my $rv;
if (!$main::ui_hidden_start_donejs++) {
$rv .= &ui_hidden_javascript();
}
my $divid = "hiddendiv_$name";
my $openerid = "hiddenopener_$name";
my $defimg = $status ? "open.gif" : "closed.gif";
my $defclass = $status ? 'opener_shown' : 'opener_hidden';
my $text = defined($tconfig{'cs_text'}) ? $tconfig{'cs_text'} :
defined($gconfig{'cs_text'}) ? $gconfig{'cs_text'} : "000000";
if (!$WRAPPER_OPEN) { # If we're not already inside of a wrapper, wrap it
$rv .= "<table class='shrinkwrapper ui_table' $tabletags>\n";
$rv .= "<tr><td>\n";
}
$WRAPPER_OPEN++;
my $colspan = 1;
$rv .= "<table class='ui_table' $tabletags>\n";
if (defined($heading) || defined($rightheading)) {
$rv .= "<thead><tr class='ui_table_head'>";
if (defined($heading)) {
$rv .= "<td><a href=\"javascript:hidden_opener('$divid', '$openerid')\" id='$openerid'><img border=0 src='$gconfig{'webprefix'}/images/$defimg'></a> <a href=\"javascript:hidden_opener('$divid', '$openerid')\"><b><font color=#ffffff>$heading</font></b></a></td>";
}
if (defined($rightheading)) {
$rv .= "<td align=right>$rightheading</td>";
$colspan++;
}
$rv .= "</tr> </thead>\n";
}
$rv .= "<tbody><tr> <td colspan=$colspan><div class='$defclass' id='$divid'><table width=100%>\n";
$main::ui_table_cols = $cols || 4;
$main::ui_table_pos = 0;
$main::ui_table_default_tds = $tds;
return $rv;
}
# ui_hidden_table_end(name)
# Returns HTML for the end of table with hiding, as started by
# ui_hidden_table_start
sub theme_ui_hidden_table_end
{
my ($name) = @_;
local $rv = "</table></div></td></tr></tbody></table>\n";
if ( $WRAPPER_OPEN == 1 ) {
$WRAPPER_OPEN--;
#$rv .= "</div>\n";
$rv .= "</td></tr></table>\n";
}
elsif ($WRAPPER_OPEN) { $WRAPPER_OPEN--; }
return $rv;
}
# theme_select_all_link(field, form, text)
# Adds support for row highlighting to the normal select all
sub theme_select_all_link
{
local ($field, $form, $text) = @_;
$form = int($form);
$text ||= $text{'ui_selall'};
return "<a class='select_all' href='#' onClick='f = document.forms[$form]; ff = f.$field; ff.checked = true; r = document.getElementById(\"row_\"+ff.id); if (r) { r.className = \"mainsel\" }; for(i=0; i<f.$field.length; i++) { ff = f.${field}[i]; if (!ff.disabled) { ff.checked = true; r = document.getElementById(\"row_\"+ff.id); if (r) { r.className = \"mainsel\" } } } return false'>$text</a>";
}
# theme_select_invert_link(field, form, text)
# Adds support for row highlighting to the normal invert selection
sub theme_select_invert_link
{
local ($field, $form, $text) = @_;
$form = int($form);
$text ||= $text{'ui_selinv'};
return "<a class='select_invert' href='#' onClick='f = document.forms[$form]; ff = f.$field; ff.checked = !f.$field.checked; r = document.getElementById(\"row_\"+ff.id); if (r) { r.className = ff.checked ? \"mainsel\" : \"mainbody\" }; for(i=0; i<f.$field.length; i++) { ff = f.${field}[i]; if (!ff.disabled) { ff.checked = !ff.checked; r = document.getElementById(\"row_\"+ff.id); if (r) { r.className = ff.checked ? \"mainsel\" : \"mainbody row\"+((i+1)%2) } } } return false'>$text</a>";
}
sub theme_select_rows_link
{
local ($field, $form, $text, $rows) = @_;
$form = int($form);
my $js = "var sel = { ".join(",", map { "\"".&quote_escape($_)."\":1" } @$rows)." }; ";
$js .= "for(var i=0; i<document.forms[$form].${field}.length; i++) { var ff = document.forms[$form].${field}[i]; var r = document.getElementById(\"row_\"+ff.id); ff.checked = sel[ff.value]; if (r) { r.className = ff.checked ? \"mainsel\" : \"mainbody row\"+((i+1)%2) } } ";
$js .= "return false;";
return "<a class='select_rows' href='#' onClick='$js'>$text</a>";
}
sub theme_ui_checked_columns_row
{
$theme_ui_columns_row_toggle = $theme_ui_columns_row_toggle ? '0' : '1';
local ($cols, $tdtags, $checkname, $checkvalue, $checked, $disabled, $tags) = @_;
my $rv;
my $cbid = &quote_escape(quotemeta("${checkname}_${checkvalue}"));
my $rid = &quote_escape(quotemeta("row_${checkname}_${checkvalue}"));
my $ridtr = &quote_escape("row_${checkname}_${checkvalue}");
my $mycb = $cb;
if ($checked) {
$mycb =~ s/mainbody/mainsel/g;
}
$mycb =~ s/class='/class='row$theme_ui_columns_row_toggle ui_checked_columns /;
$rv .= "<tr id=\"$ridtr\" $mycb onMouseOver=\"this.className = document.getElementById('$cbid').checked ? 'mainhighsel' : 'mainhigh'\" onMouseOut=\"this.className = document.getElementById('$cbid').checked ? 'mainsel' : 'mainbody row$theme_ui_columns_row_toggle'\">\n";
$rv .= "<td ".$tdtags->[0]." class='ui_checked_checkbox'>".
&ui_checkbox($checkname, $checkvalue, undef, $checked, $tags." "."onClick=\"document.getElementById('$rid').className = this.checked ? 'mainhighsel' : 'mainhigh';\"", $disabled).
"</td>\n";
my $i;
for($i=0; $i<@$cols; $i++) {
$rv .= "<td ".$tdtags->[$i+1].">";
if ($cols->[$i] !~ /<a\s+href|<input|<select|<textarea/) {
$rv .= "<label for=\"".
&quote_escape("${checkname}_${checkvalue}")."\">";
}
$rv .= ($cols->[$i] !~ /\S/ ? "<br>" : $cols->[$i]);
if ($cols->[$i] !~ /<a\s+href|<input|<select|<textarea/) {
$rv .= "</label>";
}
$rv .= "</td>\n";
}
$rv .= "</tr>\n";
return $rv;
}
sub theme_ui_radio_columns_row
{
local ($cols, $tdtags, $checkname, $checkvalue, $checked, $tags) = @_;
my $rv;
my $cbid = &quote_escape(quotemeta("${checkname}_${checkvalue}"));
my $rid = &quote_escape(quotemeta("row_${checkname}_${checkvalue}"));
my $ridtr = &quote_escape("row_${checkname}_${checkvalue}");
my $mycb = $cb;
if ($checked) {
$mycb =~ s/mainbody/mainsel/g;
}
$mycb =~ s/class='/class='ui_radio_columns /;
$rv .= "<tr $mycb id=\"$ridtr\" onMouseOver=\"this.className = document.getElementById('$cbid').checked ? 'mainhighsel' : 'mainhigh'\" onMouseOut=\"this.className = document.getElementById('$cbid').checked ? 'mainsel' : 'mainbody'\">\n";
$rv .= "<td ".$tdtags->[0]." class='ui_radio_radio'>".
&ui_oneradio($checkname, $checkvalue, undef, $checked, $tags." "."onClick=\"for(i=0; i<form.$checkname.length; i++) { ff = form.${checkname}[i]; r = document.getElementById('row_'+ff.id); if (r) { r.className = 'mainbody' } } document.getElementById('$rid').className = this.checked ? 'mainhighsel' : 'mainhigh';\"").
"</td>\n";
my $i;
for($i=0; $i<@$cols; $i++) {
$rv .= "<td ".$tdtags->[$i+1].">";
if ($cols->[$i] !~ /<a\s+href|<input|<select|<textarea/) {
$rv .= "<label for=\"".
&quote_escape("${checkname}_${checkvalue}")."\">";
}
$rv .= ($cols->[$i] !~ /\S/ ? "<br>" : $cols->[$i]);
if ($cols->[$i] !~ /<a\s+href|<input|<select|<textarea/) {
$rv .= "</label>";
}
$rv .= "</td>\n";
}
$rv .= "</tr>\n";
return $rv;
}
# theme_ui_nav_link(direction, url, disabled)
# Returns an arrow icon linking to provided url
sub theme_ui_nav_link
{
my ($direction, $url, $disabled) = @_;
my $alt = $direction eq "left" ? '<-' : '->';
if ($disabled) {
return "<img alt=\"$alt\" align=\"middle\""
. "src=\"$gconfig{'webprefix'}/images/$direction-grey.gif\">\n";
}
else {
return "<a href=\"$url\"><img alt=\"$alt\" align=\"top\""
. "src=\"$gconfig{'webprefix'}/images/$direction.gif\"></a>\n";
}
}
# theme_footer([page, name]+, [noendbody])
# Output a footer for returning to some page
sub theme_footer
{
my $i;
my $count = 0;
my $module_name = &get_module_name();
my %module_info = &get_module_info($module_name);
for($i=0; $i+1<@_; $i+=2) {
local $url = $_[$i];
if ($url ne '/' || !$tconfig{'noindex'}) {
if ($url eq '/') {
$url = "/?cat=$module_info{'category'}";
}
elsif ($url eq '' && $module_name) {
$url = "/$module_name/$module_info{'index_link'}";
}
elsif ($url =~ /^\?/ && $module_name) {
$url = "/$module_name/$url";
}
$url = "$gconfig{'webprefix'}$url" if ($url =~ /^\//);
if ($count++ == 0) {
print theme_ui_nav_link("left", $url);
}
else {
print "&nbsp;|\n";
}
print "&nbsp;<a href=\"$url\">",&text('main_return', $_[$i+1]),"</a>\n";
}
}
print "<br>\n";
if (!$_[$i]) {
print "</body></html>\n";
}
}
# theme_ui_hidden_javascript()
# Returns <script> and <style> sections for hiding functions and CSS
sub theme_ui_hidden_javascript
{
my $rv;
my $imgdir = "$gconfig{'webprefix'}/images";
return <<EOF;
<style>
.opener_shown {display:inline}
.opener_hidden {display:none}
</style>
<script>
// Open or close a hidden section
function hidden_opener(divid, openerid)
{
var divobj = document.getElementById(divid);
var openerobj = document.getElementById(openerid);
if (divobj.className == 'opener_shown') {
divobj.className = 'opener_hidden';
openerobj.innerHTML = '<img border=0 src=$imgdir/closed.gif>';
}
else {
divobj.className = 'opener_shown';
openerobj.innerHTML = '<img border=0 src=$imgdir/open.gif>';
}
}
// Show a tab
function select_tab(name, tabname, form)
{
var tabnames = document[name+'_tabnames'];
var tabtitles = document[name+'_tabtitles'];
for(var i=0; i<tabnames.length; i++) {
var tabobj = document.getElementById('tab_'+tabnames[i]);
var divobj = document.getElementById('div_'+tabnames[i]);
var title = tabtitles[i];
if (tabnames[i] == tabname) {
// Selected table
tabobj.innerHTML = '<table cellpadding=0 cellspacing=0><tr>'+
'<td valign=top class=\\'tabSelected\\'>'+
'<img src=$imgdir/lc2.gif alt=""></td>'+
'<td class=\\'tabSelected\\' nowrap>'+
'&nbsp;<b>'+title+'</b>&nbsp;</td>'+
'<td valign=top class=\\'tabSelected\\'>'+
'<img src=$imgdir/rc2.gif alt=""></td>'+
'</tr></table>';
divobj.className = 'opener_shown';
}
else {
// Non-selected tab
tabobj.innerHTML = '<table cellpadding=0 cellspacing=0><tr>'+
'<td valign=top class=\\'tabUnselected\\'>'+
'<img src=$imgdir/lc1.gif alt=""></td>'+
'<td class=\\'tabUnselected\\' nowrap>'+
'&nbsp;<a href=\\'\\' onClick=\\'return select_tab("'+
name+'", "'+tabnames[i]+'")\\'>'+title+'</a>&nbsp;</td>'+
'<td valign=top class=\\'tabUnselected\\'>'+
'<img src=$imgdir/rc1.gif alt=""></td>'+
'</tr></table>';
divobj.className = 'opener_hidden';
}
}
if (document.forms[0] && document.forms[0][name]) {
document.forms[0][name].value = tabname;
}
return false;
}
</script>
EOF
}
1;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 B

View File

@@ -1,28 +0,0 @@
// Correctly handle PNG transparency in Win IE 5.5 or higher.
// http://homepage.ntlworld.com/bobosola. Updated 02-March-2004
function correctPNG()
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "GIF")
{
var imgID = (img.id) ? "id='" + img.id + "' " : ""
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
var imgStyle = "display:inline-block;" + img.style.cssText
if (img.align == "left") imgStyle = "float:left;" + imgStyle
if (img.align == "right") imgStyle = "float:right;" + imgStyle
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
window.attachEvent("onload", correctPNG);

View File

@@ -1,285 +0,0 @@
addEvent(window, "load", sortables_init);
var SORT_COLUMN_INDEX;
function sortables_init() {
var lastAssignedId = 0;
// Find all tables with class sortable and make them sortable
if (!document.getElementsByTagName) return;
tbls = document.getElementsByTagName("table");
for (ti=0;ti<tbls.length;ti++) {
thisTbl = tbls[ti];
if (!thisTbl.id) {
thisTbl.id = 'sortableTable'+this.lastAssignedId++;
}
if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
//initTable(thisTbl.id);
ts_makeSortable(thisTbl);
}
}
}
function ts_makeSortable(table) {
if (table.rows && table.rows.length > 0) {
var firstRow = table.rows[0];
}
if (!firstRow) return;
// We have a first row: assume it's the header, and make its contents clickable links
for (var i=0;i<firstRow.cells.length;i++) {
var cell = firstRow.cells[i];
var txt = ts_getInnerText(cell);
cell.innerHTML = '<b><a href="#" class="sortheader" '+
'onclick="ts_resortTable(this, '+i+');return false;">' +
txt+'<span class="sortarrow">&nbsp;&nbsp;&nbsp;</span></a></b>';
}
}
function ts_getInnerText(el) {
if (typeof el == "string") return el;
if (typeof el == "undefined") { return el };
if (el.innerText) return el.innerText; //Not needed but it is faster
var str = "";
var cs = el.childNodes;
var l = cs.length;
for (var i = 0; i < l; i++) {
switch (cs[i].nodeType) {
case 1: //ELEMENT_NODE
str += ts_getInnerText(cs[i]);
break;
case 3: //TEXT_NODE
str += cs[i].nodeValue;
break;
}
}
return str;
}
function ts_resortTable(lnk,clid) {
// get the span
var span;
for (var ci=0;ci<lnk.childNodes.length;ci++) {
if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
}
var spantext = ts_getInnerText(span);
var td = lnk.parentNode;
while(td.nodeName.toLowerCase() != 'td')
td = td.parentNode;
var column = typeof(clid) == 'undefined' ? td.cellIndex : clid;
var table = getParent(td,'TABLE');
// Work out a type for the column
if (table.rows.length <= 1) return;
var itm = ts_getInnerText(table.rows[1].cells[column]);
sortfn = ts_sort_caseinsensitive;
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/-]\S\S\S[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
if (itm.match(/^[\d\.]+\s*(bytes|b|kb|tb|gb|mb)$/i)) sortfn = ts_sort_filesize;
// Special cases for our mailbox lists
if (itm.match(/^(Empty|Unlimited)$/)) sortfn = ts_sort_filesize;
if (itm.match(/^[\d\.]+%?$/)) sortfn = ts_sort_numeric;
if (itm.match(/^\d+\.\d+\.\d+\.\d+$/)) sortfn = ts_sort_ip;
SORT_COLUMN_INDEX = column;
var firstRow = new Array();
var newRows = new Array();
for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }
for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }
newRows.sort(sortfn);
if (span.getAttribute("sortdir") == 'down') {
ARROW = '&nbsp;&nbsp;&uarr;';
newRows.reverse();
span.setAttribute('sortdir','up');
} else {
ARROW = '&nbsp;&nbsp;&darr;';
span.setAttribute('sortdir','down');
}
// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
// don't do sortbottom rows
for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}
// do sortbottom rows only
for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
// Delete any other arrows there may be showing
var allspans = document.getElementsByTagName("span");
for (var ci=0;ci<allspans.length;ci++) {
if (allspans[ci].className == 'sortarrow') {
if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
allspans[ci].innerHTML = '&nbsp;&nbsp;&nbsp;';
}
}
}
span.innerHTML = ARROW;
}
function getParent(el, pTagName) {
if (el == null) return null;
else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
return el;
else
return getParent(el.parentNode, pTagName);
}
function ts_sort_date(a,b) {
// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
if (aa.length == 10) {
// yyyy/mm/dd format
dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
} else if (aa.length == 11) {
// dd/mon/yyyy format
dt1 = aa.substr(7,4)+ts_month_num(aa.substr(3,3))+aa.substr(0,2);
} else {
yr = aa.substr(6,2);
if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
}
if (bb.length == 10) {
dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
} else if (bb.length == 11) {
// dd/mon/yyyy format
dt2 = bb.substr(7,4)+ts_month_num(bb.substr(3,3))+bb.substr(0,2);
} else {
yr = bb.substr(6,2);
if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
}
if (dt1==dt2) return 0;
if (dt1<dt2) return -1;
return 1;
}
function ts_month_num(month) {
month = month.toLowerCase();
return month == 'jan' ? '01' :
month == 'feb' ? '02' :
month == 'mar' ? '03' :
month == 'apr' ? '04' :
month == 'may' ? '05' :
month == 'jun' ? '06' :
month == 'jul' ? '07' :
month == 'aug' ? '08' :
month == 'sep' ? '09' :
month == 'oct' ? '10' :
month == 'nov' ? '11' :
month == 'dec' ? '12' : '00';
}
function ts_sort_currency(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
return parseFloat(aa) - parseFloat(bb);
}
// handles file sizes, simple numerics, and Unlimited/Empty/None special cases
function ts_sort_filesize(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
if (aa.length == 0) return -1;
else if (bb.length == 0) return 1;
var regex = /^([\d\.]*|none|empty|unlimited)\s*(bytes|b|kb|tb|gb|mb)?$/i;
matchA = aa.match(regex);
matchB = bb.match(regex);
// Give file size class an integer value, if we don't already have one
if (matchA[1] == 'none') valA = -999;
else if (matchA[1] == 'empty') valA = 0;
else if (matchA[1] == '0') valA = 0;
else if (matchA[1] == 'unlimited') valA = 999;
else if (matchA[2] == 'b' || matchA[2] == 'bytes') valA = 1;
else if (matchA[2] == undefined || matchA[2] == '') valA = 1;
else if (matchA[2] == 'kb') valA = 2;
else if (matchA[2] == 'mb') valA = 3;
else if (matchA[2] == 'gb') valA = 4;
else if (matchA[2] == 'tb') valA = 5;
if (matchB[1] == 'none') valB = -999;
else if (matchB[1] == 'empty') valB = 0;
else if (matchB[1] == '0') valB = 0;
else if (matchB[1] == 'unlimited') valB = 999;
else if (matchB[2] == 'b' || matchB[2] == 'bytes') valB = 1;
else if (matchB[2] == undefined || matchB[2] == '') valB = 1;
else if (matchB[2] == 'kb') valB = 2;
else if (matchB[2] == 'mb') valB = 3;
else if (matchB[2] == 'gb') valB = 4;
else if (matchB[2] == 'tb') valB = 5;
if (valA == valB) {
if ( isNaN(matchA[1])) return -1;
if ( isNaN(matchB[1])) return 1;
// Files are in the same size class kb/gb/mb/etc
// just do a numeric sort on the file size
return matchA[1]-matchB[1];
} else if (valA < valB) {
return -1;
} else if (valA > valB) {
return 1;
}
}
function ts_sort_numeric(a,b) {
aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
if (isNaN(aa)) aa = 0;
bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
if (isNaN(bb)) bb = 0;
return aa-bb;
}
function ts_sort_caseinsensitive(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
if (aa==bb) return 0;
if (aa<bb) return -1;
return 1;
}
function ts_sort_ip(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
var regexp = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
var matchA = aa.match(regexp);
var matchB = bb.match(regexp);
return !matchA ? -1 :
!matchB ? 1 :
parseInt(matchA[1]) < parseInt(matchB[1]) ? -1 :
parseInt(matchA[1]) > parseInt(matchB[1]) ? 1 :
parseInt(matchA[2]) < parseInt(matchB[2]) ? -1 :
parseInt(matchA[2]) > parseInt(matchB[2]) ? 1 :
parseInt(matchA[3]) < parseInt(matchB[3]) ? -1 :
parseInt(matchA[3]) > parseInt(matchB[3]) ? 1 :
parseInt(matchA[4]) < parseInt(matchB[4]) ? -1 :
parseInt(matchA[4]) > parseInt(matchB[4]) ? 1 : 0;
}
function ts_sort_default(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
if (aa==bb) return 0;
if (aa<bb) return -1;
return 1;
}
function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+, NS6 and Mozilla
// By Scott Andrew
{
if (elm.addEventListener){
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent){
var r = elm.attachEvent("on"+evType, fn);
return r;
} else {
alert("Handler could not be removed");
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 B

View File

@@ -1,129 +0,0 @@
head {
color: #333333;
}
body {
color: #333333;
}
table { border-width: 0px;
empty-cells: hide;
}
table.formsection, table.sortable, table.ui_table, table.loginform {
border-collapse: collapse;
border: 1px solid #FFFFFF;
width: 100%;
}
img, a img { border:0; }
tr.row0 {background-color:#e8e8ea;}
tr.row1 {background-color:#f8f8fa;}
table.formsection thead, table.sortable thead, table.ui_table thead, table.loginform thead {
background-color:#427ad1;
border:0px;
color:#ffffff;
border: 2px solid #b3b6b0;
}
table.formsection tbody, table.sortable tbody, table.ui_table tbody, table.loginform tbody {
background-color:#EFEFEF;
}
tr.maintitle {
color: #ffffff;
background-color: #427ad1;
}
td.maintitle {
color: #ffffff;
background-color: #427ad1;
}
tr.maintitle a, tr.maintitle a:visited {
color: #ffffff;
}
td.maintitle a, td.maintitle a:visited {
color: #ffffff;
}
tr.maintitle a:hover {
color: #EFEFEF;
}
td.maintitle a:hover {
color: #EFEFEF;
}
a:link { color: #333399;
text-decoration: none;
}
a:hover, a:visited:hover { color: #6666EE;
text-decoration: none;
}
a:visited { color: #333399;
text-decoration: none;
}
body, p, td, br, center { font-size: 10pt;
font-family: sans-serif;
}
title { color: #333333;
font-family: sans-serif;
}
h1 { color: #333333;
font-size: 150%;
font-family: sans-serif;
}
h2 { color: #333333;
font-size: 130%;
font-family: sans-serif;
}
h3 { color: #333333;
font-size: 125%;
font-family: sans-serif;
}
h4 { color: #333333;
font-size: 120%;
font-family: sans-serif;
}
th { font-size: small; }
pre { font-size: 8pt; }
#main { border-style: solid;
border:1px solid #FFFFFF;
margin:0;
padding:0;
}
tr.mainsel { background-color: #ddffbb; }
tr.mainhigh { background-color: #ffffbb; }
tr.mainhighsel { background-color: #bbffcc; }
.itemhidden { display: none; }
.itemshown { display:block; }
.barchart { padding: 1px;
border: 1px solid #b3b6b0;
position:relative;
}
.ui_post_header{ font-size: 120%;
text-align: center;
padding: 4px;
}
hr { border: 0;
width: 90%;
height: 1px;
color: #D9D9D9;
background-color: #D9D9D9;
}
table.wrapper {
background-color:#D9D9D9;
border:0;
padding:0;
margin:0;
border-collapse:collapse;
}
div.wrapper {
border:1px solid #D9D9D9;
background-color:#F5F5F5;
padding:0;
margin:0;
}
.shrinkwrapper {
background-color:#D9D9D9;
border:0;
padding:0;
margin:0;
border-collapse:collapse;
}
.tabSelected {
background-color:#D9D9D9;
}
.tabUnselected {
background-color:#dadaf8;
}

Some files were not shown because too many files have changed in this diff Show More