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

139 lines
3.7 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::AgentITSMUserSearch;
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 users
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' ) || '';
my $MaxResults = int( $ParamObject->GetParam( Param => 'MaxResults' ) || 20 );
# get all members of the groups
my %GroupUsers;
if ($Groups) {
my @GroupNames = split /,\s+/, $Groups;
GROUPNAME:
for my $GroupName (@GroupNames) {
# allow trailing comma
next GROUPNAME if !$GroupName;
# get group object
my $GroupObject = $Kernel::OM->Get('Kernel::System::Group');
my $GroupID = $GroupObject->GroupLookup(
Group => $GroupName,
);
next GROUPNAME if !$GroupID;
# get users in group
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 user list
my %UserList = $UserObject->UserSearch(
Search => $Search,
Valid => 1,
);
my $MaxResultCount = $MaxResults;
# 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
# then skip the user
if ( $Groups && !$GroupUsers{$UserID} ) {
next 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 $UserValue = sprintf '"%s" <%s>',
$User{UserFullname},
$User{UserEmail};
push @Data, {
UserKey => $UserID,
UserValue => $UserValue,
};
$MaxResultCount--;
last USERID if $MaxResultCount <= 0;
}
# build JSON output
$JSON = $LayoutObject->JSONEncode(
Data => \@Data,
);
}
# send JSON response
return $LayoutObject->Attachment(
ContentType => 'application/json; charset=' . $LayoutObject->{Charset},
Content => $JSON || '',
Type => 'inline',
NoCache => 1,
);
}
1;