diff options
-rwxr-xr-x | userdrake | 34 |
1 files changed, 34 insertions, 0 deletions
@@ -186,15 +186,18 @@ ugtk2->exit(0); sub GrayDelEdit() { foreach ($tbedit, $tbdel, $buttorcheck{edit}, $buttorcheck{delete}) { defined $_ and $_->set_sensitive(0) } } + sub TreeUnselect { my $treev = shift; $treev->get_selection->unselect_all; GrayDelEdit(); } + sub NotebookSwitch() { #my $page = $nb->get_current_page; TreeUnselect($usertree); TreeUnselect($grouptree); } + sub ComputeLockExpire { my $l = shift; my $ep = $l->ShadowExpire($GetValue); @@ -203,6 +206,7 @@ sub ComputeLockExpire { my $status = $ctx->IsLocked($l) ? N("Locked") : ($ep != -1 ? N("Expired") : ''); $status; } + sub RefreshUsersFull { my ($filterusers, $strfilt) = @_; my ($users, $group, $groupnm, $expr); @@ -218,6 +222,7 @@ sub RefreshUsersFull { $utree_model->append_set([ 0 => $l->UserName($GetValue), 1 => $l->Uid($GetValue), 2 => $groupnm, 3 => $s, 4 => $l->LoginShell($GetValue), 5 => $l->HomeDir($GetValue), 6 => $expr ]); } } + sub RefreshGroupsFull { my ($filtergroups, $strfilt) = @_; my $groups; @@ -234,12 +239,14 @@ sub RefreshGroupsFull { $gtree_model->append_set([ 0 => $g->GroupName($GetValue), if_($group_id, 1 => $group_id), if_($listUbyG, 2 => $listUbyG) ]); } } + sub Refresh { my ($filt, $strfilt) = @_; RefreshUsersFull($filt, $strfilt); RefreshGroupsFull($filt, $strfilt); GrayDelEdit(); } + sub GetFaceIcon { my ($user) = @_; my @icones = any::facesnames(); @@ -288,6 +295,7 @@ sub GetFaceIcon { }); $hb; } + sub AddUser() { my $w = NewWindow(N("Create New User")); my $dontcreatehomedir = 0; my $is_system = 0; @@ -390,12 +398,14 @@ sub AddUser() { $w->show_all; # $w->main; } + sub Add2UsersGroup { my $name = shift; my $usersgroup = $ctx->LookupGroupByName('users'); $usersgroup->MemberName($name, 1); return $usersgroup->Gid($GetValue); } + sub ChooseGroup() { my $w = NewWindow(N("Choose group")); my $choice; @@ -422,6 +432,7 @@ sub GimmeChoice { gtkset_mousecursor_normal(); $choice; } + sub AddGroup() { my $w = NewWindow(N("Create New Group")); my $mode = 0; my %g; my $is_system = 0; @@ -466,6 +477,7 @@ sub AddGroup() { #$w->main; } + sub UpdateOrDelUsersInGroup { my ($name, $action) = @_; my $groups = $ctx->GroupsEnumerateFull; @@ -479,12 +491,14 @@ sub UpdateOrDelUsersInGroup { } } } + sub GetNameEntFromIter { my ($tree, $model, $rank) = @_; my (undef, $iter) = $tree->get_selection->get_selected; my $name = $model->get($iter, $rank); $name; } + sub FillUserInfo { my $ent = shift; my $s = $ent->Gecos($GetValue); @@ -495,6 +509,7 @@ sub FillUserInfo { $us->{o}{shells}->entry->set_text($ent->LoginShell($GetValue)); $us->{o}{homedir}->set_text($ent->HomeDir($GetValue)); } + sub Delete() { my $page = $nb->get_current_page; $us->{wnd}{rwindow}->set_sensitive(0); @@ -624,6 +639,7 @@ sub CreateTree { }); $tree; } + sub GtkEntryHidePass { my ($text) = @_; my $e = Gtk2::Entry->new; @@ -631,12 +647,14 @@ sub GtkEntryHidePass { $e->set_visibility(0); $e; } + sub GtkEntrySized { my ($i, $spac) = @_; my $e = Gtk2::Entry->new_with_max_length($i); $e->set_size_request($spac, 20); $e; } + sub BuildUui() { gtkpack_(my $vbox = Gtk2::VBox->new(0, 2), 1, create_packtable({ homogeneous => 1, col_spacings => 5, row_spacings => 5 }, @@ -651,6 +669,7 @@ sub BuildUui() { $us->{o}{shells}->entry->set_text("/bin/bash"); $vbox; } + sub BuildGui { #my $groupentry = @_; gtkpack_(my $vbox = Gtk2::VBox->new(0, 2), @@ -660,6 +679,7 @@ sub BuildGui { ); $vbox; } + sub NewWindow { my ($title) = @_; my $w = Gtk2::Window->new('toplevel'); @@ -669,6 +689,7 @@ sub NewWindow { $w->set_modal(1); $w; } + sub Edit() { my $w = NewWindow(N("Edit Groups / Users")); my $model = Gtk2::ListStore->new("Gtk2::Gdk::Pixbuf", "Glib::String", "Glib::Int"); @@ -961,10 +982,12 @@ sub Edit() { }); # $w->main } + sub ValidInt { foreach my $i (@_) { $i =~ /\d+/ or return 0 } return 1; } + sub ConvTime { my ($day, $month, $year) = @_; my ($tm, $days, $mon, $yr); @@ -973,6 +996,7 @@ sub ConvTime { $days = ceil($tm / (24 * 60 * 60)); return $days; } + sub TimeOfArray { my ($_reltime, $cm) = @_; my $h; my %mth = (Jan => 1, Feb => 2, Mar => 3, Apr => 4, May => 5, Jun => 6, Jul => 7, Aug => 8, Sep => 9, Oct => 10, Nov => 11, Dec => 12); @@ -981,20 +1005,24 @@ sub TimeOfArray { $cm and $h->{month} = $mth{$2}; $h; } + sub InArray { my ($item, $arr) = @_; return any { $item eq $_ } @$arr; } + sub RemoveFromArray { my ($item, $arr) = @_; my ($t, $_s) = partition { $item ne $_ } @$arr; return @$t; } + sub GrayBox { my ($o, $v, $m) = @_; $v->set_sensitive($m); $o->signal_connect('clicked' => sub { $m = !$m; $v->set_sensitive($m) }); } + sub NewDialog { my ($title) = @_; my $dialog = gtkset_border_width(Gtk2::Dialog->new, 10); @@ -1008,6 +1036,7 @@ sub NewDialog { gtkset_modal($dialog, 1); $dialog; } + sub About() { my $window_about = NewDialog(N("Userdrake")); my $tree_model = Gtk2::TreeStore->new("Glib::String", "Glib::String", "Glib::String"); @@ -1026,18 +1055,22 @@ sub About() { ); $window_about->show_all; } + sub valid { $_[0] or $us->{error} = N("Name field is empty please provide a name"), return 0; $_[0] =~ /^[a-z]+?[a-z0-9_-]*?$/ or $us->{error} = N("The name must contain only lower cased latin letters, numbers, `-' and `_'"), return 0; length($_[0]) <= $_[1] or $us->{error} = N("Name is too long"), return 0; return 1; } + sub valid_username { return valid($_[0], 32); } + sub valid_groupname { return valid($_[0], 16); } + sub RaiseError { my $w = NewWindow(N("Error")); $error = 1; @@ -1050,6 +1083,7 @@ sub RaiseError { ); $w->show_all; } + sub QuitGlobal() { setVarsInSh($conffile, { FILTER => bool2text($sysfilter), |