Files
scripts/Perl OTRS/Kernel/Modules/AgentITSMCABMemberSearch.pm
2024-10-14 00:08:40 +02:00

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;