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

288 lines
9.0 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::AgentTicketCustomer;
use strict;
use warnings;
use Kernel::Language qw(Translatable);
our $ObjectManagerDisabled = 1;
use Kernel::System::VariableCheck qw(:all);
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {%Param};
bless( $Self, $Type );
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
my $Output;
# get layout object
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
# check needed stuff
if ( !$Self->{TicketID} ) {
# error page
return $LayoutObject->ErrorScreen(
Message => Translatable('No TicketID is given!'),
Comment => Translatable('Please contact the administrator.'),
);
}
# get ticket object
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
# get config
my $Config = $Kernel::OM->Get('Kernel::Config')->Get("Ticket::Frontend::$Self->{Action}");
# check permissions
if (
!$TicketObject->TicketPermission(
Type => $Config->{Permission},
TicketID => $Self->{TicketID},
UserID => $Self->{UserID}
)
)
{
# error screen, don't show ticket
return $LayoutObject->NoPermission(
Message => $LayoutObject->{LanguageObject}->Translate( 'You need %s permissions!', $Config->{Permission} ),
WithHeader => 'yes',
);
}
# get ACL restrictions
my %PossibleActions = ( 1 => $Self->{Action} );
my $ACL = $TicketObject->TicketAcl(
Data => \%PossibleActions,
Action => $Self->{Action},
TicketID => $Self->{TicketID},
ReturnType => 'Action',
ReturnSubType => '-',
UserID => $Self->{UserID},
);
my %AclAction = $TicketObject->TicketAclActionData();
# check if ACL restrictions exist
if ( $ACL || IsHashRefWithData( \%AclAction ) ) {
my %AclActionLookup = reverse %AclAction;
# show error screen if ACL prohibits this action
if ( !$AclActionLookup{ $Self->{Action} } ) {
return $LayoutObject->NoPermission( WithHeader => 'yes' );
}
}
# get param object
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
if ( $Self->{Subaction} eq 'Update' ) {
# challenge token check for write action
$LayoutObject->ChallengeTokenCheck();
# set customer id
my $ExpandCustomerName1 = $ParamObject->GetParam( Param => 'ExpandCustomerName1' )
|| 0;
my $ExpandCustomerName2 = $ParamObject->GetParam( Param => 'ExpandCustomerName2' )
|| 0;
my $CustomerUserOption = $ParamObject->GetParam( Param => 'CustomerUserOption' )
|| '';
$Param{CustomerUserID} = $ParamObject->GetParam( Param => 'CustomerUserID' ) || '';
$Param{CustomerID} = $ParamObject->GetParam( Param => 'CustomerID' ) || '';
$Param{SelectedCustomerUser} = $ParamObject->GetParam( Param => 'SelectedCustomerUser' ) || '';
# use customer login instead of email address if applicable
if ( $Param{SelectedCustomerUser} ne '' ) {
$Param{CustomerUserID} = $Param{SelectedCustomerUser};
}
# get customer user object
my $CustomerUserObject = $Kernel::OM->Get('Kernel::System::CustomerUser');
# Expand Customer Name
if ($ExpandCustomerName1) {
# search customer
my %CustomerUserList = ();
%CustomerUserList = $CustomerUserObject->CustomerSearch(
Search => $Param{CustomerUserID},
);
# check if just one customer user exists
# if just one, fillup CustomerUserID and CustomerID
$Param{CustomerUserListCount} = 0;
for my $KeyCustomerUser ( sort keys %CustomerUserList ) {
$Param{CustomerUserListCount}++;
$Param{CustomerUserListLast} = $CustomerUserList{$KeyCustomerUser};
$Param{CustomerUserListLastUser} = $KeyCustomerUser;
}
if ( $Param{CustomerUserListCount} == 1 ) {
$Param{CustomerUserID} = $Param{CustomerUserListLastUser};
my %CustomerUserData = $CustomerUserObject->CustomerUserDataGet(
User => $Param{CustomerUserListLastUser},
);
if ( $CustomerUserData{UserCustomerID} ) {
$Param{CustomerID} = $CustomerUserData{UserCustomerID};
}
}
# if more the one customer user exists, show list
# and clean CustomerID
else {
$Param{CustomerID} = '';
$Param{"CustomerUserOptions"} = \%CustomerUserList;
}
return $Self->Form(%Param);
}
# get customer user and customer id
elsif ($ExpandCustomerName2) {
my %CustomerUserData = $CustomerUserObject->CustomerUserDataGet(
User => $CustomerUserOption,
);
my %CustomerUserList = $CustomerUserObject->CustomerSearch(
UserLogin => $CustomerUserOption,
);
for my $KeyCustomerUser ( sort keys %CustomerUserList ) {
$Param{CustomerUserID} = $KeyCustomerUser;
}
if ( $CustomerUserData{UserCustomerID} ) {
$Param{CustomerID} = $CustomerUserData{UserCustomerID};
}
return $Self->Form(%Param);
}
my %Error;
# check needed data
if ( !$Param{CustomerUserID} ) {
$Error{'CustomerUserIDInvalid'} = 'ServerError';
}
if (%Error) {
return $Self->Form( %Param, %Error );
}
# update customer user data
if (
$TicketObject->TicketCustomerSet(
TicketID => $Self->{TicketID},
No => $Param{CustomerID},
User => $Param{CustomerUserID},
UserID => $Self->{UserID},
)
)
{
# redirect
return $LayoutObject->PopupClose(
URL => "Action=AgentTicketZoom;TicketID=$Self->{TicketID}",
);
}
else {
# error?!
return $LayoutObject->ErrorScreen();
}
}
# show form
else {
return $Self->Form(%Param);
}
}
sub Form {
my ( $Self, %Param ) = @_;
my $Output;
# get layout object
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
# print header
$Output .= $LayoutObject->Header(
Type => 'Small',
);
my $TicketCustomerID = $Kernel::OM->Get('Kernel::System::Web::Request')->GetParam( Param => 'CustomerID' ) || '';
# print change form if ticket id is given
my %CustomerUserData = ();
if ( $Self->{TicketID} ) {
# get config object
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
# set JS data
$LayoutObject->AddJSData(
Key => 'CustomerSearch',
Value => {
ShowCustomerTickets => $ConfigObject->Get('Ticket::Frontend::ShowCustomerTickets'),
},
);
# get ticket data
my %TicketData = $Kernel::OM->Get('Kernel::System::Ticket')->TicketGet( TicketID => $Self->{TicketID} );
if ( $TicketData{CustomerUserID} || $Param{CustomerUserID} ) {
%CustomerUserData = $Kernel::OM->Get('Kernel::System::CustomerUser')->CustomerUserDataGet(
User => $Param{CustomerUserID} || $TicketData{CustomerUserID},
);
}
if ( $CustomerUserData{UserTitle} ) {
$CustomerUserData{UserTitle} = $LayoutObject->{LanguageObject}->Translate( $CustomerUserData{UserTitle} );
}
$TicketCustomerID = $TicketData{CustomerID};
$Param{SelectedCustomerUser} = $TicketData{CustomerUserID};
$Param{Table} = $LayoutObject->AgentCustomerViewTable(
Data => \%CustomerUserData,
Ticket => \%TicketData,
Max => $Kernel::OM->Get('Kernel::Config')->Get('Ticket::Frontend::CustomerInfoComposeMaxSize'),
);
# show customer field as "FirstName Lastname" <MailAddress>
if (%CustomerUserData) {
$TicketData{CustomerUserID} = "\"$CustomerUserData{UserFullname} " . " <$CustomerUserData{UserEmail}>";
}
$LayoutObject->Block(
Name => 'Customer',
Data => { %TicketData, %Param, },
);
}
$Output
.= $LayoutObject->Output(
TemplateFile => 'AgentTicketCustomer',
Data => \%Param
);
$Output .= $LayoutObject->Footer(
Type => 'Small',
);
return $Output;
}
1;