# -- # 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;