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 )