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