diff options
author | Daouda Lo <daouda@mandriva.com> | 2003-06-11 17:46:14 +0000 |
---|---|---|
committer | Daouda Lo <daouda@mandriva.com> | 2003-06-11 17:46:14 +0000 |
commit | 5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c (patch) | |
tree | 5cda68b9171c12e705c0b02c59896ef03f76a7f5 /userdrake2 | |
parent | 4fc0bd6ba58cd7a614cb8eb83e77d0f573a69727 (diff) | |
download | userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.tar userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.tar.gz userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.tar.bz2 userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.tar.xz userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.zip |
- password aging
- add group to users
- use Pixbuf Cell instead of Toggle
Diffstat (limited to 'userdrake2')
-rwxr-xr-x | userdrake2 | 127 |
1 files changed, 87 insertions, 40 deletions
@@ -137,6 +137,7 @@ sub Refresh_Users_Full { $utree_model->clear(); my @UserReal; LOOP: foreach my $l (@$users) { next LOOP if ($filterusers && $l->Uid($GetValue) <= 499 || $l->Uid($GetValue) == 65534) ; push(@UserReal, $l) }; + foreach my $l (@UserReal) { my $a = $l->Gid($GetValue); my $group = $ctx->LookupGroupById($a); $utree_model->append_set([ 0 => $l->UserName($GetValue), 1 => $l->Uid($GetValue), 2 => $group->GroupName($GetValue), 3 => $l->Gecos($GetValue), 4 => $l->LoginShell($GetValue), 5 => $l->HomeDir($GetValue) ]); @@ -243,10 +244,10 @@ sub AddUser { ); map { $us->{o}->{$_}->set_active } (qw(privategroup createhomedir)); $us->{o}->{login}->signal_connect('focus_out_event' => sub { - my $fullname = $us->{o}->{fullname}->get_text(); - $us->{o}->{homedir}->set_text("/home/".$us->{o}->{login}->get_text()); - $fullname or $us->{o}->{fullname}->set_text($us->{o}->{login}->get_text()) - }); + my $fullname = $us->{o}->{fullname}->get_text(); + $us->{o}->{homedir}->set_text("/home/".$us->{o}->{login}->get_text()); + $fullname or $us->{o}->{fullname}->set_text($us->{o}->{login}->get_text()) + }); $us->{o}->{uid} = Gtk2::SpinButton->new(Gtk2::Adjustment->new(500, 1, 65000, 1, 10, 10), 1, 0); $h->pack_end($us->{o}->{uid}, 0, 0, 4); $h->pack_end(Gtk2::Label->new(N("UID: ")), 0, 0, 4); @@ -351,29 +352,45 @@ sub UpdateOrDelUsersInGroup { print ("Updating MemberName \n"); } } +sub GetNameEntFromIter { + my ($tree, $model, $rank) = @_; + my (undef, $iter) = $tree->get_selection->get_selected; + my $name = $model->get($iter, $rank); + $iter->free; + $name +} sub Delete { my $page = $nb->get_current_page(); + $us->{wnd}{rwindow}->set_sensitive(0); + gtkset_mousecursor_wait(); $error = 0; if ($page == 0) { - my (undef, $iter) = $usertree->get_selection->get_selected; - my $username = $utree_model->get($iter, 0); - $iter->free; + my $username = GetNameEntFromIter($usertree, $utree_model, 0); my $userEnt = $ctx->LookupUserByName($username); $ctx->UserDel($userEnt); UpdateOrDelUsersInGroup($username, 1); #Let's check out the user's primary group my $usergid = $userEnt->Gid($GetValue); my $groupEnt = $ctx->LookupGroupById($usergid); my $member = $groupEnt->MemberName(1, 0); - if (!$groupEnt && @$member) { $groupEnt->Gid($GetValue) > 500 and $ctx->GroupDel($groupEnt) }; - my $removehome = GimmeChoice(N(" Remove Home Directory"), N("Do you want to delete the user's home directory?")); + if ($groupEnt && (scalar(@$member) == 0)) { $groupEnt->Gid($GetValue) > 499 and $ctx->GroupDel($groupEnt) }; + my $removehome = GimmeChoice(N(" Remove Home Directory"), N("Do you want to delete the user's home directory and mail spool?")); $removehome and $ctx->Clean($userEnt); Refresh($sysfilter) } elsif ($page == 1) { - my (undef, $iter) = $grouptree->get_selection->get_selected; - my $groupname = $gtree_model->get($iter,0); + my $groupname = GetNameEntFromIter($grouptree, $gtree_model, 0); my $groupEnt = $ctx->LookupGroupByName($groupname); - - $iter->free + my $members = $ctx->EnumerateUsersByGroup($groupname); + GLOOP:foreach my $username (@$members) { + my $userEnt = $ctx->LookupUserByName($username); + if ($userEnt->Gid($GetValue) == $groupEnt->Gid($GetValue)) { + raiseerror(N("%s is a primary group for user %s\n Remove the user first", $groupname, $username)); + $error = 1; + last GLOOP + } + } + if (!$error) { $ctx->GroupDel($groupEnt); Refresh($sysfilter) } } + $us->{wnd}{rwindow}->set_sensitive(1); + gtkset_mousecursor_normal(); } # Gtk Facilities sub CreateTree { @@ -388,14 +405,14 @@ sub CreateTree { my (undef, $iter) = $tree->get_selection->get_selected; return unless $iter; foreach (($tbedit, $tbdel, $checkedit, $checkdel)) { $_->set_sensitive(1) }; - Edit($iter) if $event->type eq '2button-press'; + Edit() if $event->type eq '2button-press'; $iter->free; }); $tree->signal_connect(key_press_event => sub { my (undef, $event) = @_; my (undef, $iter) = $tree->get_selection->get_selected; return unless $iter; - Edit($iter) if ($event->keyval == Gtk2::Gdk::Event::Key->Sym_Return); + Edit() if ($event->keyval == Gtk2::Gdk::Event::Key->Sym_Return); $iter->free; }); $tree @@ -436,19 +453,14 @@ sub BuildGui { $vbox } sub Edit { - my $iter = shift; my $w = ugtk2->new('userdrake', grab => 1); - map { - my $tr = $_->[0]; my $ch = $_->[1]; my $co = $_->[2]; - my $tree_model = Gtk2::ListStore->new(Gtk2::GType->BOOLEAN, Gtk2::GType->STRING); - $us->{$tr} = Gtk2::TreeView->new_with_model($tree_model); - $us->{$tr}->get_selection->set_mode('browse'); - $us->{$ch} = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererToggle->new, 'active' => 0); - $us->{$co} = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0); - $us->{$tr}->append_column($us->{$ch}); - $us->{$tr}->append_column($us->{$co}); - $us->{$tr}->set_headers_visible(0); - } (["utree", "ucheck", "ucol"], ["gtree", "gcheck", "gcol"]); + my $model = Gtk2::ListStore->new(Gtk2::GType->OBJECT, Gtk2::GType->STRING, Gtk2::GType->INT); + my $tree = Gtk2::TreeView->new_with_model($model); my %g; my %u; my $groupname; + my @pix = ($pixdir.'selected.png', $pixdir.'unselected.png'); + $tree->get_selection->set_mode('single'); + $tree->append_column(my $check = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 0)); + $tree->append_column(my $col = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 1)); + $tree->set_headers_visible(0); my $p = $nb->get_current_page(); print " Page = $p"; my $nbU = Gtk2::Notebook->new; my $nbG = Gtk2::Notebook->new; @@ -486,18 +498,27 @@ sub Edit { ) )), gtkshow(Gtk2::Label->new(N("Password Info")))); GrayBox($us->{o}->{pcheckexpire}, $v, 0); - gtkappend_page($nbU, + gtkappend_page($nbU, gtkpack_(Gtk2::VBox->new(0, 2), 0, Gtk2::Label->new(N("Select the groups that the user will be a member of:")), - 1, $us->{utree} + 1, $tree ), gtkshow(Gtk2::Label->new(N("Account Info")))); - } else { + } elsif ($p == 1) { $nbG->set_size_request(300, 200); gtkappend_page($nbG, gtkpack_(Gtk2::VBox->new(0, 2), 1, BuildGui()), gtkshow(Gtk2::Label->new(N("Group Data")))); gtkappend_page($nbG, gtkpack_(Gtk2::VBox->new(0, 1), 0, Gtk2::Label->new(N("Select the users to join this group :")), - 1, $us->{gtree}), gtkshow(Gtk2::Label->new(N("Group Users")))); + 1, create_scrolled_window($tree)), gtkshow(Gtk2::Label->new(N("Group Users")))); + $groupname = GetNameEntFromIter($grouptree, $gtree_model, 0); $us->{o}->{groupname}->set_text($groupname); + my $groupEnt = $ctx->LookupGroupByName($groupname); + my $users = $ctx->UsersEnumerate(); #sort(@$users); + my $members = $ctx->EnumerateUsersByGroup($groupname); + foreach my $user (@$users) { + if (any { $_ eq $user } @$members) { + $model->append_set([ 0 => gtkcreate_pixbuf($pixdir.'selected.png'), 1 => $user, 2 => 1]); + } else { $model->append_set([ 0 => gtkcreate_pixbuf($pixdir.'unselected.png'), 1 => $user, 2 => 0]); } + } } gtkadd($w->{window}, gtkpack_(Gtk2::VBox->new(0,5), @@ -508,19 +529,45 @@ sub Edit { my $retv = $_->[1]; gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub { if (!$retv) { - #my ($model, $iter) = $tree->get_selection->get_selected; - #$model and $w->{retval} = { sel => $model->get($iter, 0) }; - #$iter and $iter->free; + if ($p == 0) { + $u{username} = $us->{o}->{log}->get_text(); + } elsif ($p == 1) { + $g{groupname} = $us->{o}->{groupname}->get_text(); $error = 0; + if (!valid($g{groupname})) { raiseerror($us->{error}); $error = 1 }; + if (!$error && $groupname ne $g{groupname}) {$ctx->GroupName($g{groupname})} + my $val; + $model->foreach(sub { + my ($mod, $path, $iter) = @_; + my $ch = $mod->get($iter, 2); + my $name = $mod->get($iter, 1); + print "\n~~~$name : $ch ~~~\t"; + $iter->free; + return 0, + }, $val); + } } - Gtk2->main_quit }) + !$error and Gtk2->main_quit; $error = 0; }) } ([ N("Cancel"), 1 ], [ N("Ok"), 0 ])), )); - my %roots; - # $tree_model->append_set($roots{$_->{land}} ||= $tree_model->append_set(undef, [ 0 => $_->{land} ]), - # [ 0 => $_->{url} ])->free foreach @mirrors; - - # $w->{window}->set_size_request(400, 300); + $tree->show; $w->{rwindow}->show_all; + $tree->signal_connect(button_press_event => sub { + printf "button pressed on treeview, coordinates x:%d y:%d\n", $_[1]->x, $_[1]->y; + my ($returns, $path, $column) = $tree->get_path_at_pos($_[1]->x, $_[1]->y); + print "####### $returns ########"; + if ($returns) { + if (Gtk2->equals($column, $check)) { + $tree->get_selection->select_path($path); + Gtk2->update_ui; + my (undef, $iter) = $tree->get_selection->get_selected; + my $cp = $model->get($iter, 2); + $model->set($iter, [0 => gtkcreate_pixbuf($pix[!$cp])]); + $model->set($iter, [2 => !$cp]); + $iter and $iter->free; + } + $path->free; + } + }); $w->main } sub GrayBox { |