$user{'skill'} = $gconfig{"skill_$user[0]"};
$user{'risk'} = $gconfig{"risk_$user[0]"};
$user{'rbacdeny'} = $gconfig{"rbacdeny_$user[0]"};
- $user{'theme'} = $gconfig{"theme_$user[0]"};
+ ($user{'theme'}, $user{'overlay'}) =
+ split(/\s+/, $gconfig{"theme_$user[0]"});
$user{'readonly'} = $gconfig{"readonly_$user[0]"};
$user{'ownmods'} = [ split(/\s+/,
$gconfig{"ownmods_$user[0]"}) ];
&lock_file($ENV{'MINISERV_CONFIG'});
&get_miniserv_config(\%miniserv);
if ($user{'theme'}) {
- $miniserv{"preroot_".$user{'name'}} = $user{'theme'};
+ $miniserv{"preroot_".$user{'name'}} =
+ $user{'theme'}.($user{'overlay'} ? " ".$user{'overlay'} : "");
}
elsif (defined($user{'theme'})) {
$miniserv{"preroot_".$user{'name'}} = "";
$gconfig{"ownmods_".$user{'name'}} = join(" ", @{$user{'ownmods'}})
if (@{$user{'ownmods'}});
delete($gconfig{"theme_".$user{'name'}});
-$gconfig{"theme_".$user{'name'}} = $user{'theme'} if (defined($user{'theme'}));
+if ($user{'theme'}) {
+ $gconfig{"theme_".$user{'name'}} =
+ $user{'theme'}.($user{'overlay'} ? " ".$user{'overlay'} : "");
+ }
+elsif (defined($user{'theme'})) {
+ $gconfig{"theme_".$user{'name'}} = '';
+ }
$gconfig{"readonly_".$user{'name'}} = $user{'readonly'}
if (defined($user{'readonly'}));
$gconfig{"realname_".$user{'name'}} = $user{'real'}
&get_miniserv_config(\%miniserv);
delete($miniserv{"preroot_".$_[0]});
if ($user{'theme'}) {
- $miniserv{"preroot_".$user{'name'}} = $user{'theme'};
+ $miniserv{"preroot_".$user{'name'}} =
+ $user{'theme'}.($user{'overlay'} ? " ".$user{'overlay'} : "");
}
elsif (defined($user{'theme'})) {
$miniserv{"preroot_".$user{'name'}} = "";
$gconfig{"ownmods_".$user{'name'}} = join(" ", @{$user{'ownmods'}})
if (@{$user{'ownmods'}});
delete($gconfig{"theme_".$_[0]});
-$gconfig{"theme_".$user{'name'}} = $user{'theme'} if (defined($user{'theme'}));
+if ($user{'theme'}) {
+ $gconfig{"theme_".$user{'name'}} =
+ $user{'theme'}.($user{'overlay'} ? " ".$user{'overlay'} : "");
+ }
+elsif (defined($user{'theme'})) {
+ $gconfig{"theme_".$user{'name'}} = '';
+ }
delete($gconfig{"readonly_".$_[0]});
$gconfig{"readonly_".$user{'name'}} = $user{'readonly'}
if (defined($user{'readonly'}));
@modules = map { @{$_->{'modules'}} } @cats;
$charset = defined($force_charset) ? $force_charset : &get_charset();
-&PrintHeader($charset);
+print &popup_header();
print <<EOF;
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<link rel="stylesheet" type="text/css" href="unauthenticated/style.css" />
<link rel="stylesheet" type="text/css" href="left.css" />
<script>
function toggleview (id1,id2) {
print "<div class='aftericon'><a target=_top href='$ENV{'HTTP_WEBMIN_SERVERS'}'>$text{'header_servers'}</a></div>";
}
-print <<EOF;
-</form>
-</body>
-EOF
+print &popup_footer();
# print_category_opener(name, &allcats, label)
# Prints out an open/close twistie for some category
require './change-user-lib.pl';
&ReadParse();
-&ui_print_unbuffered_header(undef, $text{'change_title'}, "");
-
@users = &acl::list_users();
($user) = grep { $_->{'name'} eq $base_remote_user } @users;
$oldtheme = $user->{'theme'};
+$oldoverlay = $user->{'overlay'};
if (!defined($oldtheme)) {
- $oldtheme = $gconfig{'theme'};
+ ($oldtheme, $oldoverlay) = split(/\s+/, $gconfig{'theme'});
}
# Validate the password
&error(&text('change_epass', $perr)) if ($perr);
}
-print "$text{'change_user'}<br>\n";
+# Parse custom language
if ($access{'lang'}) {
if ($in{'lang_def'}) {
$user->{'lang'} = undef;
$user->{'lang'} = $in{'lang'};
}
}
+
+# Parse custom theme and possibly overlay
if ($access{'theme'}) {
if ($in{'theme_def'}) {
$user->{'theme'} = undef;
if (!defined($newtheme)) {
$newtheme = $gconfig{'theme'};
}
+
+ # Overlay
+ if ($in{'overlay_def'} || !defined($in{'overlay'})) {
+ $newoverlay = undef;
+ }
+ else {
+ $newoverlay = $in{'overlay'};
+ $user->{'theme'} || &error($text{'change_eoverlay'});
+ %oinfo = &get_theme_info($in{'overlay'});
+ if ($oinfo{'depends'} &&
+ &indexof($user->{'theme'},
+ split(/\s+/, $oinfo{'depends'})) < 0) {
+ &error($text{'change_eoverlay2'});
+ }
+ $user->{'overlay'} = $in{'overlay'};
+ }
}
+
+# Parse password change
if ($access{'pass'} && &can_change_pass($user) && !$in{'pass_def'}) {
$user->{'pass'} = &acl::encrypt_password($in{'pass'});
$user->{'temppass'} = 0;
}
+
+&ui_print_unbuffered_header(undef, $text{'change_title'}, "");
+
+print "$text{'change_user'}<br>\n";
&acl::modify_user($user->{'name'}, $user);
print "$text{'change_done'}<p>\n";
&reload_miniserv();
print "$text{'change_done'}<p>\n";
-if ($access{'theme'} && $newtheme ne $oldtheme) {
+if ($access{'theme'} &&
+ ($newtheme ne $oldtheme || $newoverlay ne $oldoverlay)) {
print "$text{'change_redirect'}<br>\n";
- print "<script>\n";
- print "window.parent.location = '/';\n";
- print "</script>\n";
+ print &js_redirect("/", "top");
print "$text{'change_done'}<p>\n";
}
if ($access{'theme'}) {
# Show personal theme
if ($gconfig{'theme'}) {
- %tinfo = &webmin::get_theme_info($gconfig{'theme'});
+ ($gtheme, $goverlay) = split(/\s+/, $gconfig{'theme'});
+ %tinfo = &webmin::get_theme_info($gtheme);
$tname = $tinfo{'desc'};
}
else {
$tname = $text{'index_themedef'};
}
+ @all = &webmin::list_themes();
+ @themes = grep { !$_->{'overlay'} } @all;
+ @overlays = grep { $_->{'overlay'} } @all;
+
+ # Main theme
print &ui_table_row($text{'index_theme'},
&ui_radio("theme_def", defined($user->{'theme'}) ? 0 : 1,
[ [ 1, &text('index_themeglobal', $tname)."<br>" ],
&ui_select("theme", $user->{'theme'},
[ [ '', $text{'index_themedef'} ],
map { [ $_->{'dir'}, $_->{'desc'} ] }
- &webmin::list_themes() ]));
+ @themes ]));
+
+ # Overlay, if any
+ if (@overlays) {
+ print &ui_table_row($text{'index_overlay'},
+ &ui_select("overlay", $user->{'overlay'},
+ [ [ '', $text{'index_overlaydef'} ],
+ map { [ $_->{'dir'}, $_->{'desc'} ] }
+ @overlays ]));
+ }
}
if ($access{'pass'} && &can_change_pass($user)) {
index_langglobal=Global language ($1)
index_langset=Personal choice ..
index_theme=Webmin UI theme
+index_overlay=Theme overlay
+index_overlaydef=None - use theme defaults
index_themeglobal=Global theme ($1)
index_themeset=Personal choice ..
index_pass=Webmin login password
change_title=Changing Settings
change_user=Modifying Webmin login ..
change_done=.. done
-change_restart=Re-starting Webmin ..
+change_restart=Reloading Webmin ..
change_redirect=Re-directing to main menu ..
change_ecolon=Your password cannot contain the : character
change_epass=New password is not valid : $1
+change_eoverlay=You cannot select a theme overlay unless a UI theme is also chosen
+change_eoverlay2=The selected theme overlay is not compatible with the chosen UI theme
acl_lang=Can change language?
acl_theme=Can change theme?
overlay=1
webmin=1
usermin=1
-depends=virtual-server-theme
+depends=virtual-server-theme blue-theme
version=1.0
($gtheme) = split(/\s+/, $gconfig{'theme'});
if ($in{'overlay'}) {
%oinfo = &get_theme_info($in{'overlay'});
- if ($oinfo{'overlay'} &&
- &indexof($gtheme, split(/\s+/, $oinfo{'overlay'})) < 0) {
+ if ($oinfo{'depends'} &&
+ &indexof($gtheme, split(/\s+/, $oinfo{'depends'})) < 0) {
&error($text{'themes_eoverlay'});
}
}