141 lines
3.8 KiB
Perl
141 lines
3.8 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::AgentUserSearch;
|
|
|
|
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 needed objects
|
|
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
|
|
# get config for frontend
|
|
$Self->{Config} = $Kernel::OM->Get('Kernel::Config')->Get("Ticket::Frontend::$Self->{Action}");
|
|
|
|
# search users
|
|
if ( !$Self->{Subaction} ) {
|
|
|
|
# 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->PermissionGroupGet(
|
|
GroupID => $GroupID,
|
|
Type => 'ro',
|
|
);
|
|
|
|
my @UserIDs = keys %Users;
|
|
@GroupUsers{@UserIDs} = @UserIDs;
|
|
}
|
|
}
|
|
|
|
# get encode object
|
|
my $EncodeObject = $Kernel::OM->Get('Kernel::System::Encode');
|
|
|
|
# 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" <%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 => 'text/plain; charset=' . $LayoutObject->{Charset},
|
|
Content => $JSON || '',
|
|
Type => 'inline',
|
|
NoCache => 1,
|
|
);
|
|
|
|
}
|
|
|
|
1;
|