Skip to content

Commit

Permalink
Allow users to select their own theme overlays
Browse files Browse the repository at this point in the history
  • Loading branch information
jcameron committed Dec 18, 2008
1 parent b68c5c6 commit d64464d
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 28 deletions.
25 changes: 20 additions & 5 deletions acl/acl-lib.pl
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ sub list_users
$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]"}) ];
Expand Down Expand Up @@ -110,7 +111,8 @@ sub create_user
&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'}} = "";
Expand Down Expand Up @@ -164,7 +166,13 @@ sub create_user
$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'}
Expand Down Expand Up @@ -194,7 +202,8 @@ sub modify_user
&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'}} = "";
Expand Down Expand Up @@ -289,7 +298,13 @@ sub modify_user
$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'}));
Expand Down
11 changes: 2 additions & 9 deletions blue-theme/left.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,8 @@ do './ui-lib.pl';
@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) {
Expand Down Expand Up @@ -153,10 +149,7 @@ if ($ENV{'HTTP_WEBMIN_SERVERS'}) {
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
Expand Down
38 changes: 30 additions & 8 deletions change-user/change.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
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
Expand All @@ -22,7 +21,7 @@ if ($access{'pass'} && &can_change_pass($user) && !$in{'pass_def'}) {
&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;
Expand All @@ -31,6 +30,8 @@ if ($access{'lang'}) {
$user->{'lang'} = $in{'lang'};
}
}

# Parse custom theme and possibly overlay
if ($access{'theme'}) {
if ($in{'theme_def'}) {
$user->{'theme'} = undef;
Expand All @@ -42,23 +43,44 @@ if ($access{'theme'}) {
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";

print "$text{'change_restart'}<br>\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";
}

Expand Down
19 changes: 17 additions & 2 deletions change-user/index.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,35 @@ if ($access{'lang'}) {
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>" ],
[ 0, $text{'index_themeset'} ] ])." ".
&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)) {
Expand Down
6 changes: 5 additions & 1 deletion change-user/lang/en
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ index_lang=Webmin UI language
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
Expand All @@ -21,10 +23,12 @@ index_dpass=the password used to login with
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?
Expand Down
2 changes: 1 addition & 1 deletion overlay-theme/theme.info
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ desc=CSS Overlay Demo Theme
overlay=1
webmin=1
usermin=1
depends=virtual-server-theme
depends=virtual-server-theme blue-theme
version=1.0
4 changes: 2 additions & 2 deletions webmin/change_overlay.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ require './webmin-lib.pl';
($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'});
}
}
Expand Down

0 comments on commit d64464d

Please sign in to comment.