diff options
author | Daouda Lo <daouda@mandriva.com> | 2003-06-23 10:41:04 +0000 |
---|---|---|
committer | Daouda Lo <daouda@mandriva.com> | 2003-06-23 10:41:04 +0000 |
commit | 6de08d95dd4875798855978f5440d4a823ed38cc (patch) | |
tree | a6421343e35c0d788fe00603359e0482865eb4f1 | |
parent | effbb6e71e8fdcc63875ea8e66625960b6b599c0 (diff) | |
download | userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.tar userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.tar.gz userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.tar.bz2 userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.tar.xz userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.zip |
- final release
- enable search
-rw-r--r-- | USER/USER.xs | 34 | ||||
-rwxr-xr-x | userdrake2 | 182 |
2 files changed, 126 insertions, 90 deletions
diff --git a/USER/USER.xs b/USER/USER.xs index 84ff583..ffd22e1 100644 --- a/USER/USER.xs +++ b/USER/USER.xs @@ -613,7 +613,7 @@ Admin_UserSetPass(self, ent, userPasswd) char *userPasswd PPCODE: USER__ERR *error = NULL; - gboolean crypted = TRUE; + gboolean crypted = FALSE; if (lu_user_setpass(self, ent, userPasswd, crypted, &error) == FALSE) { croak("Failed to set password %s.\n", error ? error->string : _("unknown error")); if (error) { lu_error_free(&error); } @@ -935,7 +935,7 @@ Ent_UserName(self, ssv) lu_ent_clear(self, LU_USERNAME); lu_ent_add(self, LU_USERNAME, &val); } else { - warn("XS_UserAdd: Cannot make operation on LU_USERNAME attribute"); + warn("XS_UserName: Cannot make operation on LU_USERNAME attribute"); } void @@ -974,7 +974,7 @@ Ent_MemberName(self, rv, AddOrDel) GValueArray *members; GValue *value, val; RETVAL = (AV*)sv_2mortal((SV*)newAV()); - char **member = NULL; + char *member = NULL; int c; if ( SvIOK(rv) && SvIV(rv) == 1) { members = lu_ent_get(self, LU_MEMBERNAME); @@ -986,32 +986,14 @@ Ent_MemberName(self, rv, AddOrDel) } else if ( SvPOK( rv ) ) { memset(&val, 0, sizeof(val)); g_value_init(&val, G_TYPE_STRING); + member = SvPV(rv, PL_na); + g_value_set_string(&val, member); if (AddOrDel == 1) { - member = g_strsplit(SvPV(rv, PL_na), ",", 0); - if (member) { - for (c = 0; member && member[c]; c++) { - g_value_set_string(&val, member[c]); - lu_ent_add(self, LU_MEMBERNAME, &val); - g_value_reset(&val); - } - lu_hup_nscd(); - g_strfreev(member); - member = NULL; - } + lu_ent_add(self, LU_MEMBERNAME, &val); } else if (AddOrDel == 2) { - member = g_strsplit(SvPV(rv, PL_na), ",", 0); - if (member) { - for (c = 0; member && member[c]; c++) { - g_value_set_string(&val, member[c]); - lu_ent_del(self, LU_MEMBERNAME, &val); - g_value_reset(&val); - } - lu_hup_nscd(); - g_strfreev(member); - member = NULL; - } - g_value_unset(&val); + lu_ent_del(self, LU_MEMBERNAME, &val); } + g_value_reset(&val); } else { croak("XS_MemberName: Cannot make operation on LU_MEMBERNAME attribute"); }; @@ -28,7 +28,7 @@ use common; use any; use ugtk2 qw(:all); use interactive; - +use POSIX qw(mktime ceil); use USER; my $conffile = '/etc/sysconfig/userdrake'; @@ -41,6 +41,7 @@ my $us = {} ; $us->{VERSION} = 0.91; my $error = 0; my $GetValue = -65533; +my $stringsearch = ''; my %prefs = getVarsFromSh($conffile); my %sec = getVarsFromSh($secfile); my $sysfilter = text2bool($prefs{FILTER}); @@ -49,7 +50,7 @@ sub HelpSystem { system("drakhelp Drakxtools-Guide.html/userdrake.html &") }; $us->{wnd} = ugtk2->new(N("Mandrake Linux Users Management Tool") . " " . $us->{VERSION}, center => 1); gtkset_size_request($us->{wnd}{window}, 660, 460); -$us->{wnd}{rwindow}->signal_connect(delete_event => \&quit_global); +$us->{wnd}{rwindow}->signal_connect(delete_event => \&QuitGlobal); my $utree_model = Gtk2::ListStore->new(Gtk2::GType->STRING, Gtk2::GType->INT, Gtk2::GType->STRING, Gtk2::GType->STRING, Gtk2::GType->STRING, Gtk2::GType->STRING ); my $gtree_model = Gtk2::ListStore->new(Gtk2::GType->STRING, Gtk2::GType->INT, Gtk2::GType->STRING ); my ($usertree, $grouptree); @@ -57,8 +58,8 @@ $usertree = CreateTree($utree_model); $grouptree = CreateTree($gtree_model); my ($checkedit, $checkdel, $checkall); my ($menu, $factory) = create_factory_menu($us->{wnd}{rwindow}, ({ path => N("/_File"), type => '<Branch>' }, - { path => N("/_File") . N("/_Refresh"), callback => sub { Refresh($sysfilter)} }, - { path => N("/_File") . N("/_Quit"), callback => \&quit_global }, + { path => N("/_File") . N("/_Refresh"), callback => sub { Refresh($sysfilter, $stringsearch)} }, + { path => N("/_File") . N("/_Quit"), callback => \&QuitGlobal }, { path => N("/_Actions"), type => '<Branch>' }, { path => N("/_Actions") . N("/_Add User"), callback => \&AddUser }, { path => N("/_Actions") . N("/Add _Group"), callback => \&AddGroup }, @@ -66,11 +67,11 @@ my ($menu, $factory) = create_factory_menu($us->{wnd}{rwindow}, { path => N("/_Actions") . N("/_Delete"), callback => \&Delete }, { path => N("/_Options"), type => '<Branch>' }, { path => N("/_Options") . N("/_Filter system users"), type => '<CheckItem>', - callback => sub { $sysfilter = $checkall->active; Refresh($sysfilter) } }, + callback => sub { $sysfilter = $checkall->active; Refresh($sysfilter, $stringsearch) } }, { path => N("/_Help"), type => '<Branch>' }, { path => N("/_Help").N("/_Help"), callback => \&HelpSystem }, { path => N("/_Help").N("/_Report Bug"), callback => sub { system("drakhelp https://qa.mandrakesoft.com &") } }, - { path => N("/_Help").N("/_About..."), callback => \&about_mdk_userdrake } + { path => N("/_Help").N("/_About..."), callback => \&About } ) ); $checkall = $factory->get_widget("<main>" . N("/Options") . N("/Filter system users")); @@ -111,13 +112,15 @@ map { [ N("Add Group"), N("Add a group to the system"), 'group_add', \&AddGroup ], [ N("Edit"), N("Edit selected row"), 'user_conf', \&Edit ], [ N("Delete"), N("Delete selected row"), 'user_del', \&Delete ], - [ N("Refresh"), N("Refresh the list"), 'refresh', sub { Refresh($sysfilter) } ], + [ N("Refresh"), N("Refresh the list"), 'refresh', sub { Refresh($sysfilter, $stringsearch) } ], [ N("Help"), N("Generic help on userdrake"), 'help', \&HelpSystem ] ); my ($tbuser, $tbgroup, $tbedit, $tbdel, $tbref, $tbhelp) = @toolbwg; foreach (($tbedit, $tbdel, $checkedit, $checkdel)) { $_->set_sensitive(0) }; my $ctx = USER::ADMIN->new; -Refresh($sysfilter); +$fbut->signal_connect('clicked', sub { $stringsearch = $filter->get_text() ; Refresh($sysfilter, $stringsearch) }); +Refresh($sysfilter, $stringsearch); +my $tmm = ConvTime(19, 06, 2003); $nb->signal_connect('switch-page' => sub { NotebookSwitch() }); $us->{wnd}{rwindow}->show_all; Gtk2->main; @@ -130,27 +133,26 @@ sub TreeUnselect { } sub NotebookSwitch { my $page = $nb->get_current_page(); - $page and TreeUnselect($usertree) or TreeUnselect($grouptree); + TreeUnselect($usertree) ; TreeUnselect($grouptree); } -sub Refresh_Users_Full { - my $filterusers = shift; +sub RefreshUsersFull { + my ($filterusers, $strfilt) = @_; my $users = $ctx->UsersEnumerateFull(); $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) }; - + LOOP: foreach my $l (@$users) { next LOOP if ($filterusers && $l->Uid($GetValue) <= 499 || $l->Uid($GetValue) == 65534) ; push(@UserReal, $l) if $l->UserName($GetValue) =~ /^\Q$strfilt/; }; 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) ]); } } -sub Refresh_Groups_Full { - my $filtergroups = shift; +sub RefreshGroupsFull { + my ($filtergroups, $strfilt) = @_; my $groups = $ctx->GroupsEnumerateFull(); $gtree_model->clear(); my @GroupReal; - LOOP:foreach my $g (@$groups) { next LOOP if ($filtergroups && $g->Gid($GetValue) <= 499 || $g->Gid($GetValue) == 65534); push(@GroupReal, $g) }; + LOOP:foreach my $g (@$groups) { next LOOP if ($filtergroups && $g->Gid($GetValue) <= 499 || $g->Gid($GetValue) == 65534); push(@GroupReal, $g) if $g->GroupName($GetValue) =~ /^\Q$strfilt/ }; foreach my $g (@GroupReal) { my $a = $g->Gid($GetValue); my $group = $ctx->LookupGroupById($a); my $u_b_g = $ctx->EnumerateUsersByGroup($g->GroupName($GetValue)); @@ -159,9 +161,9 @@ sub Refresh_Groups_Full { } } sub Refresh { - my $filt = shift; - Refresh_Users_Full($filt); - Refresh_Groups_Full($filt); + my ($filt, $strfilt) = @_; + RefreshUsersFull($filt, $strfilt); + RefreshGroupsFull($filt, $strfilt); } sub AddUser { my $w = ugtk2->new(N("Create New User"), grab => 1); @@ -186,12 +188,12 @@ sub AddUser { gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub { if (!$r) { $u{username} = $us->{o}->{login}->get_text(); $error = 0; - if (!valid($u{username})) { raiseerror($us->{error}) }; + if (!valid($u{username})) { RaiseError($us->{error}) }; my $nm = $ctx->LookupUserByName($u{username}); - if ($nm) { raiseerror(N("User already exists, please choose another User Name")); $us->{o}->{login}->set_text('') }; + if ($nm) { RaiseError(N("User already exists, please choose another User Name")); $us->{o}->{login}->set_text('') }; $u{passwd} = $us->{o}->{passwd}->get_text(); - if ($u{passwd} ne $us->{o}->{confpasswd}->get_text()) { raiseerror(N("Password Mismatch")) }; - if ($sec{SECURE_LEVEL} > 3 && length($u{passwd}) < 6) { raiseerror(N("This password is too simple. \n Good passwords should be > 6 caracters")) }; + if ($u{passwd} ne $us->{o}->{confpasswd}->get_text()) { RaiseError(N("Password Mismatch")) }; + if ($sec{SECURE_LEVEL} > 3 && length($u{passwd}) < 6) { RaiseError(N("This password is too simple. \n Good passwords should be > 6 caracters")) }; my $userEnt = $ctx->InitUser($u{username}, $is_system); if ($us->{o}->{createhomedir}->get_active) { $dontcreatehomedir = 0; @@ -234,9 +236,11 @@ sub AddUser { if(!$error) { $u{gecos} = $us->{o}->{fullname}->get_text(); $u{loginshell} = $us->{o}->{shells}->entry->get_text(); $userEnt->Gecos($u{gecos}); $userEnt->LoginShell($u{loginshell}); $userEnt->Gid($u{gid}); + $userEnt->ShadowMin(-1); $userEnt->ShadowMax(99999); + $userEnt->ShadowWarn(-1); $userEnt->ShadowInact(-1); $ctx->UserAdd($userEnt, $is_system, $dontcreatehomedir); $ctx->UserSetPass($userEnt, $u{passwd}); - Refresh($sysfilter); + Refresh($sysfilter, $stringsearch); } } !$error and Gtk2->main_quit; $error = 0 }) @@ -313,9 +317,9 @@ sub AddGroup { gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub { if (!$r) { $g{groupname} = $us->{o}->{groupname}->get_text(); $error = 0; - if (!valid($g{groupname})) { raiseerror($us->{error}) }; - my $nm = $ctx->LookupUserByName($g{groupname}); - if ($nm) { raiseerror(N("Group already exists, please choose another Group Name")); $us->{o}->{groupname}->set_text('') }; + if (!valid($g{groupname})) { RaiseError($us->{error}) }; + my $nm = $ctx->LookupGroupByName($g{groupname}); + if ($nm) { RaiseError(N("Group already exists, please choose another Group Name")); $us->{o}->{groupname}->set_text('') }; my $groupEnt = $ctx->InitGroup($g{groupname}, $is_system); if ($us->{o}->{groupid}->get_active) { if (($g{gid} = $us->{o}->{gid}->get_value) < 500) { @@ -325,7 +329,7 @@ sub AddGroup { }; if(!$error) { $ctx->GroupAdd($groupEnt); - Refresh($sysfilter); + Refresh($sysfilter, $stringsearch); } } !$error and Gtk2->main_quit; $error = 0; }) @@ -346,8 +350,12 @@ sub UpdateOrDelUsersInGroup { if ($action) { foreach my $g (@$groups) { my $members = $g->MemberName(1, 0); - any { $_ eq $name } @$members and $g->MemberName($name, 2); - $ctx->GroupModify($g); + if (InArray($name, $members)) { + eval { $g->MemberName($name, 2) }; + printf("\nAbout to modify %s\n", $g->GroupName($GetValue)); + eval { $ctx->GroupModify($g) }; + printf("\nModified %s\n", $g->GroupName($GetValue)); + } } } else { print ("Updating MemberName \n"); @@ -372,30 +380,30 @@ sub Delete { my $page = $nb->get_current_page(); $us->{wnd}{rwindow}->set_sensitive(0); gtkset_mousecursor_wait(); $error = 0; - if ($page == 0) { + if ($page <= 0) { 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); + my $groupEnt = $ctx->LookupGroupById($usergid); my $member = $groupEnt->MemberName(1, 0); 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) + Refresh($sysfilter, $stringsearch) } elsif ($page == 1) { my $groupname = GetNameEntFromIter($grouptree, $gtree_model, 0); my $groupEnt = $ctx->LookupGroupByName($groupname); 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)); + if ($userEnt && $userEnt->Gid($GetValue) == $groupEnt->Gid($GetValue)) { + RaiseError(N("%s is a primary group for user %s\n Remove the user first", $groupname, $username)); last GLOOP } } - if (!$error) { $ctx->GroupDel($groupEnt); Refresh($sysfilter) } + if (!$error) { $ctx->GroupDel($groupEnt); Refresh($sysfilter, $stringsearch) } } $us->{wnd}{rwindow}->set_sensitive(1); gtkset_mousecursor_normal(); @@ -453,6 +461,7 @@ sub BuildUui { $vbox } sub BuildGui { + my $groupentry = @_; gtkpack_(my $vbox = Gtk2::VBox->new(0, 2), 1, create_packtable({ homogeneous => 1, col_spacings => 5, row_spacings =>5 }, [ N("Group Name") . " :", $us->{o}->{groupname} = Gtk2::Entry->new() ] @@ -464,7 +473,7 @@ sub Edit { my $w = ugtk2->new('userdrake', grab => 1); 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, $username, $groupEnt, $userEnt, $members, $times, $min, $max, $warn, $inact, $primgid); + my ($groupname, $username, $groupEnt, $userEnt, $members, $times, $min, $max, $warn, $inact, $primgid, $temp); my @primgroup; my @pix = ($pixdir.'selected.png', $pixdir.'unselected.png'); $tree->get_selection->set_mode('browse'); @@ -474,7 +483,7 @@ sub Edit { my $p = $nb->get_current_page(); print " Page = $p"; my $nbU = Gtk2::Notebook->new; my $nbG = Gtk2::Notebook->new; - if ($p == 0) { + if ($p <= 0) { gtkappend_page($nbU, gtkpack_(Gtk2::VBox->new(0, 2), 1, BuildUui(), @@ -587,19 +596,18 @@ sub Edit { my $retv = $_->[1]; gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub { if (!$retv) { - if ($p == 0) { - $u{username} = $us->{o}->{login}->get_text(); $error = 0; - if(!valid($u{username})) { raiseerror($us->{error}) } - $u{gecos} = $us->{o}->{fullname}->get_text(); - $u{homedir} = $us->{o}->{homedir}->get_text(); - $u{pw} = $us->{o}->{passwd}->get_text(); - $u{confm} = $us->{o}->{confpasswd}->get_text(); - $u{shell} = $us->{o}->{shells}->entry->get_text(); - $u{primgroup} = $userEnt->Gid($GetValue); + if ($p <= 0) { + $error = 0; + %u = ( + username => $us->{o}->{login}->get_text(), gecos => $us->{o}->{fullname}->get_text(), + homedir => $us->{o}->{homedir}->get_text(), pw => $us->{o}->{passwd}->get_text(), + confm => $us->{o}->{confpasswd}->get_text(), shell => $us->{o}->{shells}->entry->get_text() + ); + if(!valid($u{username})) { RaiseError($us->{error}) } if ($u{pw} ne $u{confm}) { - raiseerror(N("Password Mismatch")); + RaiseError(N("Password Mismatch")); } elsif (($u{pw} eq $u{confm}) && $u{pw} ne ' ') { - if ($sec{SECURE_LEVEL} > 3 && length($u{pw}) < 6) { raiseerror(N("This password is too simple. \n Good passwords should be > 6 caracters")) } + if ($sec{SECURE_LEVEL} > 3 && length($u{pw}) < 6) { RaiseError(N("This password is too simple. \n Good passwords should be > 6 caracters")) } !$error and $ctx->UserSetPass($userEnt, $u{pw}); } if (!$error) { @@ -613,22 +621,55 @@ sub Edit { $gEnt = $ctx->LookupGroupByName($name); $ugid = $gEnt->Gid($GetValue); my $m = $gEnt->MemberName(1,0); - if ($ch == 1 && !InArray($username, $m) && $primgid != $ugid) { - $gEnt->MemberName($username, 1); + if ($ch == 1) { + if (!InArray($username, $m) && $primgid != $ugid){ + eval { $gEnt->MemberName($username, 1) }; + $ctx->GroupModify($gEnt); + } } else { if (InArray($username, $m)) { - $gEnt->MemberName($username, 2); + eval { $gEnt->MemberName($username, 2) }; + $ctx->GroupModify($gEnt); } } - $ctx->GroupModify($gEnt); $iter->free; return 0; }, undef); + if ($us->{o}->{primgroup}->entry->get_text() eq '') { + RaiseError(N("Please select at least one group for the user")); + } elsif (!$error) { + my $ent = $ctx->LookupGroupByName($us->{o}->{primgroup}->entry->get_text()); + $ugid = $ent->Gid($GetValue); + $userEnt->Gid($ugid); + if ($us->{o}->{acheckexpire}->get_active()) { + my $yr = $us->{o}->{expy}->get_text(); my $mo = $us->{o}->{expm}->get_text(); + my $dy = $us->{o}->{expd}->get_text(); + $yr && $dy && $mo or RaiseError(N("Please specify Year, Month and Day \n for Account Expiration ")); + !$error and $userEnt->ShadowExpire(ConvTime($dy, $mo, $yr)); + } else { $userEnt->ShadowExpire(-1) } + if ($us->{o}->{pcheckexpire}->get_active()) { + my $allowed = $us->{o}->{dbca}->get_text(); my $required = $us->{o}->{dbcr}->get_text(); + my $warning = $us->{o}->{bwbc}->set_text($min); my $inactive = $us->{o}->{dbai}->get_text(); + $allowed && $required && $warning && $inactive or RaiseError(N("Please specify all field for password aging")); + if(!$error) { + $userEnt->ShadowMin($allowed); $userEnt->ShadowMax($required); + $userEnt->ShadowWarn($warning); $userEnt->ShadowInact($inactive); + } else { + $userEnt->ShadowMin(-1); $userEnt->ShadowMax(99999); + $userEnt->ShadowWarn(-1); $userEnt->ShadowInact(-1); + } + } + !$error and $ctx->UserModify($userEnt); + if ($us->{o}->{lockuser}->get_active()) { + !$ctx->IsLocked($userEnt) and $ctx->Lock($userEnt); + } else { $ctx->IsLocked($userEnt) and $ctx->UnLock($userEnt) } + !$error and Refresh($sysfilter, $stringsearch); + } } } elsif ($p == 1) { $g{groupname} = $us->{o}->{groupname}->get_text(); $error = 0; - if (!valid($g{groupname})) { raiseerror($us->{error}) }; + if (!valid($g{groupname})) { RaiseError($us->{error}) }; if (!$error && $groupname ne $g{groupname}) {$groupEnt->GroupName($g{groupname})} $groupname = $groupEnt->GroupName($GetValue); $members = $ctx->EnumerateUsersByGroup($groupname); @@ -641,7 +682,9 @@ sub Edit { if (!InArray($name, $members)) { $uEnt = $ctx->LookupUserByName($name); $ugid = $uEnt->Gid($GetValue); - $ugid != $gid and $groupEnt->MemberName($name,1); + if ($ugid != $gid) { + eval { $groupEnt->MemberName($name,1) }; + } } } else { if (InArray($name, $members)) { @@ -649,9 +692,11 @@ sub Edit { if ($uEnt->Gid($GetValue) == $groupEnt->Gid($GetValue)) { $model->set($iter, [0 => gtkcreate_pixbuf($pix[0])]); $model->set($iter, [2 => 1]); - raiseerror(N("You cannot remove user '%s' from their primary group", $name)); + RaiseError(N("You cannot remove user '%s' from their primary group", $name)); + } + if (!$error) { + eval { $groupEnt->MemberName($name,2) }; } - !$error and $groupEnt->MemberName($name,2); } } $iter->free; @@ -659,7 +704,7 @@ sub Edit { }, undef); if (!$error) { $ctx->GroupModify($groupEnt); - Refresh($sysfilter); + Refresh($sysfilter, $stringsearch); } } } @@ -680,7 +725,7 @@ sub Edit { my $item = $model->get($iter, 1); $model->set($iter, [0 => gtkcreate_pixbuf($pix[$cp])]); $model->set($iter, [2 => !$cp]); - if ($p == 0) { + if ($p <= 0) { if (!$cp) { !InArray($item, \@primgroup) and push(@primgroup, $item) } else { @@ -696,6 +741,15 @@ sub Edit { }); $w->main } +sub ConvTime { + my ($day, $month, $year) = @_; + my ($tm, $days, $mon, $yr); + $mon = $month - 1; $yr = $year - 1900; + $tm = POSIX::mktime(0, 0, 0, $day, $mon, $yr); + print "Time from mktime is $tm\n"; + $days = ceil($tm / (24 * 60 *60)); + return $days; +} sub TimeOfArray { my $reltime = shift; my $h; my $t; @@ -717,7 +771,7 @@ sub GrayBox { $v->set_sensitive($m); $o->signal_connect('clicked' => sub { $m = !$m; $v->set_sensitive($m) }); } -sub new_dialog { +sub NewDialog { my ($title, $no_button) = @_; my $dialog = gtkset_border_width(Gtk2::Dialog->new(), 10); $dialog->set_transient_for($us->{wnd}{rwindow}); @@ -729,8 +783,8 @@ sub new_dialog { 0,0,0) unless $no_button; gtkset_modal($dialog, 1); } -sub about_mdk_userdrake { - my $window_about = new_dialog(N("Userdrake2")); +sub About { + my $window_about = NewDialog(N("Userdrake2")); my $tree_model = Gtk2::TreeStore->new(Gtk2::GType->STRING, Gtk2::GType->STRING, Gtk2::GType->STRING); my $list = Gtk2::TreeView->new_with_model($tree_model); $list->can_focus(0); @@ -754,7 +808,7 @@ sub valid { length($_[0]) <= 32 or $us->{error} = N("Name is too long"), return 0; return 1; } -sub raiseerror { +sub RaiseError { my $w = ugtk2->new(N("Error"), grab => 1, center => 1, transient => $us->{wnd}->{rwindow}); $error = 1; gtkadd($w->{window}, @@ -766,7 +820,7 @@ sub raiseerror { ); $w->main } -sub quit_global { +sub QuitGlobal { setVarsInSh($conffile, { FILTER => bool2text($sysfilter), }); |