# --
# Kernel/Modules/AdminRoleUser.pm - to add/update/delete role <-> users
# Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/
# --
# $Id: AdminRoleUser.pm,v 1.10 2007/01/20 22:03:08 mh Exp $
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see http://www.gnu.org/licenses/gpl.txt.
# --
package Kernel::Modules::AdminRoleUser;
use strict;
use vars qw($VERSION);
$VERSION = '$Revision: 1.10 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
sub new {
my $Type = shift;
my %Param = @_;
# allocate new hash for object
my $Self = {};
bless ($Self, $Type);
# allocate new hash for objects
foreach (keys %Param) {
$Self->{$_} = $Param{$_};
}
# check all needed objects
foreach (qw(ParamObject DBObject QueueObject LayoutObject ConfigObject LogObject)) {
if (!$Self->{$_}) {
$Self->{LayoutObject}->FatalError(Message => "Got no $_!");
}
}
return $Self;
}
sub Run {
my $Self = shift;
my %Param = @_;
my $ID = $Self->{ParamObject}->GetParam(Param => 'ID') || '';
# user <-> role 1:n
if ($Self->{Subaction} eq 'User') {
my $Output = $Self->{LayoutObject}->Header();
$Output .= $Self->{LayoutObject}->NavigationBar();
# get user data
my %UserData = $Self->{UserObject}->GetUserData(UserID => $ID);
# get group data
my %RoleData = $Self->{GroupObject}->RoleList(Valid => 1);
# get role member
my %Member = $Self->{GroupObject}->GroupUserRoleMemberList(
UserID => $ID,
Result => 'HASH',
);
$Output .= $Self->MaskAdminUserGroupChangeForm(
Selected => \%Member,
Data => \%RoleData,
ID => $UserData{UserID},
Name => $UserData{UserLogin},
Type => 'User',
);
$Output .= $Self->{LayoutObject}->Footer();
return $Output;
}
# roles <-> user n:1
elsif ($Self->{Subaction} eq 'Role') {
my $Output = $Self->{LayoutObject}->Header();
$Output .= $Self->{LayoutObject}->NavigationBar();
# get user data
my %UserData = $Self->{UserObject}->UserList(Valid => 1);
foreach (keys %UserData) {
# get user data
my %User = $Self->{UserObject}->GetUserData(UserID => $_, Cached => 1);
if ($User{UserFirstname} && $User{UserLastname}) {
$UserData{$_} .= " ($User{UserFirstname} $User{UserLastname})";
}
}
# get group data
my %RoleData = $Self->{GroupObject}->RoleGet(ID => $ID);
# get role member
my %Member = $Self->{GroupObject}->GroupUserRoleMemberList(
RoleID => $ID,
Result => 'HASH',
);
$Output .= $Self->MaskAdminUserGroupChangeForm(
Selected => \%Member,
Data => \%UserData,
ID => $RoleData{ID},
Name => $RoleData{Name},
Type => 'Role',
);
$Output .= $Self->{LayoutObject}->Footer();
return $Output;
}
# add user to roles
elsif ($Self->{Subaction} eq 'ChangeRole') {
# get new role member
my @IDs = $Self->{ParamObject}->GetArray(Param => 'Role');
# get user list
my %UserData = $Self->{UserObject}->UserList(Valid => 1);
foreach my $UserID (keys %UserData) {
my $Active = 0;
foreach (@IDs) {
if ($_ eq $UserID) {
$Active = 1;
}
}
$Self->{GroupObject}->GroupUserRoleMemberAdd(
UID => $UserID,
RID => $ID,
Active => $Active,
UserID => $Self->{UserID},
);
}
return $Self->{LayoutObject}->Redirect(OP => "Action=AdminRoleUser&Subaction=Role&ID=$ID");
}
# roles to users
elsif ($Self->{Subaction} eq 'ChangeUser') {
# get new role member
my @IDs = $Self->{ParamObject}->GetArray(Param => 'User');
# get user list
my %RoleData = $Self->{GroupObject}->RoleList(Valid => 1);
foreach my $RoleID (keys %RoleData) {
my $Active = 0;
foreach (@IDs) {
if ($_ eq $RoleID) {
$Active = 1;
}
}
$Self->{GroupObject}->GroupUserRoleMemberAdd(
UID => $ID,
RID => $RoleID,
Active => $Active,
UserID => $Self->{UserID},
);
}
return $Self->{LayoutObject}->Redirect(OP => "Action=AdminRoleUser&Subaction=User&ID=$ID");
}
# else ! print form
else {
my $Output = $Self->{LayoutObject}->Header();
$Output .= $Self->{LayoutObject}->NavigationBar();
# get user data
my %UserData = $Self->{UserObject}->UserList(Valid => 1);
foreach (keys %UserData) {
# get user data
my %User = $Self->{UserObject}->GetUserData(UserID => $_, Cached => 1);
if ($User{UserFirstname} && $User{UserLastname}) {
$UserData{$_} .= " ($User{UserFirstname} $User{UserLastname})";
}
}
# get group data
my %RoleData = $Self->{GroupObject}->RoleList(Valid => 1);
$Output .= $Self->MaskAdminUserGroupForm(
RoleData => \%RoleData,
UserData => \%UserData,
);
$Output .= $Self->{LayoutObject}->Footer();
return $Output;
}
}
sub MaskAdminUserGroupChangeForm {
my $Self = shift;
my %Param = @_;
my %Data = %{$Param{Data}};
my $Type = $Param{Type} || 'User';
my $NeType = 'Role';
$NeType = 'User' if ($Type eq 'Role');
foreach (sort {uc($Data{$a}) cmp uc($Data{$b})} keys %Data) {
# input box
my $Selected = '';
if ($Param{Selected}->{$_}) {
$Selected = ' checked';
}
my $Input = '";
$Self->{LayoutObject}->Block(
Name => 'Row',
Data => {
Name => $Param{Data}->{$_},
InputBox => $Input,
Type => $Type,
NeType => $NeType,
ID => $_,
},
);
}
return $Self->{LayoutObject}->Output(
TemplateFile => 'AdminRoleUserChangeForm',
Data => {%Param, NeType => $NeType},
);
}
sub MaskAdminUserGroupForm {
my $Self = shift;
my %Param = @_;
my $UserData = $Param{UserData};
my %UserDataTmp = %$UserData;
my $GroupData = $Param{RoleData};
my %GroupDataTmp = %$GroupData;
my $BaseLink = $Self->{LayoutObject}->{Baselink} . "Action=AdminRoleUser&";
foreach (sort {uc($UserDataTmp{$a}) cmp uc($UserDataTmp{$b})} keys %UserDataTmp) {
$UserDataTmp{$_} = $Self->{LayoutObject}->Ascii2Html(
Text => $UserDataTmp{$_},
HTMLQuote => 1,
LanguageTranslation => 0,
) || '';
$Param{UserStrg} .= "$UserDataTmp{$_} ";
}
foreach (sort {uc($GroupDataTmp{$a}) cmp uc($GroupDataTmp{$b})} keys %GroupDataTmp) {
$GroupDataTmp{$_} = $Self->{LayoutObject}->Ascii2Html(
Text => $GroupDataTmp{$_},
HTMLQuote => 1,
LanguageTranslation => 0,
) || '';
$Param{RoleStrg} .= "$GroupDataTmp{$_} ";
}
# return output
return $Self->{LayoutObject}->Output(
TemplateFile => 'AdminRoleUserForm',
Data => \%Param,
);
}
1;