162 lines
4.6 KiB
Perl
162 lines
4.6 KiB
Perl
# --
|
|
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
|
|
# --
|
|
# 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 https://www.gnu.org/licenses/gpl-3.0.txt.
|
|
# --
|
|
|
|
package Kernel::Modules::AgentITSMCABMemberSearch;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
our $ObjectManagerDisabled = 1;
|
|
|
|
sub new {
|
|
my ( $Type, %Param ) = @_;
|
|
|
|
# allocate new hash for object
|
|
my $Self = {%Param};
|
|
bless( $Self, $Type );
|
|
|
|
return $Self;
|
|
}
|
|
|
|
sub Run {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
my $JSON = '';
|
|
|
|
# get layout object
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
|
|
# search for possible CAB members
|
|
if ( !$Self->{Subaction} ) {
|
|
|
|
# get param object
|
|
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
|
|
|
# get needed params
|
|
my $Search = $ParamObject->GetParam( Param => 'Term' ) || '';
|
|
my $Groups = $ParamObject->GetParam( Param => 'Groups' ) || '';
|
|
|
|
# get all members of the groups
|
|
my %GroupUsers;
|
|
if ($Groups) {
|
|
my @GroupNames = split /,\s+/, $Groups;
|
|
|
|
for my $GroupName (@GroupNames) {
|
|
|
|
# get group object
|
|
my $GroupObject = $Kernel::OM->Get('Kernel::System::Group');
|
|
|
|
my $GroupID = $GroupObject->GroupLookup(
|
|
Group => $GroupName,
|
|
);
|
|
|
|
# get user groups
|
|
my %Users = $GroupObject->GroupMemberList(
|
|
GroupID => $GroupID,
|
|
Type => 'ro',
|
|
Result => 'HASH',
|
|
Cached => 1,
|
|
);
|
|
|
|
my @UserIDs = keys %Users;
|
|
@GroupUsers{@UserIDs} = @UserIDs;
|
|
}
|
|
}
|
|
|
|
# get user object
|
|
my $UserObject = $Kernel::OM->Get('Kernel::System::User');
|
|
|
|
# get agent list
|
|
my %UserList = $UserObject->UserSearch(
|
|
Search => $Search,
|
|
Valid => 1,
|
|
);
|
|
|
|
# UserSearch() returns values with a trailing space, get rid of it
|
|
for my $Name ( values %UserList ) {
|
|
$Name =~ s{ \s+ \z }{}xms;
|
|
}
|
|
|
|
# the data that will be sent as response
|
|
my @Data;
|
|
|
|
USERID:
|
|
for my $UserID ( sort { $UserList{$a} cmp $UserList{$b} } keys %UserList ) {
|
|
|
|
# if groups are required and user is not member of one of the groups
|
|
# the skip the user
|
|
next USERID if $Groups && !$GroupUsers{$UserID};
|
|
|
|
# The values in %UserList are in the form: 'mm Max Mustermann'.
|
|
# So assemble a neater string for display.
|
|
# (Actually UserSearch() contains code for formating, but that is usually not called.)
|
|
my %User = $UserObject->GetUserData(
|
|
UserID => $UserID,
|
|
Valid => $Param{Valid},
|
|
);
|
|
my $UserValuePlain = sprintf '"%s" <%s>',
|
|
$User{UserFullname},
|
|
$User{UserEmail};
|
|
|
|
push @Data, {
|
|
UserKey => $UserID,
|
|
UserValue => $UserValuePlain,
|
|
UserType => 'CABAgents',
|
|
};
|
|
}
|
|
|
|
my $CustomerUserObject = $Kernel::OM->Get('Kernel::System::CustomerUser');
|
|
|
|
# get customer list
|
|
my %CustomerUserList = $CustomerUserObject->CustomerSearch(
|
|
Search => $Search,
|
|
Valid => 1,
|
|
);
|
|
|
|
CUSTOMERUSERLOGIN:
|
|
for my $CustomerUserLogin (
|
|
sort { $CustomerUserList{$a} cmp $CustomerUserList{$b} }
|
|
keys %CustomerUserList
|
|
)
|
|
{
|
|
|
|
# if groups are required and user is not member of one of the groups
|
|
# the skip the user
|
|
next USERID if $Groups && !$GroupUsers{$CustomerUserLogin};
|
|
|
|
my %CustomerUser = $CustomerUserObject->CustomerUserDataGet(
|
|
User => $CustomerUserLogin,
|
|
);
|
|
|
|
my $CustomerUserValuePlain = '"' . $CustomerUser{UserFullname} . '" <' . $CustomerUser{UserEmail} . '>';
|
|
|
|
push @Data, {
|
|
UserKey => $CustomerUserLogin,
|
|
UserValue => $CustomerUserValuePlain,
|
|
UserType => 'CABCustomers',
|
|
};
|
|
}
|
|
|
|
# build JSON output
|
|
$JSON = $LayoutObject->JSONEncode(
|
|
Data => \@Data,
|
|
);
|
|
}
|
|
|
|
# send JSON response
|
|
return $LayoutObject->Attachment(
|
|
ContentType => 'text/plain; charset=' . $LayoutObject->{Charset},
|
|
Content => $JSON || '',
|
|
Type => 'inline',
|
|
NoCache => 1,
|
|
);
|
|
|
|
}
|
|
|
|
1;
|