aboutsummaryrefslogtreecommitdiffstats
path: root/AdminPanel/Users/GUsers.pm
diff options
context:
space:
mode:
authorAngelo Naselli <anaselli@linux.it>2014-01-27 18:20:30 +0100
committerAngelo Naselli <anaselli@linux.it>2014-01-27 18:20:30 +0100
commit1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b (patch)
tree1363e3d3bdcfa5b2ff3111a41b2c700a5a922140 /AdminPanel/Users/GUsers.pm
parentf519e47d15103514585a272c6308467ac41ce551 (diff)
downloadcolin-keep-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.tar
colin-keep-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.tar.gz
colin-keep-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.tar.bz2
colin-keep-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.tar.xz
colin-keep-1624ce382eb033c2cf3ef1fe6b9c41beb0b0a91b.zip
Project structure change
Diffstat (limited to 'AdminPanel/Users/GUsers.pm')
-rw-r--r--AdminPanel/Users/GUsers.pm2570
1 files changed, 0 insertions, 2570 deletions
diff --git a/AdminPanel/Users/GUsers.pm b/AdminPanel/Users/GUsers.pm
deleted file mode 100644
index fe95a0b..0000000
--- a/AdminPanel/Users/GUsers.pm
+++ /dev/null
@@ -1,2570 +0,0 @@
-# vim: set et ts=4 sw=4:
-#*****************************************************************************
-#
-# Copyright (c) 2013 Angelo Naselli <anaselli@linux.it>
-# from adduserdrake and userdrake
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2, as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-#*****************************************************************************
-
-package AdminPanel::Users::GUsers;
-
-###############################################
-##
-## graphic related routines for managing user
-##
-###############################################
-
-
-use strict;
-# TODO evaluate if Moose is too heavy and use Moo
-# instead
-use POSIX qw(ceil);
-# use Time::localtime;
-
-# TODO same translation atm
-use lib qw(/usr/lib/libDrakX);
-# i18n: IMPORTANT: to get correct namespace (userdrake instead of libDrakX)
-BEGIN { unshift @::textdomains, 'userdrake', 'libuser', 'drakconf' }
-
-use common qw(N
- translate);
-use security::level;
-use run_program;
-## USER is from userdrake
-use USER;
-use utf8;
-use log;
-
-use Glib;
-use yui;
-use AdminPanel::Shared;
-use AdminPanel::Users::users;
-use Moose;
-extends qw( Module );
-
-has '+icon' => (
- default => "/usr/share/icons/userdrake.png",
-);
-
-has '+name' => (
- default => N("AdminUser"),
-);
-
-
-=head1 VERSION
-
-Version 1.0.0
-
-=cut
-
-our $VERSION = '1.0.0';
-
-# main dialog
-has 'dialog' => (
- is => 'rw',
- init_arg => undef,
-);
-
-has 'widgets' => (
- traits => ['Hash'],
- default => sub { {} },
- is => 'rw',
- isa => 'HashRef',
- handles => {
- set_widget => 'set',
- get_widget => 'get',
- widget_pairs => 'kv',
- },
- init_arg => undef,
-);
-
-has 'action_menu' => (
- traits => ['Hash'],
- default => sub { {} },
- is => 'rw',
- isa => 'HashRef',
- handles => {
- set_action_menu => 'set',
- get_action_menu => 'get',
- action_menu_pairs => 'kv',
- },
- init_arg => undef,
-);
-
-## Used by USER (for getting values? TODO need explanations, where?)
-has 'USER_GetValue' => (
- default => -65533,
- is => 'ro',
- isa => 'Int',
- init_arg => undef,
-);
-
-## Used by USER (for getting values? TODO need explanations, where?)
-has 'ctx' => (
- default => sub {USER::ADMIN->new},
- is => 'ro',
- init_arg => undef,
-);
-
-
-has 'edit_tab_widgets' => (
- traits => ['Hash'],
- default => sub { {} },
- is => 'rw',
- isa => 'HashRef',
- handles => {
- set_edit_tab_widget => 'set',
- get_edit_tab_widget => 'get',
- edit_tab_pairs => 'kv',
- },
- init_arg => undef,
-);
-
-sub start {
- my $self = shift;
-
- $self->manageUsersDialog();
-};
-
-# TODO move to Shared?
-sub labeledFrameBox {
- my ($parent, $label) = @_;
-
- my $factory = yui::YUI::widgetFactory;
-
- my $frame = $factory->createFrame($parent, $label);
- $frame->setWeight( $yui::YD_HORIZ, 1);
- $frame->setWeight( $yui::YD_VERT, 2);
- $frame = $factory->createHVCenter( $frame );
- $frame = $factory->createVBox( $frame );
- return $frame;
-}
-
-# usefull local variable to avoid duplicating
-# translation point for user edit labels
-my %userEditLabel = (
- user_data => N("User Data"),
- account_info => N("Account Info"),
- password_info => N("Password Info"),
- groups => N("Groups"),
-);
-# usefull local variable to avoid duplicating
-# translation point for group edit labels
-my %groupEditLabel = (
- group_data => N("Group Data"),
- group_users => N("Group Users"),
-);
-#=============================================================
-
-=head2 ChooseGroup
-
-=head3 INPUT
-
- $self: this object
-
-=head3 OUTPUT
-
- $choice: 0 or 1 (choice)
- -1 cancel or exit
-
-=head3 DESCRIPTION
-
-creates a popup dialog to ask if adding user to an existing
-group or to the 'users' group
-
-=cut
-
-#=============================================================
-sub ChooseGroup {
- my $self = shift;
-
- my $choice = -1;
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle(N("Choose group"));
-
- my $factory = yui::YUI::widgetFactory;
-
- my $dlg = $factory->createPopupDialog();
- my $layout = $factory->createVBox($dlg);
-
-
- my $frame = labeledFrameBox($layout, N("A group with this name already exists. What would you like to do?"));
-
- my $rbg = $factory->createRadioButtonGroup( $frame );
- $frame = $factory->createVBox( $rbg );
- my $align = $factory->createLeft($frame);
-
- my $rb1 = $factory->createRadioButton( $align, N("Add to the existing group"), 1);
- $rb1->setNotify(1);
- $rbg->addRadioButton( $rb1 );
- $align = $factory->createLeft($frame);
- my $rb2 = $factory->createRadioButton( $align, N("Add to the 'users' group"), 0);
- $rb2->setNotify(1);
- $rbg->addRadioButton( $rb2 );
-
- my $hbox = $factory->createHBox($layout);
- $align = $factory->createRight($hbox);
- my $cancelButton = $factory->createPushButton($align, N("Cancel"));
- my $okButton = $factory->createPushButton($hbox, N("Ok"));
- while(1) {
- my $event = $dlg->waitForEvent();
- my $eventType = $event->eventType();
-
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
- if ($widget == $cancelButton) {
- last;
- }
- if ($widget == $okButton) {
- $choice = $rb1->value() ? 0 : 1 ;
- last;
- }
- }
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-
- return $choice;
-}
-
-#=============================================================
-
-=head2 _updateOrDelUsersInGroup
-
-=head3 INPUT
-
- $name: username
-
-=head3 DESCRIPTION
-
- Fixes user deletion into groups.
-
-=cut
-
-#=============================================================
-sub _updateOrDelUserInGroup {
- my ($self, $name) = @_;
- my $groups = $self->ctx->GroupsEnumerateFull;
- foreach my $g (@$groups) {
- my $members = $g->MemberName(1, 0);
- if ($self->_inArray($name, $members)) {
- eval { $g->MemberName($name, 2) };
- eval { $self->ctx->GroupModify($g) };
- }
- }
-}
-
-#=============================================================
-
-=head2 _deleteGroupDialog
-
-=head3 INPUT
-
- $self: this object
-
-=head3 DESCRIPTION
-
- This method open a dialog to delete the selected group.
-
-=cut
-
-#=============================================================
-sub _deleteGroupDialog {
- my $self = shift;
-
- my $item = $self->get_widget('table')->selectedItem();
- if (! $item) {
- return;
- }
-
- my $groupname = $item->label();
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle(N("Warning"));
-
- my $factory = yui::YUI::widgetFactory;
- my $dlg = $factory->createPopupDialog();
- my $layout = $factory->createVBox($dlg);
-
- my $align = $factory->createLeft($layout);
-
- $factory->createLabel($align, N("Do you really want to delete the group %s?",
- $groupname));
-
- $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $cancelButton = $factory->createPushButton($hbox, N("Cancel"));
- my $deleteButton = $factory->createPushButton($hbox, N("Delete"));
-
- while(1) {
- my $event = $dlg->waitForEvent();
- my $eventType = $event->eventType();
-
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
- if ($widget == $cancelButton) {
- last;
- }
- elsif ($widget == $deleteButton) {
- my $groupEnt = $self->ctx->LookupGroupByName($groupname);
- my $members = $self->ctx->EnumerateUsersByGroup($groupname);
- my $continue = 1;
- GLOOP: foreach my $username (@$members) {
- my $userEnt = $self->ctx->LookupUserByName($username);
- if ($userEnt && $userEnt->Gid($self->USER_GetValue) == $groupEnt->Gid($self->USER_GetValue)) {
- AdminPanel::Shared::msgBox(N("%s is a primary group for user %s\n Remove the user first",
- $groupname, $username));
- $continue = 0;
- last GLOOP;
- }
- }
- if ($continue) {
- log::explanations(N("Removing group: %s", $groupname));
- eval { $self->ctx->GroupDel($groupEnt) };
- $self->_refresh();
- }
- last;
- }
- }
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-}
-
-#=============================================================
-
-=head2 _deleteUserDialog
-
-=head3 INPUT
-
- $self: this object
-
-=head3 DESCRIPTION
-
- This method open a dialog to delete the selected user.
- It also asks for additional information to be removed.
-
-=cut
-
-#=============================================================
-sub _deleteUserDialog {
- my $self = shift;
-
- my $item = $self->get_widget('table')->selectedItem();
- if (! $item) {
- return;
- }
- my $username = $item->label();
-
- my $userEnt = $self->ctx->LookupUserByName($username);
- my $homedir = $userEnt->HomeDir($self->USER_GetValue);
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle(N("Delete files or not?"));
-
- my $factory = yui::YUI::widgetFactory;
- my $dlg = $factory->createPopupDialog();
- my $layout = $factory->createVBox($dlg);
-
- my $align = $factory->createLeft($layout);
- $factory->createLabel($align, N("Deleting user %s\nAlso perform the following actions\n",
- $username));
- $align = $factory->createLeft($layout);
- my $checkhome = $factory->createCheckBox($align, N("Delete Home Directory: %s", $homedir, 0));
- $align = $factory->createLeft($layout);
- my $checkspool = $factory->createCheckBox($align, N("Delete Mailbox: /var/spool/mail/%s",
- $username), 0);
- $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $cancelButton = $factory->createPushButton($hbox, N("Cancel"));
- my $deleteButton = $factory->createPushButton($hbox, N("Delete"));
-
- if ($homedir !~ m!(?:/home|/var/spool)!) {
- $checkhome->setDisabled();
- $checkspool->setDisabled();
- }
-
-
- while(1) {
- my $event = $dlg->waitForEvent();
- my $eventType = $event->eventType();
-
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
- if ($widget == $cancelButton) {
- last;
- }
- elsif ($widget == $deleteButton) {
- log::explanations(N("Removing user: %s", $username));
- $self->ctx->UserDel($userEnt);
- $self->_updateOrDelUserInGroup($username);
- #Let's check out the user's primary group
- my $usergid = $userEnt->Gid($self->USER_GetValue);
- my $groupEnt = $self->ctx->LookupGroupById($usergid);
- if ($groupEnt) {
- my $member = $groupEnt->MemberName(1, 0);
- if (scalar(@$member) == 0 && $groupEnt->Gid($self->USER_GetValue) > 499) {
- $self->ctx->GroupDel($groupEnt);
- }
- }
- if ($checkhome->isChecked()) {
- eval { $self->ctx->CleanHome($userEnt) };
- $@ and AdminPanel::Shared::msgBox($@) and last;
- }
- if ($checkspool->isChecked()) {
- eval { $self->ctx->CleanSpool($userEnt) };
- $@ and AdminPanel::Shared::msgBox($@) and last;
- }
- $self->_refresh();
- last;
- }
- }
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-
-}
-
-
-sub _addGroupDialog {
- my $self = shift;
-
- my $is_system = 0;
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle(N("Create New Group"));
- my $factory = yui::YUI::widgetFactory;
- my $optional = yui::YUI::optionalWidgetFactory;
-
- my $dlg = $factory->createPopupDialog();
- my $layout = $factory->createVBox($dlg);
-
- ## 'group name'
- my $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $label = $factory->createLabel($hbox, N("Group Name:") );
- my $groupName = $factory->createInputField($hbox, "", 0);
- $label->setWeight($yui::YD_HORIZ, 1);
- $groupName->setWeight($yui::YD_HORIZ, 2);
-
- $factory->createVSpacing($layout, 1);
-
- # Specify group id manually
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- my $gidManually = $factory->createCheckBox($hbox, N("Specify group ID manually"), 0);
- $factory->createHSpacing($hbox, 2);
- my $GID = $factory->createIntField($hbox, N("GID"), 1, 65000, 500);
- $GID->setEnabled($gidManually->value());
- $gidManually->setNotify(1);
-
- $hbox = $factory->createHBox($layout);
- $align = $factory->createRight($hbox);
- my $cancelButton = $factory->createPushButton($align, N("Cancel"));
- my $okButton = $factory->createPushButton($hbox, N("Ok"));
- while(1) {
- my $event = $dlg->waitForEvent();
- my $eventType = $event->eventType();
-
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
- if ($widget == $cancelButton) {
- last;
- }
- elsif ($widget == $gidManually) {
- # GID inserction enabled?
- $GID->setEnabled($gidManually->value());
- }
- elsif ($widget == $okButton) {
- ## check data
- my $groupname = $groupName->value();
- my ($continue, $errorString) = valid_groupname($groupname);
- my $nm = $continue && $self->ctx->LookupGroupByName($groupname);
- if ($nm) {
- $groupName->setValue("");
- $errorString = N("Group already exists, please choose another Group Name");
- $continue = 0;
- }
- my $groupEnt = $self->ctx->InitGroup($groupname, $is_system);
-
- my $gid = 0;
- if ($continue && $gidManually->value()) {
- if (($gid = $GID->value()) < 500) {
- $errorString = "";
- my $gidchoice = AdminPanel::Shared::ask_YesOrNo(N(" Group Gid is < 500"),
- N("Creating a group with a GID less than 500 is not recommended.\n Are you sure you want to do this?\n\n"));
- $continue = $gidchoice and $groupEnt->Gid($gid);
- } else {
- my $g = $self->ctx->LookupGroupById($gid);
- if ($g) {
- $errorString = "";
- my $gidchoice = AdminPanel::Shared::ask_YesOrNo(N(" Group ID is already used "),
- N("Creating a group with a non unique GID?\n\n"));
- $continue = $gidchoice and $groupEnt->Gid($gid);
- }
- else {
- $groupEnt and $groupEnt->Gid($gid);
- }
- }
- }
-
-
- if (!$continue) {
- #--- raise error
- AdminPanel::Shared::msgBox($errorString) if ($errorString);
- }
- else {
- log::explanations(N("Adding group: %s ", $groupname));
- $self->ctx->GroupAdd($groupEnt);
- $self->_refresh();
- last;
- }
- }
- }
- }
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-}
-
-
-#=============================================================
-
-=head2 _buildUserData
-
-=head3 INPUT
-
- $self: this object
- $layout : layout in wich drawing graphic user data
-
-=head3 OUTPUT
-
- %userData: hash containing reference to graphical object
- such as:
- full_name, login_name, password, password1,
- login_shell
-
-=head3 DESCRIPTION
-
- This method is used by addUserDialog and _editUserDialog
- to create User Data dialog
-=cut
-
-#=============================================================
-sub _buildUserData {
- my ($self, $layout, $selected_shell) = @_;
-
-
- my @shells = @{$self->ctx->GetUserShells};
-
- my $factory = yui::YUI::widgetFactory;
-
- ## user 'full name'
- my $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $label = $factory->createLabel($hbox, N("Full Name:") );
- my $fullName = $factory->createInputField($hbox, "", 0);
- $label->setWeight($yui::YD_HORIZ, 1);
- $fullName->setWeight($yui::YD_HORIZ, 2);
-
- ## user 'login name'
- $align = $factory->createRight($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Login:") );
- my $loginName = $factory->createInputField($hbox, "", 0);
- $label->setWeight($yui::YD_HORIZ, 1);
- $loginName->setWeight($yui::YD_HORIZ, 2);
- $loginName->setNotify(1);
-
- ## user 'Password'
- $align = $factory->createRight($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Password:") );
- my $password = $factory->createInputField($hbox, "", 1);
- $label->setWeight($yui::YD_HORIZ, 1);
- $password->setWeight($yui::YD_HORIZ, 2);
-
- ## user 'confirm Password'
- $align = $factory->createRight($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Confirm Password:") );
- my $password1 = $factory->createInputField($hbox, "", 1);
- $label->setWeight($yui::YD_HORIZ, 1);
- $password1->setWeight($yui::YD_HORIZ, 2);
-
- ## user 'Login Shell'
- $align = $factory->createRight($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Login Shell:") );
- my $loginShell = $factory->createComboBox($hbox, "", 0);
- my $itemColl = new yui::YItemCollection;
- foreach my $shell (@shells) {
- my $item = new yui::YItem ($shell, 0);
- $item->setSelected(1) if ($selected_shell && $selected_shell eq $shell);
- $itemColl->push($item);
- $item->DISOWN();
- }
- $loginShell->addItems($itemColl);
- $label->setWeight($yui::YD_HORIZ, 1);
- $loginShell->setWeight($yui::YD_HORIZ, 2);
-
- my %userData = (
- full_name => $fullName,
- login_name => $loginName,
- password => $password,
- password1 => $password1,
- login_shell => $loginShell,
- );
-
- return ( %userData );
-}
-
-#=============================================================
-
-=head2 addUserDialog
-
-=head3 INPUT
-
- $self: this object
- $standalone: if set the application title is set
- from the name set in costructor
-
-=head3 DESCRIPTION
-
- This method creates and manages the dialog to add a new
- user.
-
-=cut
-
-#=============================================================
-sub addUserDialog {
- my $self = shift;
- my $standalone = shift;
-
- my $dontcreatehomedir = 0;
- my $is_system = 0;
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- if ($standalone) {
- yui::YUI::app()->setApplicationTitle($self->name);
- }
- else {
- yui::YUI::app()->setApplicationTitle(N("Create New User"));
- }
-
- my $factory = yui::YUI::widgetFactory;
- my $optional = yui::YUI::optionalWidgetFactory;
-
- my $dlg = $factory->createPopupDialog();
- my $layout = $factory->createVBox($dlg);
-
- my %userData = $self->_buildUserData($layout);
-
- ##### add a separator
- ## Create Home directory
- my $align = $factory->createLeft($layout);
- my $hbox = $factory->createHBox($align);
- my $createHome = $factory->createCheckBox($hbox, N("Create Home Directory"), 1);
- ## Home directory
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- my $label = $factory->createLabel($hbox, N("Home Directory:") );
- my $homeDir = $factory->createInputField($hbox, "", 0);
- $label->setWeight($yui::YD_HORIZ, 1);
- $homeDir->setWeight($yui::YD_HORIZ, 2);
-
- # Create private group
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- my $createGroup = $factory->createCheckBox($hbox, N("Create a private group for the user"), 1);
-
- # Specify user id manually
- $align = $factory->createRight($layout);
- $hbox = $factory->createHBox($align);
- my $uidManually = $factory->createCheckBox($hbox, N("Specify user ID manually"), 0);
- my $UID = $factory->createIntField($hbox, N("UID"), 1, 65000, 500);
- $UID->setEnabled($uidManually->value());
- $uidManually->setNotify(1);
- $uidManually->setWeight($yui::YD_HORIZ, 2);
- $UID->setWeight($yui::YD_HORIZ, 1);
-
- ## user 'icon'
- $hbox = $factory->createHBox($layout);
- $factory->createLabel($hbox, N("Click on icon to change it") );
- my $iconFace = AdminPanel::Users::users::GetFaceIcon();
- my $icon = $factory->createPushButton($hbox, "");
- $icon->setIcon(AdminPanel::Users::users::face2png($iconFace));
- $icon->setLabel($iconFace);
-
- $hbox = $factory->createHBox($layout);
- $align = $factory->createRight($hbox);
- my $cancelButton = $factory->createPushButton($align, N("Cancel"));
- my $okButton = $factory->createPushButton($hbox, N("Ok"));
- while(1) {
- my $event = $dlg->waitForEvent();
- my $eventType = $event->eventType();
-
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- # widget selected
- my $widget = $event->widget();
- if ($widget == $cancelButton) {
- last;
- }
- elsif ($widget == $icon) {
- #remove shortcut from label
- my $iconLabel = $self->_skipShortcut($icon->label());
-
- my $nextIcon = GetFaceIcon($icon->label(), 1);
- $icon->setLabel($nextIcon);
- $icon->setIcon(AdminPanel::Users::users::face2png($nextIcon));
- }
- elsif ($widget == $uidManually) {
- # UID inserction enabled?
- $UID->setEnabled($uidManually->value());
- }
- elsif ($widget == $userData{ login_name }) {
- my $username = $userData{ login_name }->value();
- $homeDir->setValue("/home/$username");
- }
- elsif ($widget == $okButton) {
- ## check data
- my $username = $userData{ login_name }->value();
- my ($continue, $errorString) = valid_username($username);
- my $nm = $continue && $self->ctx->LookupUserByName($username);
- if ($nm) {
- $userData{ login_name }->setValue("");
- $homeDir->setValue("");
- $errorString = N("User already exists, please choose another User Name");
- $continue = 0;
- }
- my $passwd = $continue && $userData{ password }->value();
- if ($continue && $passwd ne $userData{ password1 }->value()) {
- $errorString = N("Password Mismatch");
- $continue = 0;
- }
- my $sec = security::level::get();
- if ($sec > 3 && length($passwd) < 6) {
- $errorString = N("This password is too simple. \n Good passwords should be > 6 characters");
- $continue = 0;
- }
- my $userEnt = $continue && $self->ctx->InitUser($username, $is_system);
- if ($continue && $createHome->value()) {
- $dontcreatehomedir = 0;
- my $homedir = $homeDir->value();
- $userEnt and $userEnt->HomeDir($homedir);
- } else {
- $dontcreatehomedir = 1;
- }
- my $uid = 0;
- if ($continue && $uidManually->value()) {
- if (($uid = $UID->value()) < 500) {
- $errorString = "";
- my $uidchoice = AdminPanel::Shared::ask_YesOrNo(N("User Uid is < 500"),
- N("Creating a user with a UID less than 500 is not recommended.\nAre you sure you want to do this?\n\n"));
- $continue = $uidchoice and $userEnt->Uid($uid);
- } else {
- $userEnt and $userEnt->Uid($uid);
- }
- }
- my $gid = 0;
- if ($createGroup->value()) {
- if ($continue) {
- #Check if group exist
- my $gr = $self->ctx->LookupGroupByName($username);
- if ($gr) {
- my $groupchoice = $self->ChooseGroup();
- if ($groupchoice == 0 ) {
- #You choose to put it in the existing group
- $gid = $gr->Gid($self->USER_GetValue);
- } elsif ($groupchoice == 1) {
- # Put it in 'users' group
- log::explanations(N("Putting %s to 'users' group",
- $username));
- $gid = AdminPanel::Users::users::Add2UsersGroup($username, $self->ctx);
- }
- else {
- $errorString = "";
- $continue = 0;
- }
- } else {
- #it's a new group: Add it
- my $newgroup = $self->ctx->InitGroup($username,$is_system);
- log::explanations(N("Creating new group: %s", $username));
- $gid = $newgroup->Gid($self->USER_GetValue);
- $self->ctx->GroupAdd($newgroup);
- }
- }
- } else {
- $continue and $gid = AdminPanel::Users::users::Add2UsersGroup($username, $self->ctx);
- }
-
- if (!$continue) {
- #---rasie error
- AdminPanel::Shared::msgBox($errorString) if ($errorString);
- }
- else {
- ## OK let's create the user
- print N("Adding user: ") . $username . " \n";
- log::explanations(N("Adding user: %s"), $username);
- my $loginshell = $userData{ login_shell }->value();
- my $fullname = $userData{ full_name }->value();
- $userEnt->Gecos($fullname); $userEnt->LoginShell($loginshell);
- $userEnt->Gid($gid);
- $userEnt->ShadowMin(-1); $userEnt->ShadowMax(99999);
- $userEnt->ShadowWarn(-1); $userEnt->ShadowInact(-1);
- $self->ctx->UserAdd($userEnt, $is_system, $dontcreatehomedir);
- $self->ctx->UserSetPass($userEnt, $passwd);
- defined $icon->label() and
- AdminPanel::Users::users::addKdmIcon($username, $icon->label());
-### TODO Migration wizard
-#
-# Refresh($sysfilter, $stringsearch);
-# transfugdrake::get_windows_disk()
-# and $in->ask_yesorno(N("Migration wizard"),
-# N("Do you want to run the migration wizard in order to import Windows documents and settings in your Mageia distribution?"))
-# and run_program::raw({ detach => 1 }, 'transfugdrake');
-
-
- last;
- }
- }
- }
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle) if $appTitle;
-}
-
-#=============================================================
-
-=head2 _createUserTable
-
-=head3 INPUT
-
- $self: this object
-
-=head3 DESCRIPTION
-
-This function create the User table to be added to the replace
-point of the tab widget. Note this function is meant for internal
-use only
-
-=cut
-
-#=============================================================
-sub _createUserTable {
- my $self = shift;
-
- $self->dialog->startMultipleChanges();
- $self->get_widget('replace_pnt')->deleteChildren();
- my $parent = $self->get_widget('replace_pnt');
- my $factory = yui::YUI::widgetFactory;
- my $yTableHeader = new yui::YTableHeader();
- $yTableHeader->addColumn(N("User Name"), $yui::YAlignBegin);
- $yTableHeader->addColumn(N("User ID"), $yui::YAlignBegin);
- $yTableHeader->addColumn(N("Primary Group"), $yui::YAlignBegin);
- $yTableHeader->addColumn(N("Full Name"), $yui::YAlignBegin);
- $yTableHeader->addColumn(N("Login Shell"), $yui::YAlignBegin);
- $yTableHeader->addColumn(N("Home Directory"), $yui::YAlignBegin);
- $yTableHeader->DISOWN();
-
- $self->set_widget(table => $factory->createTable($parent, $yTableHeader));
-
- $self->get_widget('table')->setImmediateMode(1);
- $self->get_widget('table')->DISOWN();
- $self->get_widget('replace_pnt')->showChild();
- $self->dialog->recalcLayout();
- $self->dialog->doneMultipleChanges();
- $self->_refreshUsers();
-}
-
-#=============================================================
-
-=head2 _createGroupTable
-
-=head3 INPUT
-
- $self: this object
-
-=head3 DESCRIPTION
-
-This function create the Group table to be added to the replace
-point of the tab widget. Note this function is meant for internal
-use only
-
-
-=cut
-
-#=============================================================
-sub _createGroupTable {
- my $self = shift;
-
-
- $self->dialog->startMultipleChanges();
- $self->get_widget('replace_pnt')->deleteChildren();
- my $parent = $self->get_widget('replace_pnt');
- my $factory = yui::YUI::widgetFactory;
- my $yTableHeader = new yui::YTableHeader();
- $yTableHeader->addColumn(N("Group Name"), $yui::YAlignBegin);
- $yTableHeader->addColumn(N("Group ID"), $yui::YAlignBegin);
- $yTableHeader->addColumn(N("Group Members"), $yui::YAlignBegin);
- $yTableHeader->DISOWN();
-
- $self->set_widget(table => $factory->createTable($parent, $yTableHeader));
-
- $self->get_widget('table')->setImmediateMode(1);
- $self->get_widget('table')->DISOWN();
- $self->get_widget('replace_pnt')->showChild();
- $self->dialog->recalcLayout();
- $self->dialog->doneMultipleChanges();
- $self->_refreshGroups();
-}
-
-
-#=============================================================
-
-=head2 _computeLockExpire
-
-=head3 INPUT
-
- $l: login user info
-
-=head3 OUTPUT
-
- $status: Locked, Expired, or empty string
-
-=head3 DESCRIPTION
-
- This method returns if the login is Locked, Expired or ok.
- Note this function is meant for internal use only
-
-=cut
-
-#=============================================================
-sub _computeLockExpire {
- my ( $self, $l ) = @_;
- my $ep = $l->ShadowExpire($self->USER_GetValue);
- my $tm = ceil(time()/(24*60*60));
- $ep = -1 if int($tm) <= $ep;
- my $status = $self->ctx->IsLocked($l) ? N("Locked") : ($ep != -1 ? N("Expired") : '');
- $status;
-}
-
-#=============================================================
-
-=head2 _refreshUsers
-
-=head3 INPUT
-
- $self: this object
-
-=head3 DESCRIPTION
-
- This method refresh user info into User tab widget.
- Note this function is meant for internal use only
-
-=cut
-
-#=============================================================
-sub _refreshUsers {
- my $self = shift;
-
- my $strfilt = $self->get_widget('filter')->value();
- my $filterusers = $self->get_widget('filter_system')->isChecked();
-
- my ($users, $group, $groupnm, $expr);
- defined $self->ctx and $users = $self->ctx->UsersEnumerateFull;
-
- $self->dialog->startMultipleChanges();
- #for some reasons QT send an event using table->selectItem()
- # WA remove notification immediate
- $self->get_widget('table')->setImmediateMode(0);
- $self->get_widget('table')->deleteAllItems();
-
- my @UserReal;
- LOOP: foreach my $l (@$users) {
- next LOOP if $filterusers && $l->Uid($self->USER_GetValue) <= 499 || $l->Uid($self->USER_GetValue) == 65534;
- push @UserReal, $l if $l->UserName($self->USER_GetValue) =~ /^\Q$strfilt/;
- }
- my $i;
- my $itemColl = new yui::YItemCollection;
- foreach my $l (@UserReal) {
- $i++;
- my $uid = $l->Uid($self->USER_GetValue);
- if (!defined $uid) {
- warn "bogus user at line $i\n";
- next;
- }
- my $a = $l->Gid($self->USER_GetValue);
- $group = $self->ctx->LookupGroupById($a);
- $groupnm = '';
- $expr = $self->_computeLockExpire($l);
- $group and $groupnm = $group->GroupName($self->USER_GetValue);
- my $s = $l->Gecos($self->USER_GetValue);
- c::set_tagged_utf8($s);
- my $username = $l->UserName($self->USER_GetValue);
- my $Uid = $l->Uid($self->USER_GetValue);
- my $shell = $l->LoginShell($self->USER_GetValue);
- my $homedir = $l->HomeDir($self->USER_GetValue);
- my $item = new yui::YTableItem ("$username",
- "$Uid",
- "$groupnm",
- "$s",
- "$shell",
- "$homedir",
- "$expr");
- # TODO workaround to get first cell at least until we don't
- # a cast from YItem
- $item->setLabel( $username );
- $itemColl->push($item);
- $item->DISOWN();
- }
- $self->get_widget('table')->addItems($itemColl);
- my $item = $self->get_widget('table')->selectedItem();
- $self->get_widget('table')->selectItem($item, 0) if $item;
- $self->dialog->recalcLayout();
- $self->dialog->doneMultipleChanges();
- $self->_refreshActions();
- $self->get_widget('table')->setImmediateMode(1);
-}
-
-#=============================================================
-
-=head2 _refreshGroups
-
-=head3 INPUT
-
- $self: this object
-
-=head3 DESCRIPTION
-
- This method refresh group info into Group tab widget.
- Note this function is meant for internal use only
-
-=cut
-
-#=============================================================
-sub _refreshGroups {
- my $self = shift;
-
- my $strfilt = $self->get_widget('filter')->value();
- my $filtergroups = $self->get_widget('filter_system')->isChecked();
-
- my $groups;
- defined $self->ctx and $groups = $self->ctx->GroupsEnumerateFull;
-
- $self->dialog->startMultipleChanges();
- #for some reasons QT send an event using table->selectItem()
- # WA remove notification immediate
- $self->get_widget('table')->setImmediateMode(0);
- $self->get_widget('table')->deleteAllItems();
- my @GroupReal;
- LOOP: foreach my $g (@$groups) {
- next LOOP if $filtergroups && $g->Gid($self->USER_GetValue) <= 499 || $g->Gid($self->USER_GetValue) == 65534;
- push @GroupReal, $g if $g->GroupName($self->USER_GetValue) =~ /^\Q$strfilt/;
- }
-
- my $itemColl = new yui::YItemCollection;
- foreach my $g (@GroupReal) {
- my $a = $g->GroupName($self->USER_GetValue);
- #my $group = $ctx->LookupGroupById($a);
- my $u_b_g = $a && $self->ctx->EnumerateUsersByGroup($a);
- my $listUbyG = join(',', @$u_b_g);
- my $group_id = $g->Gid($self->USER_GetValue);
- my $groupname = $g->GroupName($self->USER_GetValue);
- my $item = new yui::YTableItem ("$groupname",
- "$group_id",
- "$listUbyG");
- $item->setLabel( $groupname );
- $itemColl->push($item);
- $item->DISOWN();
- }
-
- $self->get_widget('table')->addItems($itemColl);
- my $item = $self->get_widget('table')->selectedItem();
- $self->get_widget('table')->selectItem($item, 0) if $item;
- $self->dialog->recalcLayout();
- $self->dialog->doneMultipleChanges();
- $self->_refreshActions();
- $self->get_widget('table')->setImmediateMode(1);
-}
-
-
-#=============================================================
-
-=head2 _getUserInfo
-
-=head3 INPUT
-
- $self: this object
-
-=head3 OUTPUT
-
- %userData: selected user info as:
- username: username
- full_name: full name of user
- shell: shell used
- homedir: home dir path
- UID: User identifier
- acc_check_exp: account expiration enabling
- acc_expy: account expiration year
- acc_expm: account expiration month
- acc_expd: account expiration day
- lockuser: account locked
- pwd_check_exp: password expiration enabling
- pwd_exp_min: days before changing password
- is allowed
- pwd_exp_max: days before changing password
- is required
- pwd_exp_warn: warning days before changing
- pwd_exp_inact: days before account becomes
- inact
- members: Array containing groups the user
- belongs to.
- primary_group: primary group ID for the user
-
-=head3 DESCRIPTION
-
- Retrieves the selected user info from the system
- Note that acc_expy, acc_expm and acc_expd are valid if
- acc_check_exp is enabled.
- Note that pwd_exp_min, pwd_exp_max, pwd_exp_warn,
- pwd_exp_inact are valid if pwd_check_exp is enabled.
-
-=cut
-
-#=============================================================
-
-sub _getUserInfo {
- my $self = shift;
-
- my $label = $self->_skipShortcut($self->get_widget('tabs')->selectedItem()->label());
- if ($label ne N("Users") ) {
- return undef;
- }
-
- my $item = $self->get_widget('table')->selectedItem();
- if (! $item) {
- return undef;
- }
-
- my %userData;
- $userData{username} = $item->label();
- my $userEnt = $self->ctx->LookupUserByName($userData{username});
-
- my $s = $userEnt->Gecos($self->USER_GetValue);
- c::set_tagged_utf8($s);
- $userData{full_name} = $s;
- $userData{shell} = $userEnt->LoginShell($self->USER_GetValue);
- $userData{homedir} = $userEnt->HomeDir($self->USER_GetValue);
- $userData{UID} = $userEnt->Uid($self->USER_GetValue);
-
- # default expiration time
- my ($day, $mo, $ye) = (localtime())[3, 4, 5];
- $userData{acc_expy} = $ye+1900;
- $userData{acc_expm} = $mo+1;
- $userData{acc_expd} = $day;
- $userData{acc_check_exp} = 0;
- my $expire = $userEnt->ShadowExpire($self->USER_GetValue);
- if ($expire && $expire != -1) {
- my $times = TimeOfArray($expire, 1);
- $userData{acc_expy} = $times->{year};
- $userData{acc_expm} = $times->{month};
- $userData{acc_expd} = $times->{dayint};
- $userData{acc_check_exp} = 1;
- }
-
- # user password are not retrieved if admin wants
- # to change it has to insert a new one
- $userData{password} = undef;
- $userData{password1} = undef;
- # Check if user account is locked
-
- $userData{lockuser} = $self->ctx->IsLocked($userEnt);
-
- $userData{icon_face} = AdminPanel::Users::users::GetFaceIcon($userData{username});
- $userData{pwd_check_exp} = 0;
- $userData{pwd_exp_min} = $userEnt->ShadowMin($self->USER_GetValue);
- $userData{pwd_exp_max} = $userEnt->ShadowMax($self->USER_GetValue);
- $userData{pwd_exp_warn} = $userEnt->ShadowWarn($self->USER_GetValue);
- $userData{pwd_exp_inact} = $userEnt->ShadowInact($self->USER_GetValue);
-
- if ($userData{pwd_exp_min} && $userData{pwd_exp_min} != -1 ||
- $userData{pwd_exp_max} && $userData{pwd_exp_max} != 99999 ||
- $userData{pwd_exp_warn} && $userData{pwd_exp_warn} != 7 && $userData{pwd_exp_warn} != -1 ||
- $userData{pwd_exp_inact} && $userData{pwd_exp_inact} != -1) {
- $userData{pwd_check_exp} = 1;
- }
-
- $userData{members} = $self->ctx->EnumerateGroupsByUser($userData{username});
- $userData{primary_group} = $userEnt->Gid($self->USER_GetValue);
-
- return %userData;
-
-}
-
-#=============================================================
-
-=head2 _getUserInfo
-
-=head3 INPUT
-
- $self: this object
-
-=head3 OUTPUT
-
- %groupData: selected group info as:
- $groupname: group name
- $members: users that are members of this group
-
-=head3 DESCRIPTION
-
- Retrieves the selected group info from the system
-
-=cut
-
-#=============================================================
-
-sub _getGroupInfo {
- my $self = shift;
-
- my $label = $self->_skipShortcut($self->get_widget('tabs')->selectedItem()->label());
- if ($label ne N("Groups") ) {
- return undef;
- }
-
- my $item = $self->get_widget('table')->selectedItem();
- if (! $item) {
- return undef;
- }
-
- my %groupData;
- $groupData{start_groupname} = $item->label();
- $groupData{groupname} = $item->label();
-
- my $groupEnt = $self->ctx->LookupGroupByName($groupData{groupname});
- $groupData{members} = $self->ctx->EnumerateUsersByGroup($groupData{groupname});
-
- return %groupData;
-
-}
-
-sub _storeDataFromGroupEditPreviousTab {
- my ($self, %groupData) = @_;
-
- my $previus_tab = $self->get_edit_tab_widget('edit_tab_label');
- if (!$previus_tab) {
- return %groupData;
- }
- elsif ($previus_tab eq $groupEditLabel{group_data}) {
- $groupData{groupname} = $self->get_edit_tab_widget('groupname')->value();
- }
- elsif ($previus_tab eq $groupEditLabel{group_users}) {
- my $tbl = $self->get_edit_tab_widget('members');
- $groupData{members} = undef;
- my @members;
- my $i;
- for($i=0;$i<$tbl->itemsCount();$i++) {
- push (@members, $tbl->item($i)->label()) if $tbl->toCBYTableItem($tbl->item($i))->checked();
- }
- $groupData{members} = [ @members ];
- }
-
- return %groupData;
-}
-
-
-sub _storeDataFromUserEditPreviousTab {
- my ($self, %userData) = @_;
-
- my $previus_tab = $self->get_edit_tab_widget('edit_tab_label');
- if (!$previus_tab) {
- return %userData;
- }
- elsif ($previus_tab eq $userEditLabel{user_data}) {
- $userData{full_name} = $self->get_edit_tab_widget('full_name')->value();
- $userData{username} = $self->get_edit_tab_widget('login_name')->value() ;
- $userData{shell} = $self->get_edit_tab_widget('login_shell')->value();
- $userData{homedir} = $self->get_edit_tab_widget('homedir')->value();
- my $passwd = $self->get_edit_tab_widget('password')->value();
- $userData{password} = $passwd;
- $passwd = $self->get_edit_tab_widget('password1')->value();
- $userData{password1} = $passwd;
- }
- elsif ($previus_tab eq $userEditLabel{account_info}) {
- $userData{acc_check_exp} = $self->get_edit_tab_widget('acc_check_exp')->value();
- $userData{acc_expy} = $self->get_edit_tab_widget('acc_expy')->value();
- $userData{acc_expm} = $self->get_edit_tab_widget('acc_expm')->value();
- $userData{acc_expd} = $self->get_edit_tab_widget('acc_expd')->value();
- $userData{lockuser} = $self->get_edit_tab_widget('lockuser')->value();
- $userData{icon_face} = $self->get_edit_tab_widget('icon_face')->label();
- }
- elsif ($previus_tab eq $userEditLabel{password_info}) {
- $userData{pwd_check_exp} = $self->get_edit_tab_widget('pwd_check_exp')->value();
- $userData{pwd_exp_min} = $self->get_edit_tab_widget('pwd_exp_min')->value();
- $userData{pwd_exp_max} = $self->get_edit_tab_widget('pwd_exp_max')->value();
- $userData{pwd_exp_warn} = $self->get_edit_tab_widget('pwd_exp_warn')->value();
- $userData{pwd_exp_inact} = $self->get_edit_tab_widget('pwd_exp_inact')->value();
- }
- elsif ($previus_tab eq $userEditLabel{groups}) {
- my $tbl = $self->get_edit_tab_widget('members');
- $userData{members} = undef;
- my @members;
- my $i;
- for($i=0;$i<$tbl->itemsCount();$i++) {
- push (@members, $tbl->item($i)->label()) if $tbl->toCBYTableItem($tbl->item($i))->checked();
- }
- $userData{members} = [ @members ];
-
- if ($self->get_edit_tab_widget('primary_group')->selectedItem()) {
- my $Gent = $self->ctx->LookupGroupByName($self->get_edit_tab_widget('primary_group')->selectedItem()->label());
- my $primgroup = $Gent->Gid($self->USER_GetValue);
-
- $userData{primary_group} = $primgroup;
- }
- else {
- $userData{primary_group} = -1;
- }
- }
-
- return %userData;
-}
-
-#=============================================================
-
-=head2 _userDataTabWidget
-
-=head3 INPUT
-
- $self: this object
- $dialog: YUI dialog that owns the YUI replace point
- $replace_pnt: YUI replace point, needed to add a new tab
- widget
- %userData: hash containing user data info, tabs are
- removed and added again on selection, so
- data must be saved outside of widgets.
- $previus_tab: previous tab widget label, needed to store
- user data from the old tab before removing
- it, if user changed something.
-
-=head3 OUTPUT
-
- %userDataWidget: hash containing new YUI widget objects
- such as:
- retunred onject from _buildUserData and
- homedir.
-
-=head3 DESCRIPTION
-
- This internal method removes old tab widget saving its
- relevant data into userData and creates new selected table
- to be shown.
-
-=cut
-
-#=============================================================
-sub _userDataTabWidget {
- my ($self, $dialog, $replace_pnt, %userData) = @_;
-
- my $factory = yui::YUI::widgetFactory;
-
- $dialog->startMultipleChanges();
-
- $replace_pnt->deleteChildren();
- my $layout = $factory->createVBox($replace_pnt);
- my %userDataWidget = $self->_buildUserData($layout, $userData{shell});
-
- ## user 'login name'
- my $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $label = $factory->createLabel($hbox, N("Home:") );
- $userDataWidget{homedir} = $factory->createInputField($hbox, "", 0);
- $label->setWeight($yui::YD_HORIZ, 1);
- $userDataWidget{homedir}->setWeight($yui::YD_HORIZ, 2);
-
- # fill data into widgets
- ##
- # full_name, login_name, password, password1,
- # login_shell
- $userDataWidget{full_name}->setValue($userData{full_name});
- $userDataWidget{login_name}->setValue($userData{username});
- $userDataWidget{password}->setValue($userData{password}) if $userData{password};
- $userDataWidget{password1}->setValue($userData{password1}) if $userData{password1};
- $userDataWidget{homedir}->setValue($userData{homedir});
-
- $replace_pnt->showChild();
- $dialog->recalcLayout();
- $dialog->doneMultipleChanges();
-
- return %userDataWidget;
-}
-
-
-#=============================================================
-
-=head2 _groupDataTabWidget
-
-=head3 INPUT
-
- $self: this object
- $dialog: YUI dialog that owns the YUI replace point
- $replace_pnt: YUI replace point, needed to add a new tab
- widget
- %groupData: hash containing group data info, tabs are
- removed and added again on selection, so
- data must be saved outside of widgets.
- $previus_tab: previous tab widget label, needed to store
- group data from the old tab before removing
- it, if user changed something.
-
-=head3 OUTPUT
-
- %groupDataWidget: hash containing new YUI widget objects
- such as:
- groupname.
-
-=head3 DESCRIPTION
-
- This internal method removes old tab widget saving its
- relevant data into groupData and creates new selected table
- to be shown.
-
-=cut
-
-#=============================================================
-sub _groupDataTabWidget {
- my ($self, $dialog, $replace_pnt, %groupData) = @_;
-
- my $factory = yui::YUI::widgetFactory;
-
- $dialog->startMultipleChanges();
-
- $replace_pnt->deleteChildren();
- my $layout = $factory->createVBox($replace_pnt);
-
- my %groupDataWidget;
-
- ## user 'login name'
- my $align = $factory->createRight($layout);
- my $hbox = $factory->createHBox($align);
- my $label = $factory->createLabel($hbox, N("Group Name:") );
- $groupDataWidget{groupname} = $factory->createInputField($hbox, "", 0);
- $label->setWeight($yui::YD_HORIZ, 1);
- $groupDataWidget{groupname}->setWeight($yui::YD_HORIZ, 2);
-
- $groupDataWidget{groupname}->setValue($groupData{groupname});
-
- $replace_pnt->showChild();
- $dialog->recalcLayout();
- $dialog->doneMultipleChanges();
-
- return %groupDataWidget;
-}
-
-
-sub _userAccountInfoTabWidget {
- my ($self, $dialog, $replace_pnt, %userData) = @_;
-
- my $factory = yui::YUI::widgetFactory;
-
- $dialog->startMultipleChanges();
-
- $replace_pnt->deleteChildren();
- my $layout = $factory->createVBox($replace_pnt);
-
- my %userAccountWidget;
- $userAccountWidget{acc_check_exp} = $factory->createCheckBoxFrame($layout, N("Enable account expiration"), 1);
- my $align = $factory->createRight($userAccountWidget{acc_check_exp});
- my $hbox = $factory->createHBox($align);
- my $label = $factory->createLabel($hbox, N("Account expires (YYYY-MM-DD):"));
- $userAccountWidget{acc_expy} = $factory->createIntField($hbox, "", 1970, 9999, $userData{acc_expy});
- $userAccountWidget{acc_expm} = $factory->createIntField($hbox, "", 1, 12, $userData{acc_expm});
- $userAccountWidget{acc_expd} = $factory->createIntField($hbox, "", 1, 31, $userData{acc_expd});
- $userAccountWidget{acc_check_exp}->setValue($userData{acc_check_exp});
- $label->setWeight($yui::YD_HORIZ, 2);
- $align = $factory->createLeft($layout);
- $userAccountWidget{lockuser} = $factory->createCheckBox($align, N("Lock User Account"), $userData{lockuser});
-
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Click on the icon to change it"));
- $userAccountWidget{icon_face} = $factory->createPushButton($hbox, "");
- $userAccountWidget{icon_face}->setIcon(AdminPanel::Users::users::face2png($userData{icon_face}));
- $userAccountWidget{icon_face}->setLabel($userData{icon_face});
-
- $replace_pnt->showChild();
- $dialog->recalcLayout();
- $dialog->doneMultipleChanges();
-
- return %userAccountWidget;
-}
-
-
-sub _userPasswordInfoTabWidget {
- my ($self, $dialog, $replace_pnt, %userData) = @_;
-
- my $factory = yui::YUI::widgetFactory;
-
- $dialog->startMultipleChanges();
-
- $replace_pnt->deleteChildren();
- my $layout = $factory->createVBox($replace_pnt);
-
- my %userPasswordWidget;
- my $userEnt = $self->ctx->LookupUserByName($userData{username});
- my $lastchg = $userEnt->ShadowLastChange($self->USER_GetValue);
-
- my $align = $factory->createLeft($layout);
- my $hbox = $factory->createHBox($align);
- my $label = $factory->createLabel($hbox, N("User last changed password on: "));
- my $dayStr = $factory->createLabel($hbox, "");
- my $month = $factory->createLabel($hbox, "");
- my $dayInt = $factory->createLabel($hbox, "");
- my $year = $factory->createLabel($hbox, "");
- if ($lastchg) {
- my $times = TimeOfArray($lastchg, 0);
- $dayStr->setValue($times->{daystr});
- $month->setValue($times->{month});
- $dayInt->setValue($times->{dayint});
- $year->setValue($times->{year});
- }
-
- $userPasswordWidget{pwd_check_exp} = $factory->createCheckBoxFrame($layout, N("Enable Password Expiration"), 1);
- $layout = $factory->createVBox($userPasswordWidget{pwd_check_exp});
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Days before change allowed:"));
- $userPasswordWidget{pwd_exp_min} = $factory->createInputField($hbox, "", 0);
- $userPasswordWidget{pwd_exp_min}->setValue("$userData{pwd_exp_min}");
- $label->setWeight($yui::YD_HORIZ, 1);
- $userPasswordWidget{pwd_exp_min}->setWeight($yui::YD_HORIZ, 2);
-
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Days before change required:"));
- $userPasswordWidget{pwd_exp_max} = $factory->createInputField($hbox, "", 0);
- $userPasswordWidget{pwd_exp_max}->setValue("$userData{pwd_exp_max}");
- $label->setWeight($yui::YD_HORIZ, 1);
- $userPasswordWidget{pwd_exp_max}->setWeight($yui::YD_HORIZ, 2);
-
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Days warning before change:"));
- $userPasswordWidget{pwd_exp_warn} = $factory->createInputField($hbox, "", 0);
- $userPasswordWidget{pwd_exp_warn}->setValue("$userData{pwd_exp_warn}");
- $label->setWeight($yui::YD_HORIZ, 1);
- $userPasswordWidget{pwd_exp_warn}->setWeight($yui::YD_HORIZ, 2);
-
- $align = $factory->createLeft($layout);
- $hbox = $factory->createHBox($align);
- $label = $factory->createLabel($hbox, N("Days before account inactive:"));
- $userPasswordWidget{pwd_exp_inact} = $factory->createInputField($hbox, "", 0);
- $userPasswordWidget{pwd_exp_inact}->setValue("$userData{pwd_exp_inact}");
- $label->setWeight($yui::YD_HORIZ, 1);
- $userPasswordWidget{pwd_exp_inact}->setWeight($yui::YD_HORIZ, 2);
-
- $userPasswordWidget{pwd_check_exp}->setValue($userData{pwd_check_exp});
-
- $replace_pnt->showChild();
- $dialog->recalcLayout();
- $dialog->doneMultipleChanges();
-
- return %userPasswordWidget;
-}
-
-sub _groupUsersTabWidget {
- my ($self, $dialog, $replace_pnt, %groupData) = @_;
-
- my $factory = yui::YUI::widgetFactory;
- my $mageiaPlugin = "mga";
- my $mgaFactory = yui::YExternalWidgets::externalWidgetFactory($mageiaPlugin);
- $mgaFactory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($mgaFactory);
-
- $dialog->startMultipleChanges();
-
- $replace_pnt->deleteChildren();
-
- my %groupUsersWidget;
-
- my $layout = labeledFrameBox($replace_pnt, N("Select the users to join this group:"));
-
- my $yTableHeader = new yui::YTableHeader();
- $yTableHeader->addColumn("", $yui::YAlignBegin);
- $yTableHeader->addColumn(N("User"), $yui::YAlignBegin);
-
- $groupUsersWidget{members} = $mgaFactory->createCBTable($layout, $yTableHeader, $yui::YCBTableCheckBoxOnFirstColumn);
-
- my $groupEnt = $self->ctx->LookupGroupByName($groupData{groupname});
- my $users = $self->ctx->UsersEnumerate;
- my @susers = sort(@$users);
-
- my $itemCollection = new yui::YItemCollection;
- my $members = $groupData{members};
- foreach my $user (@susers) {
- my $item = new yui::YCBTableItem($user);
- $item->check(member($user, @$members));
- $item->setLabel($user);
- $itemCollection->push($item);
- $item->DISOWN();
- }
- $groupUsersWidget{members}->addItems($itemCollection);
-
- $replace_pnt->showChild();
- $dialog->recalcLayout();
- $dialog->doneMultipleChanges();
-
- return %groupUsersWidget;
-}
-
-sub _userGroupsTabWidget {
- my ($self, $dialog, $replace_pnt, %userData) = @_;
-
- my $factory = yui::YUI::widgetFactory;
- my $mageiaPlugin = "mga";
- my $mgaFactory = yui::YExternalWidgets::externalWidgetFactory($mageiaPlugin);
- $mgaFactory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($mgaFactory);
-
- $dialog->startMultipleChanges();
-
- $replace_pnt->deleteChildren();
-
- my %userGroupsWidget;
- my $userEnt = $self->ctx->LookupUserByName($userData{username});
- my $lastchg = $userEnt->ShadowLastChange($self->USER_GetValue);
-
- my $layout = labeledFrameBox($replace_pnt, N("Select groups that the user will be member of:"));
-
- my $yTableHeader = new yui::YTableHeader();
- $yTableHeader->addColumn("", $yui::YAlignBegin);
- $yTableHeader->addColumn(N("Group"), $yui::YAlignBegin);
-
- $userGroupsWidget{members} = $mgaFactory->createCBTable($layout, $yTableHeader, $yui::YCBTableCheckBoxOnFirstColumn);
-
- my $grps = $self->ctx->GroupsEnumerate;
- my @sgroups = sort @$grps;
-
- my $itemCollection = new yui::YItemCollection;
- my $members = $userData{members};
- foreach my $group (@sgroups) {
- my $item = new yui::YCBTableItem($group);
- $item->check(member($group, @$members));
- $item->setLabel($group);
- $itemCollection->push($item);
- $item->DISOWN();
- }
- $userGroupsWidget{members}->addItems($itemCollection);
- $userGroupsWidget{members}->setNotify(1);
- my $primgroup = '';
- if ($userData{primary_group} != -1) {
- my $Gent = $self->ctx->LookupGroupById($userData{primary_group});
- $primgroup = $Gent->GroupName($self->USER_GetValue);
- }
-
- my $align = $factory->createLeft($layout);
- my $hbox = $factory->createHBox($align);
- my $label = $factory->createLabel($hbox, N("Primary Group"));
- $userGroupsWidget{primary_group} = $factory->createComboBox($hbox, "", 0);
- my $itemColl = new yui::YItemCollection;
- foreach my $member (@$members) {
- my $item = new yui::YItem ($member, 0);
- $item->setSelected(1) if ($item->label() eq $primgroup);
- $itemColl->push($item);
- $item->DISOWN();
- }
- $userGroupsWidget{primary_group}->addItems($itemColl);
- $label->setWeight($yui::YD_HORIZ, 1);
- $userGroupsWidget{primary_group}->setWeight($yui::YD_HORIZ, 2);
-
- $replace_pnt->showChild();
- $dialog->recalcLayout();
- $dialog->doneMultipleChanges();
-
- return %userGroupsWidget;
-}
-
-sub _groupEdit_Ok {
- my ($self, %groupData) = @_;
-
- # update last changes if any
- %groupData = $self->_storeDataFromGroupEditPreviousTab(%groupData);
-
- my ($continue, $errorString) = valid_groupname($groupData{groupname});
- if (!$continue) {
- AdminPanel::Shared::msgBox($errorString) if ($errorString);
- return $continue;
- }
- my $groupEnt = $self->ctx->LookupGroupByName($groupData{start_groupname});
- if ($groupData{start_groupname} ne $groupData{groupname}) {
- $groupEnt->GroupName($groupData{groupname});
- }
-
- my $members = $groupData{members};
- my $gid = $groupEnt->Gid($self->USER_GetValue);
- my $users = $self->ctx->UsersEnumerate;
- my @susers = sort(@$users);
-
- foreach my $user (@susers) {
- my $uEnt = $self->ctx->LookupGroupByName($user);
- if ($uEnt) {
- my $ugid = $uEnt->Gid($self->USER_GetValue);
- my $m = $self->ctx->EnumerateUsersByGroup($groupData{start_groupname});
- if (member($user, @$members)) {
- if (!$self->_inArray($user, $m)) {
- if ($ugid != $gid) {
- eval { $groupEnt->MemberName($user,1) };
- }
- }
- }
- else {
- if ($self->_inArray($user, $m)) {
- if ($ugid == $gid) {
- AdminPanel::Shared::msgBox(N("You cannot remove user '%s' from their primary group", $user));
- return 0;
- }
- else {
- eval { $groupEnt->MemberName($user,2) };
- }
- }
- }
- }
- }
-
- $self->ctx->GroupModify($groupEnt);
- $self->_refresh();
-
- return 1;
-}
-
-sub _userEdit_Ok {
- my ($self, %userData) = @_;
-
- # update last changes if any
- %userData = $self->_storeDataFromUserEditPreviousTab(%userData);
-
- my ($continue, $errorString) = valid_username($userData{username});
- if (!$continue) {
- AdminPanel::Shared::msgBox($errorString) if ($errorString);
- return $continue;
- }
-
- if ( $userData{password} ne $userData{password1}) {
- AdminPanel::Shared::msgBox(N("Password Mismatch"));
- return 0;
- }
- my $userEnt = $self->ctx->LookupUserByName($userData{username});
- if ($userData{password} ne '') {
- my $sec = security::level::get();
- if ($sec > 3 && length($userData{password}) < 6) {
- AdminPanel::Shared::msgBox(N("This password is too simple. \n Good passwords should be > 6 characters"));
- return 0;
- }
- $self->ctx->UserSetPass($userEnt, $userData{password});
- }
-
- $userEnt->UserName($userData{username});
- $userEnt->Gecos($userData{full_name});
- $userEnt->HomeDir($userData{homedir});
- $userEnt->LoginShell($userData{shell});
- my $username = $userEnt->UserName($self->USER_GetValue);
- my $grps = $self->ctx->GroupsEnumerate;
- my @sgroups = sort @$grps;
-
- my $members = $userData{members};
- foreach my $group (@sgroups) {
-
- my $gEnt = $self->ctx->LookupGroupByName($group);
- my $ugid = $gEnt->Gid($self->USER_GetValue);
- my $m = $gEnt->MemberName(1,0);
- if (member($group, @$members)) {
- if (!$self->_inArray($username, $m) && $userData{primary_group} != $ugid) {
- eval { $gEnt->MemberName($username, 1) };
- $self->ctx->GroupModify($gEnt);
- }
- }
- else {
- if ($self->_inArray($username, $m)) {
- eval { $gEnt->MemberName($username, 2) };
- $self->ctx->GroupModify($gEnt);
- }
- }
- }
- if ($userData{primary_group} == -1) {
- AdminPanel::Shared::msgBox(N("Please select at least one group for the user"));
- return 0;
- }
- $userEnt->Gid($userData{primary_group});
-
- if ($userData{acc_check_exp}) {
- my $yr = $userData{acc_expy};
- my $mo = $userData{acc_expm};
- my $dy = $userData{acc_expd};
- if (!ValidInt($yr, $dy, $mo)) {
- AdminPanel::Shared::msgBox(N("Please specify Year, Month and Day \n for Account Expiration "));
- return 0;
- }
- my $Exp = ConvTime($dy, $mo, $yr);
- $userEnt->ShadowExpire($Exp);
- }
- else {
- $userEnt->ShadowExpire(ceil(-1))
- }
-
- if ($userData{pwd_check_exp}) {
- my $allowed = int($userData{pwd_exp_min});
- my $required = int($userData{pwd_exp_max});
- my $warning = int($userData{pwd_exp_warn});
- my $inactive = int($userData{pwd_exp_inact});
- if ($allowed && $required && $warning && $inactive) {
- $userEnt->ShadowMin($allowed);
- $userEnt->ShadowMax($required);
- $userEnt->ShadowWarn($warning);
- $userEnt->ShadowInact($inactive);
- }
- else {
- AdminPanel::Shared::msgBox(N("Please fill up all fields in password aging\n"));
- return 0;
- }
- }
- else {
- $userEnt->ShadowMin(-1);
- $userEnt->ShadowMax(99999);
- $userEnt->ShadowWarn(-1);
- $userEnt->ShadowInact(-1);
- }
-
- $self->ctx->UserModify($userEnt);
-
- if ($userData{lockuser}) {
- !$self->ctx->IsLocked($userEnt) and $self->ctx->Lock($userEnt);
- }
- else {
- $self->ctx->IsLocked($userEnt) and $self->ctx->UnLock($userEnt);
- }
-
- defined $userData{icon_face} and AdminPanel::Users::users::addKdmIcon($userData{username}, $userData{icon_face});
- $self->_refresh();
-
- return 1;
-}
-
-
-
-sub _editUserDialog {
- my $self = shift;
-
- my $dontcreatehomedir = 0;
- my $is_system = 0;
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle(N("Edit User"));
-
- my $factory = yui::YUI::widgetFactory;
- my $optional = yui::YUI::optionalWidgetFactory;
-
- my $dlg = $factory->createPopupDialog();
- my $layout = $factory->createVBox($dlg);
-
- my %tabs;
- if ($optional->hasDumbTab()) {
- my $hbox = $factory->createHBox($layout);
- my $align = $factory->createHCenter($hbox);
- $tabs{widget} = $optional->createDumbTab($align);
-
- $tabs{user_data} = new yui::YItem($userEditLabel{user_data});
- $tabs{user_data}->setSelected();
- $tabs{used} = $tabs{user_data}->label();
- $tabs{widget}->addItem( $tabs{user_data} );
- $tabs{user_data}->DISOWN();
-
- $tabs{account_info} = new yui::YItem($userEditLabel{account_info});
- $tabs{widget}->addItem( $tabs{account_info} );
- $tabs{account_info}->DISOWN();
-
- $tabs{password_info} = new yui::YItem($userEditLabel{password_info});
- $tabs{widget}->addItem( $tabs{password_info} );
- $tabs{password_info}->DISOWN();
-
- $tabs{groups} = new yui::YItem($userEditLabel{groups});
- $tabs{widget}->addItem( $tabs{groups} );
- $tabs{groups}->DISOWN();
-
- my $vbox = $factory->createVBox($tabs{widget});
- $align = $factory->createLeft($vbox);
- $tabs{replace_pnt} = $factory->createReplacePoint($align);
-
- $hbox = $factory->createHBox($vbox);
- $align = $factory->createRight($hbox);
- my $cancelButton = $factory->createPushButton($align, N("Cancel"));
- my $okButton = $factory->createPushButton($hbox, N("Ok"));
-
- my %userData = $self->_getUserInfo();
- # userData here should be tested because it could be undef
-
- # Useful entry point for the current edit user/group tab widget
- $self->set_edit_tab_widget( $self->_userDataTabWidget($dlg, $tabs{replace_pnt}, %userData) );
- $self->set_edit_tab_widget( edit_tab_label => $userEditLabel{user_data});
-
- while(1) {
- my $event = $dlg->waitForEvent();
- my $eventType = $event->eventType();
-
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::MenuEvent) {
- ### MENU ###
- my $item = $event->item();
- if ($item->label() eq $tabs{user_data}->label()) {
- %userData = $self->_storeDataFromUserEditPreviousTab(%userData);
- my %edit_tab = $self->_userDataTabWidget($dlg, $tabs{replace_pnt}, %userData );
- $self->edit_tab_widgets( {} );
- $self->set_edit_tab_widget(%edit_tab);
- $self->set_edit_tab_widget( edit_tab_label => $userEditLabel{user_data});
- }
- elsif ($item->label() eq $tabs{account_info}->label()) {
- %userData = $self->_storeDataFromUserEditPreviousTab(%userData);
- my %edit_tab = $self->_userAccountInfoTabWidget($dlg, $tabs{replace_pnt}, %userData );
- $self->edit_tab_widgets( {} );
- $self->set_edit_tab_widget(%edit_tab);
- $self->set_edit_tab_widget( edit_tab_label => $userEditLabel{account_info});
- }
- elsif ($item->label() eq $tabs{password_info}->label()) {
- %userData = $self->_storeDataFromUserEditPreviousTab(%userData);
- my %edit_tab = $self->_userPasswordInfoTabWidget($dlg, $tabs{replace_pnt}, %userData );
- $self->edit_tab_widgets( {} );
- $self->set_edit_tab_widget(%edit_tab);
- $self->set_edit_tab_widget( edit_tab_label => $userEditLabel{password_info});
- }
- elsif ($item->label() eq $tabs{groups}->label()) {
- %userData = $self->_storeDataFromUserEditPreviousTab(%userData);
- my %edit_tab = $self->_userGroupsTabWidget($dlg, $tabs{replace_pnt}, %userData );
- $self->edit_tab_widgets( {} );
- $self->set_edit_tab_widget(%edit_tab);
- $self->set_edit_tab_widget( edit_tab_label => $userEditLabel{groups});
- }
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- ### widget
- my $widget = $event->widget();
- if ($widget == $cancelButton) {
- last;
- }
- elsif ($widget == $okButton) {
- ## save changes
- if ($self->_userEdit_Ok(%userData)) {
- last;
- }
- }
-# last: managing tab widget events
- else {
- my $current_tab = $self->get_edit_tab_widget('edit_tab_label');
- if ($current_tab && $current_tab eq $userEditLabel{account_info}) {
- if ($widget == $self->get_edit_tab_widget('icon_face')) {
- my $iconLabel = $self->_skipShortcut($self->get_edit_tab_widget('icon_face')->label());
- my $nextIcon = GetFaceIcon($iconLabel, 1);
- $self->get_edit_tab_widget('icon_face')->setLabel($nextIcon);
- $self->get_edit_tab_widget('icon_face')->setIcon(AdminPanel::Users::users::face2png($nextIcon));
- }
- }
- elsif ($current_tab && $current_tab eq $userEditLabel{groups}) {
- if ($widget == $self->get_edit_tab_widget('members')) {
- my $item = $self->get_edit_tab_widget('members')->changedItem();
- if ($item) {
- if ($item->checked()) {
- # add it to possible primary groups
- my $pgItem = new yui::YItem ($item->label(), 0);
- $self->get_edit_tab_widget('primary_group')->addItem($pgItem);
- }
- else {
- # remove it to possible primary groups
- $dlg->startMultipleChanges();
- my $itemColl = new yui::YItemCollection;
- my $tbl = $self->get_edit_tab_widget('members');
- for(my $i=0;$i < $tbl->itemsCount();$i++) {
- if ($tbl->toCBYTableItem($tbl->item($i))->checked()) {
- my $pgItem = new yui::YItem ($tbl->item($i)->label(), 0);
- my $Gent = $self->ctx->LookupGroupById($userData{primary_group});
- my $primgroup = $Gent->GroupName($self->USER_GetValue);
- $pgItem->setSelected(1) if ($pgItem->label() eq $primgroup);
-
- $itemColl->push($pgItem);
- $pgItem->DISOWN();
- }
- }
- $self->get_edit_tab_widget('primary_group')->deleteAllItems();
- $self->get_edit_tab_widget('primary_group')->addItems($itemColl);
- $dlg->recalcLayout();
- $dlg->doneMultipleChanges();
- }
- }
- }
- }
- }
- }
- }
-
- }
- else {
- AdminPanel::Shared::warningMsgBox(N("Cannot create tab widgets"));
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-
-}
-
-sub _editGroupDialog {
- my $self = shift;
-
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle(N("Edit Group"));
-
- my $factory = yui::YUI::widgetFactory;
- my $optional = yui::YUI::optionalWidgetFactory;
-
- my $dlg = $factory->createPopupDialog();
- my $layout = $factory->createVBox($dlg);
-
- my %tabs;
- if ($optional->hasDumbTab()) {
- my $hbox = $factory->createHBox($layout);
- my $align = $factory->createHCenter($hbox);
- $tabs{widget} = $optional->createDumbTab($align);
-
- $tabs{group_data} = new yui::YItem($groupEditLabel{group_data});
- $tabs{group_data}->setSelected();
- $tabs{widget}->addItem( $tabs{group_data} );
- $tabs{group_data}->DISOWN();
-
- $tabs{group_users} = new yui::YItem($groupEditLabel{group_users});
- $tabs{widget}->addItem( $tabs{group_users} );
- $tabs{group_users}->DISOWN();
-
- my $vbox = $factory->createVBox($tabs{widget});
- $align = $factory->createLeft($vbox);
- $tabs{replace_pnt} = $factory->createReplacePoint($align);
-
- $hbox = $factory->createHBox($vbox);
- $align = $factory->createRight($hbox);
- my $cancelButton = $factory->createPushButton($align, N("Cancel"));
- my $okButton = $factory->createPushButton($hbox, N("Ok"));
-
- my %groupData = $self->_getGroupInfo();
- # groupData here should be tested because it could be undef
-
-# %groupData: selected group info as:
-# $groupname: group name
-# $members: users that are members of this group
-
-
- # Useful entry point for the current edit user/group tab widget
- $self->set_edit_tab_widget( $self->_groupDataTabWidget($dlg, $tabs{replace_pnt}, %groupData) );
- $self->set_edit_tab_widget( edit_tab_label => $groupEditLabel{group_data});
-
- while(1) {
- my $event = $dlg->waitForEvent();
- my $eventType = $event->eventType();
-
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::MenuEvent) {
- ### MENU ###
- my $item = $event->item();
- if ($item->label() eq $tabs{group_data}->label()) {
- %groupData = $self->_storeDataFromGroupEditPreviousTab(%groupData);
- my %edit_tab = $self->_groupDataTabWidget($dlg, $tabs{replace_pnt}, %groupData );
- $self->edit_tab_widgets( {} );
- $self->set_edit_tab_widget(%edit_tab);
- $self->set_edit_tab_widget( edit_tab_label => $groupEditLabel{group_data});
- }
- elsif ($item->label() eq $tabs{group_users}->label()) {
- %groupData = $self->_storeDataFromGroupEditPreviousTab(%groupData);
- my %edit_tab = $self->_groupUsersTabWidget($dlg, $tabs{replace_pnt}, %groupData );
- $self->edit_tab_widgets( {} );
- $self->set_edit_tab_widget(%edit_tab);
- $self->set_edit_tab_widget( edit_tab_label => $groupEditLabel{group_users});
- }
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
- ### widget
- my $widget = $event->widget();
- if ($widget == $cancelButton) {
- last;
- }
- elsif ($widget == $okButton) {
- ## save changes
- if ($self->_groupEdit_Ok(%groupData)) {
- last;
- }
- }
- }
- }
-
- }
- else {
- AdminPanel::Shared::warningMsgBox(N("Cannot create tab widgets"));
- }
-
- destroy $dlg;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle);
-
-}
-
-sub _editUserOrGroup {
- my $self = shift;
-
- # TODO item management avoid label if possible
- my $label = $self->_skipShortcut($self->get_widget('tabs')->selectedItem()->label());
- if ($label eq N("Users") ) {
- $self->_editUserDialog();
- }
- else {
- $self->_editGroupDialog();
- }
- $self->_refresh();
-}
-
-
-sub _deleteUserOrGroup {
- my $self = shift;
-
- # TODO item management avoid label if possible
- my $label = $self->_skipShortcut($self->get_widget('tabs')->selectedItem()->label());
- if ($label eq N("Users") ) {
- $self->_deleteUserDialog();
- $self->_refresh();
- }
- else {
- $self->_deleteGroupDialog();
- $self->_refresh();
- }
-}
-
-
-sub _refresh {
- my $self = shift;
-
- # TODO item management avoid label if possible
- my $label = $self->_skipShortcut($self->get_widget('tabs')->selectedItem()->label());
- if ($label eq N("Users") ) {
- $self->_refreshUsers();
- }
- else {
- $self->_refreshGroups();
- }
-# TODO xguest
-# RefreshXguest(1);
-}
-
-# TODO context menu creation is missed in libyui
-sub _contextMenuActions {
- my $self = shift;
-
- my $item = $self->get_widget('table')->selectedItem();
- if ($item) {
- }
-}
-
-sub _refreshActions {
- my $self = shift;
-
- my $item = $self->get_widget('table')->selectedItem();
- $self->dialog->startMultipleChanges();
- $self->get_widget('action_menu')->deleteAllItems();
-
- # do we need to undef them first?
- $self->set_action_menu(
- add_user => undef,
- add_group => undef,
- edit => undef,
- del => undef,
- inst => undef,
- );
- $self->set_action_menu(
- add_user => new yui::YMenuItem(N("Add User")),
- add_group => new yui::YMenuItem(N("Add Group")),
- edit => new yui::YMenuItem(N("&Edit")),
- del => new yui::YMenuItem(N("&Delete")),
- inst => new yui::YMenuItem(N("Install guest account")),
- );
-
- my $itemColl = new yui::YItemCollection;
- for my $pair ( $self->action_menu_pairs ) {
- my $menuItem = $pair->[1];
- if ($pair->[0] eq 'edit' || $pair->[0] eq 'del') {
- if ($item) {
- $itemColl->push($menuItem);
- }
- }
- else {
- $itemColl->push($menuItem);
- }
- $menuItem->DISOWN();
- }
- $self->get_widget('action_menu')->addItems($itemColl);
- $self->get_widget('action_menu')->rebuildMenuTree();
- if ($item) {
- $self->get_widget('edit')->setEnabled();
- $self->get_widget('del')->setEnabled();
- }
- else {
- $self->get_widget('edit')->setDisabled();
- $self->get_widget('del')->setDisabled();
- }
-
- $self->dialog->doneMultipleChanges();
-}
-
-
-sub manageUsersDialog {
- my $self = shift;
-
- ## TODO fix for adminpanel
- my $pixdir = '/usr/share/userdrake/pixmaps/';
- ## push application title
- my $appTitle = yui::YUI::app()->applicationTitle();
-
- ## set new title to get it in dialog
- yui::YUI::app()->setApplicationTitle($self->name);
- ## set icon if not already set by external launcher
- yui::YUI::app()->setApplicationIcon($self->icon);
-
-
- my $factory = yui::YUI::widgetFactory;
- my $optional = yui::YUI::optionalWidgetFactory;
-
-
- $self->dialog($factory->createMainDialog());
- my $layout = $factory->createVBox($self->dialog);
-
- my $hbox_headbar = $factory->createHBox($layout);
- my $head_align_left = $factory->createLeft($hbox_headbar);
- my $head_align_right = $factory->createRight($hbox_headbar);
- my $headbar = $factory->createHBox($head_align_left);
- my $headRight = $factory->createHBox($head_align_right);
-
- my %fileMenu = (
- widget => $factory->createMenuButton($headbar,N("File")),
- refresh => new yui::YMenuItem(N("Refresh")),
- quit => new yui::YMenuItem(N("&Quit")),
- );
-
- $fileMenu{ widget }->addItem($fileMenu{ refresh });
- $fileMenu{ widget }->addItem($fileMenu{ quit });
- $fileMenu{ widget }->rebuildMenuTree();
-
- my $actionMenu = $factory->createMenuButton($headbar, N("Actions"));
- $actionMenu->DISOWN();
-
- my %helpMenu = (
- widget => $factory->createMenuButton($headRight, N("&Help")),
- help => new yui::YMenuItem(N("Help")),
- report_bug => new yui::YMenuItem(N("Report Bug")),
- about => new yui::YMenuItem(N("&About")),
- );
-
- while ( my ($key, $value) = each(%helpMenu) ) {
- if ($key ne 'widget' ) {
- $helpMenu{ widget }->addItem($value);
- }
- }
- $helpMenu{ widget }->rebuildMenuTree();
-
- my $hbox = $factory->createHBox($layout);
- $hbox = $factory->createHBox($factory->createLeft($hbox));
- $self->set_widget(
- add_user => $factory->createIconButton($hbox, $pixdir . 'user_add.png', N("Add User")),
- add_group => $factory->createIconButton($hbox, $pixdir . 'group_add.png', N("Add Group")),
- edit => $factory->createIconButton($hbox, $pixdir . 'user_conf.png', N("Edit")),
- del => $factory->createIconButton($hbox, $pixdir . 'user_del.png', N("Delete")),
- refresh => $factory->createIconButton($hbox, $pixdir . 'refresh.png', N("Refresh")),
- action_menu => $actionMenu,
- );
-
-
- $hbox = $factory->createHBox($layout);
- $head_align_left = $factory->createLeft($hbox);
- $self->set_widget(filter_system => $factory->createCheckBox($head_align_left, N("Filter system users"), 1));
- $factory->createHSpacing($hbox, 3);
- $head_align_right = $factory->createRight($hbox);
- $headRight = $factory->createHBox($head_align_right);
- $factory->createLabel($headRight, N("Search:"));
- $self->set_widget(filter => $factory->createInputField($headRight, "", 0));
- $self->set_widget(apply_filter => $factory->createPushButton($headRight, N("Apply filter")));
- $self->get_widget('filter')->setWeight($yui::YD_HORIZ, 2);
- $self->get_widget('apply_filter')->setWeight($yui::YD_HORIZ, 1);
- $self->get_widget('filter_system')->setNotify(1);
-
- my %tabs;
- if ($optional->hasDumbTab()) {
- $hbox = $factory->createHBox($layout);
- my $align = $factory->createHCenter($hbox);
- $self->set_widget(tabs => $optional->createDumbTab($align));
- $tabs{users} = new yui::YItem(N("Users"));
- $tabs{users}->setSelected();
- $self->get_widget('tabs')->addItem( $tabs{users} );
- $tabs{users}->DISOWN();
- $tabs{groups} = new yui::YItem(N("Groups"));
- $self->get_widget('tabs')->addItem( $tabs{groups} );
- $tabs{groups}->DISOWN();
- my $vbox = $factory->createVBox($self->get_widget('tabs'));
- $align = $factory->createLeft($vbox);
- $self->set_widget(replace_pnt => $factory->createReplacePoint($align));
- $self->_createUserTable();
- $self->get_widget('table')->setImmediateMode(1);
- $self->get_widget('table')->DISOWN();
- }
-
- $self->_refreshActions();
-
- # main loop
- while(1) {
- my $event = $self->dialog->waitForEvent();
- my $eventType = $event->eventType();
-
- #event type checking
- if ($eventType == $yui::YEvent::CancelEvent) {
- last;
- }
- elsif ($eventType == $yui::YEvent::MenuEvent) {
-### MENU ###
- my $item = $event->item();
- my $menuLabel = $item->label();
- if ($menuLabel eq $fileMenu{ quit }->label()) {
- last;
- }
- elsif ($menuLabel eq $helpMenu{about}->label()) {
- my $license = translate($AdminPanel::Shared::License);
- AboutDialog({ name => N("AdminUser"),
- version => $self->VERSION,
- copyright => N("Copyright (C) %s Mageia community", '2013-2014'),
- license => $license,
- comments => N("AdminUser is a Mageia user management tool \n(from the original idea of Mandriva userdrake)."),
- website => 'http://www.mageia.org',
- website_label => N("Mageia"),
- authors => "Angelo Naselli <anaselli\@linux.it>\nMatteo Pasotti <matteo.pasotti\@gmail.com>",
- translator_credits =>
- #-PO: put here name(s) and email(s) of translator(s) (eg: "John Smith <jsmith@nowhere.com>")
- N("_: Translator(s) name(s) & email(s)\n")}
- );
- }
- elsif ($menuLabel eq $self->get_action_menu('add_user')->label()) {
- $self->addUserDialog();
- $self->_refresh();
- }
- elsif ($menuLabel eq $self->get_action_menu('add_group')->label()) {
- $self->_addGroupDialog();
- $self->_refresh();
- }
- elsif ($menuLabel eq $self->get_action_menu('del')->label()) {
- $self->_deleteUserOrGroup();
- }
- elsif ($menuLabel eq $self->get_action_menu('edit')->label()) {
- $self->_editUserOrGroup();
- }
- elsif ($self->get_widget('tabs') && $menuLabel eq $tabs{groups}->label()) {
- $self->_createGroupTable();
- }
- elsif ($self->get_widget('tabs') && $menuLabel eq $tabs{users}->label()) {
- $self->_createUserTable();
- }
- elsif ($menuLabel eq $fileMenu{refresh}->label()) {
- $self->_refresh();
- }
- }
- elsif ($eventType == $yui::YEvent::WidgetEvent) {
-### Buttons and widgets ###
- my $widget = $event->widget();
- if ($widget == $self->get_widget('add_user')) {
- $self->addUserDialog();
- $self->_refresh();
- }
- elsif ($widget == $self->get_widget('del')) {
- $self->_deleteUserOrGroup();
- }
- elsif ($widget == $self->get_widget('table')) {
- $self->_refreshActions();
- my $wEvent = yui::YMGAWidgetFactory::getYWidgetEvent($event);
- if ($wEvent && $wEvent->reason() == $yui::YEvent::Activated) {
- $self->_editUserOrGroup();
- }
- }
- elsif ($widget == $self->get_widget('add_group')) {
- $self->_addGroupDialog();
- $self->_refresh();
- }
- elsif ($widget == $self->get_widget('edit')) {
- $self->_editUserOrGroup();
- }
- elsif ( $widget == $self->get_widget('filter_system') ||
- $widget == $self->get_widget('refresh') ||
- $widget == $self->get_widget('apply_filter') ) {
- $self->_refresh();
- }
- }
- }
-
- $self->dialog->destroy() ;
-
- #restore old application title
- yui::YUI::app()->setApplicationTitle($appTitle) if $appTitle;
-}
-
-#=============================================================
-
-=head2 _skipShortcut
-
-=head3 INPUT
-
- $self: this object
- $label: an item label to be cleaned by keyboard shortcut "&"
-
-=head3 OUTPUT
-
- $label: cleaned label
-
-=head3 DESCRIPTION
-
- This internal method is a workaround to label that are
- changed by "&" due to keyborad shortcut.
-
-=cut
-
-#=============================================================
-sub _skipShortcut {
- my ($self, $label) = @_;
-
- $label =~ s/&// if ($label);
-
- return ($label);
-}
-
-#=============================================================
-
-=head2 _inArray
-
-=head3 INPUT
-
- $self: this object
- $item: item to search
- $arr: array container
-
-=head3 OUTPUT
-
- true: if the array contains the item
-
-=head3 DESCRIPTION
-
-This method returns if an item is into the array container
-
-=cut
-
-#=============================================================
-sub _inArray {
- my ($self, $item, $arr) = @_;
-
- return grep( /^$item$/, @$arr );
-}
-
-
-sub ValidInt {
- foreach my $i (@_) { $i =~ /\d+/ or return 0 }
- return 1;
-}
-
-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);
- $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);
- my $_t = localtime($reltime * 24 * 60 * 60) =~ /(\S+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\d+)/;
- $h->{daystr} = $1;
- $h->{month} = $2;
- $h->{dayint} = $3;
- $h->{year} = $5;
- $cm and $h->{month} = $mth{$2};
- $h;
-}
-
-
-no Moose;
-__PACKAGE__->meta->make_immutable;
-
-1;