init III
This commit is contained in:
161
Perl OTRS/Kernel/Modules/AgentITSMCABMemberSearch.pm
Normal file
161
Perl OTRS/Kernel/Modules/AgentITSMCABMemberSearch.pm
Normal file
@@ -0,0 +1,161 @@
|
||||
# --
|
||||
# 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;
|
||||
Reference in New Issue
Block a user