HTTPD-User-Manage
view release on metacpan or search on metacpan
user_manage view on Meta::CPAN
my $success = $db->set_group(-user=>$user,'-group'=>\@groups);
unless ($success) {
error_msg('Error Setting Groups',
"An error occurred while setting the groups: ",
em(HTTPD::RealmManager->error(),"."),
" Please fix the error and try again.");
print hr();
return undef;
}
&audit_trail("web $admin: changed groups for user '$user' to '".join(",",@groups)."'");
}
# If the info is different from the current entry, then we need
# to set that too.
if (my %fields = $db->fields) {
my $update = 0;
my @audit_info;
my $info = $db->get_fields(-name=>$user,-fields=>[keys %fields]);
foreach (keys %fields) {
my $new = param("F_$_");
undef $new if $fields{$_}=~/^i/ && $new!~/^-?\d+$/;
undef $new if $fields{$_}=~/^f/ && $new!~/^-?[\dEe.]+$/;
$update++ if defined($new) && $new ne $info->{$_};
$info->{$_} = $new;
push( @audit_info, "$_=$new");
}
if ( $update
&& $db->set_passwd(-user=>$user,-fields=>$info) ) {
&audit_trail("web $admin: changed info for user '$user' to '".join(",",@audit_info)."'");
}
}
# If we get here, then all is well.
print h1('Edit successful'),
"The entry for user ",em(escapeHTML($user))," was successfully updated.",
hr();
1;
}
sub generate_user_list {
my $db = shift;
my $user = shift;
print h1("User List for Realm",em(escapeHTML($Q::realm)));
my @users = sort $db->users();
print start_form(),
hidden(-name=>'referer',-value=>$referer),
hidden(-name=>'realm',-value=>$Q::realm),
$REQUIRE_ACCESS_CONTROL ? '' :
( hidden(-name=>'admin',-value=>$Q::user),
hidden(-name=>'passwd',-value=>'')
),
table(
TR(
th({valign=>'TOP',align=>'RIGHT'},"Existing Users"),
td({valign=>'TOP',align=>'LEFT',rowspan=>2},
@users > $MAX_SCROLL ? scrolling_list(-name=>'user','-values'=>\@users,-size=>$MAX_SCROLL,
-default=>$Q::user[$#user]||$Q::user,
-override=>1)
: popup_menu(-name=>'user','-values'=>\@users,
-default=>$Q::user[$#user]||$Q::user,
-override=>1)
),
th({valign=>'MIDDLE',align=>'RIGHT'},"New User"),
td({valign=>'MIDDLE',align=>'LEFT'},textfield(-name=>'user',-default=>'',-override=>1,-width=>16),
)
),
TR(
th(''),
td(''),
td(submit(-name=>'action',-value=>'Delete'),
submit(-name=>'action',-value=>'Edit/Add'))
)
),
end_form(),
hr();
}
sub generate_user_page {
my $db = shift;
my $user = shift;
my $current_passwd = $db->passwd($user);
my @groups = $db->group($user);
my @all_groups = sort $db->groups();
@groups = ($DEFAULT_GROUP) if !@groups && $DEFAULT_GROUP;
@all_groups = ($DEFAULT_GROUP) if !@all_groups && $DEFAULT_GROUP;
my $u = escapeHTML($user);
print h1($current_passwd ? "Edit User \"$u\"" : "New User \"$u\"");
# Other fields [Turned from horizontal to vertical listing, CJD]
if (my %fields = $db->fields) {
my (@rows,@cells);
my $info = $db->get_fields(-name=>$user,-fields=>[keys %fields]);
##CJD push(@rows,th({align=>LEFT},[keys %fields]));
foreach (keys %fields) {
@cells = (b($_)); ##CJD
my ($length,$height,$default);
if ($fields{$_}=~/^[msif]?(\d+)/i) {
$length = $1;
} else {
$length = $fields{$_}=~/^[fi]$/ ? 6 : 20;
}
if ($fields{$_}=~/\[(.*)\]$/) {
$default = $1;
} else {
$default = ($fields{$_} =~ /^[fi]$/i) ? 0 : '';
}
my $ref_info = ref($info) ? $info->{$_} : $default;
if ($fields{$_}=~/^c\[([^,]*(,[^,]*)*)\]$/) {
# Selection field
my @elements = split(/,/, $1);
my $def = ref($info) ? $info->{$_} : $elements[0];
push(@cells,popup_menu(-name=>"F_$_",-values=>\@elements,-default=>$def));
}
elsif ($fields{$_}=~/^m\d*\.(\d+)/) {
$height = $1;
# Multi-line textbox [CJD]
push(@cells,textarea(-name=>"F_$_",-columns=>$length,-rows=>$height,-value=>$ref_info,-default=>$ref_info));
}
else {
# Textbox
push(@cells,textfield(-name=>"F_$_",-size=>$length,-value=>$ref_info,-default=>$ref_info));
}
push(@rows,td(\@cells)); ##CJD
}
##CJD push(@rows,td(\@cells));
$other_fields = strong('Other Information:') . table(TR(\@rows));
}
# sometimes the groups have to be unique, making this code even more complicated!
my ($group_stuff,$data);
if (($data = $db->realm->SQLdata) && ($data->{usertable} eq $data->{grouptable})) {
$group_stuff = td(popup_menu(-name=>'groups','-values'=>\@all_groups,-default=>$groups[0]));
} else {
$group_stuff =(@all_groups <= $MAX_SCROLL) ? td(checkbox_group(-name=>'groups','-values'=>\@all_groups,
-defaults=>\@groups,-linebreak=>1))
: td(scrolling_list(-name=>'groups','-values'=>\@all_groups,
-size=>$MAX_SCROLL,
-defaults=>\@groups,-multiple=>1)),
}
print start_form(),
hidden(-name=>'referer',-value=>$referer),
hidden(-name=>'realm',-value=>$Q::realm),
hidden(-name=>'user',-value=>$user),
$REQUIRE_ACCESS_CONTROL ? '' :
( hidden(-name=>'admin',-value=>$Q::user),
hidden(-name=>'passwd',-value=>'')
),
table({-width=>'100%',-border=>''},
TR(th(['Set Groups','Set Password'])),
TR({-valign=>TOP},
td(
table({-width=>'100%'},
TR({-valign=>TOP},
$group_stuff,
th('Other:'),
td(textfield(-name=>'groups',
-default=>'',
-override=>1,
-size=>12))
)
)
),
td(
table({-width=>'100%'},
TR(th('Enter:'),td(password_field(-name=>'password1',
-default=>$current_passwd,
-size=>12,
-override=>1))),
TR(th('Confirm:'),td(password_field(-name=>'password2',
-default=>$current_passwd,
-size=>12,
-override=>1)))
)
)
)
),
$other_fields ? (p(),$other_fields) : (),
CGI::reset(-value=>'Reset Values'),
submit(-name=>'action',-value=>'Set Values'),
end_form();
if (0) { # dead code
my $back = self_url;
$back=~s/action=[^=&]*&?//g;
$back=~s/password[0-9]?=[^=&]*&?//g;
$back=~s/groups=[^=&]*&?//g;
$back=~s/user=[^=&]*&?//g;
$back.="user=$user";
print a({href=>$back},"List of Users");
}
print hr();
( run in 1.073 second using v1.01-cache-2.11-cpan-364913b4093 )