diff --git a/Kernel/Modules/AgentTicketEmailOutbound.pm b/Kernel/Modules/AgentTicketEmailOutbound.pm index 1a182bc371..f3950d95d8 100644 --- a/Kernel/Modules/AgentTicketEmailOutbound.pm +++ b/Kernel/Modules/AgentTicketEmailOutbound.pm @@ -19,6 +19,11 @@ package Kernel::Modules::AgentTicketEmailOutbound; use strict; use warnings; +# core modules + +# CPAN modules + +# OTOBO modules use Kernel::System::VariableCheck qw(:all); use Kernel::Language qw(Translatable); use Mail::Address; @@ -29,8 +34,7 @@ sub new { my ( $Type, %Param ) = @_; # allocate new hash for object - my $Self = {%Param}; - bless( $Self, $Type ); + my $Self = bless {%Param}, $Type; # Try to load draft if requested. if ( @@ -103,7 +107,7 @@ sub Run { my $Output; - # get ticket object + # get needed objects my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); # get ACL restrictions @@ -432,7 +436,6 @@ sub Form { # check needed stuff if ( !$Self->{TicketID} ) { - return $LayoutObject->ErrorScreen( Message => Translatable('Got no TicketID!'), Comment => Translatable('System Error!'), @@ -464,7 +467,6 @@ sub Form { # error screen, don't show ticket if ( !$Access ) { - return $LayoutObject->NoPermission( WithHeader => 'yes' ); } @@ -476,7 +478,6 @@ sub Form { my @MultipleCustomerBcc = @{ $GetParamExtended{MultipleCustomerBcc} }; # get lock state - my $Output = ''; if ( $Config->{RequiredLock} ) { if ( !$TicketObject->TicketLockGet( TicketID => $Self->{TicketID} ) ) { @@ -517,19 +518,18 @@ sub Form { OwnerID => $Self->{UserID}, ); if ( !$AccessOk ) { - my $Output = $LayoutObject->Header( - Type => 'Small', - BodyClass => 'Popup', - ); - $Output .= $LayoutObject->Warning( - Message => Translatable('Sorry, you need to be the ticket owner to perform this action.'), - Comment => Translatable('Please change the owner first.'), - ); - $Output .= $LayoutObject->Footer( - Type => 'Small', - ); - - return $Output; + return join '', + $LayoutObject->Header( + Type => 'Small', + BodyClass => 'Popup', + ), + $LayoutObject->Warning( + Message => Translatable('Sorry, you need to be the ticket owner to perform this action.'), + Comment => Translatable('Please change the owner first.'), + ), + $LayoutObject->Footer( + Type => 'Small', + ); } else { $LayoutObject->Block( @@ -552,9 +552,8 @@ sub Form { ); } + # Get selected or last customer article. my %Data; - - # Get selected article. if ( $GetParam{ArticleID} ) { my $ArticleBackendObject = $ArticleObject->BackendForArticle( TicketID => $Self->{TicketID}, @@ -574,11 +573,10 @@ sub Form { ); } } - - # Get the last customer article of the ticket. else { - my $ArticleObject = $Kernel::OM->Get('Kernel::System::Ticket::Article'); - my @MetaArticles = $ArticleObject->ArticleList( + + # Get last customer article. + my @MetaArticles = $ArticleObject->ArticleList( TicketID => $Self->{TicketID}, SenderType => 'customer', OnlyLast => 1, @@ -699,7 +697,6 @@ sub Form { # load module if ( !$Kernel::OM->Get('Kernel::System::Main')->Require( $Jobs{$Job}->{Module} ) ) { - return $LayoutObject->FatalError(); } my $Object = $Jobs{$Job}->{Module}->new( @@ -710,7 +707,6 @@ sub Form { # get params PARAMETER: for my $Parameter ( $Object->Option( %GetParam, Config => $Jobs{$Job} ) ) { - if ( $Jobs{$Job}->{ParamType} && $Jobs{$Job}->{ParamType} ne 'Single' ) { @{ $GetParam{$Parameter} } = $ParamObject->GetArray( Param => $Parameter ); next PARAMETER; @@ -741,8 +737,8 @@ sub Form { # cycle through the activated Dynamic Fields for this screen DYNAMICFIELD: - for my $DynamicFieldConfig ( @{ $Self->{DynamicField} } ) { - next DYNAMICFIELD if !IsHashRefWithData($DynamicFieldConfig); + for my $DynamicFieldConfig ( $Self->{DynamicField}->@* ) { + next DYNAMICFIELD unless IsHashRefWithData($DynamicFieldConfig); my $PossibleValuesFilter; @@ -787,16 +783,17 @@ sub Form { } $DynamicFieldPossibleValues{ 'DynamicField_' . $DynamicFieldConfig->{Name} } = $PossibleValuesFilter; - } - # grep dynamic field values from ticket data - my %DFValues - = map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } grep { $_->{ObjectType} eq 'Ticket' } $Self->{DynamicField}->@*; + # extract dynamic field values from ticket data + my %TicketDFValues = + map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } + grep { $_->{ObjectType} eq 'Ticket' } + $Self->{DynamicField}->@*; # build view ... # start with page ... - $Output .= $LayoutObject->Header( + my $Output = $LayoutObject->Header( Value => $Ticket{TicketNumber}, Type => 'Small', BodyClass => 'Popup', @@ -831,7 +828,7 @@ sub Form { %Data, %GetParam, DFPossibleValues => \%DynamicFieldPossibleValues, - DFValues => \%DFValues, + DFValues => \%TicketDFValues, ); $Output .= $LayoutObject->Footer( Type => 'Small', @@ -1076,7 +1073,7 @@ sub SendEmail { # get ticket object my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); - # prepare subject + # get information on the current ticket my %Ticket = $TicketObject->TicketGet( TicketID => $Self->{TicketID}, DynamicFields => 1, @@ -1152,7 +1149,6 @@ sub SendEmail { ); if ( !IsHashRefWithData($ValidationResult) ) { - return $LayoutObject->ErrorScreen( Message => $LayoutObject->{LanguageObject}->Translate( 'Could not perform validation on field %s!', $DynamicFieldConfig->{Label} ), @@ -1195,7 +1191,7 @@ sub SendEmail { $Error{ $Line . 'Invalid' } = 'ServerError'; } my $IsLocal = $Kernel::OM->Get('Kernel::System::SystemAddress')->SystemAddressIsLocalAddress( - Address => $Email->address() + Address => $Email->address(), ); if ($IsLocal) { $Error{ $Line . 'IsLocalAddress' } = 'ServerError'; @@ -1217,7 +1213,6 @@ sub SendEmail { # run compose modules my %ArticleParam; - if ( ref( $ConfigObject->Get('Ticket::Frontend::ArticleComposeModule') ) eq 'HASH' ) { my %Jobs = %{ $ConfigObject->Get('Ticket::Frontend::ArticleComposeModule') }; for my $Job ( sort keys %Jobs ) { @@ -1249,7 +1244,7 @@ sub SendEmail { $Object->Run( %GetParam, StoreNew => 1, - Config => $Jobs{$Job} + Config => $Jobs{$Job}, ); # get options that have been removed from the selection @@ -1274,22 +1269,36 @@ sub SendEmail { # ticket params %ArticleParam = ( %ArticleParam, - $Object->ArticleOption( %GetParam, %ArticleParam, Config => $Jobs{$Job} ), + $Object->ArticleOption( + %GetParam, + %ArticleParam, + Config => $Jobs{$Job}, + ), ); # get errors %Error = ( %Error, - $Object->Error( %GetParam, Config => $Jobs{$Job} ), + $Object->Error( + %GetParam, + Config => $Jobs{$Job}, + ), ); } } - # check if there is an error + # Check whether there is an error. + # An error is not necessarily bad, often it is just that a form draft has been loaded. if (%Error) { - my $QueueID = $TicketObject->TicketQueueID( TicketID => $Self->{TicketID} ); - my $Output = $LayoutObject->Header( + + # extract dynamic field values from ticket data + my %TicketDFValues = + map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } + grep { $_->{ObjectType} eq 'Ticket' } + $Self->{DynamicField}->@*; + + my $Output = $LayoutObject->Header( Type => 'Small', BodyClass => 'Popup', ); @@ -1323,10 +1332,12 @@ sub SendEmail { %GetParam, DFPossibleValues => \%DynamicFieldPossibleValues, DFErrors => \%DynamicFieldValidationResult, + DFValues => \%TicketDFValues, ); $Output .= $LayoutObject->Footer( Type => 'Small', ); + return $Output; } @@ -1354,7 +1365,6 @@ sub SendEmail { # remove unused inline images my @NewAttachmentData; - ATTACHMENT: for my $Attachment (@AttachmentData) { my $ContentID = $Attachment->{ContentID}; @@ -1384,7 +1394,6 @@ sub SendEmail { # send email my $To = ''; - KEY: for my $Key (qw(To Cc Bcc)) { next KEY if !$GetParam{$Key}; @@ -1428,7 +1437,6 @@ sub SendEmail { # error page if ( !$ArticleID ) { - return $LayoutObject->ErrorScreen( Comment => Translatable('Please contact the administrator.'), ); @@ -1556,13 +1564,12 @@ sub AjaxUpdate { my @ExtendedData; - # get config object + # get needed objects my $ConfigObject = $Kernel::OM->Get('Kernel::Config'); # run compose modules if ( ref $ConfigObject->Get('Ticket::Frontend::ArticleComposeModule') eq 'HASH' ) { my %Jobs = %{ $ConfigObject->Get('Ticket::Frontend::ArticleComposeModule') }; - JOB: for my $Job ( sort keys %Jobs ) { @@ -1608,8 +1615,7 @@ sub AjaxUpdate { my $Key = $Object->Option( %GetParam, Config => $Jobs{$Job} ); if ($Key) { - push( - @ExtendedData, + push @ExtendedData, { Name => $Key, Data => \%Data, @@ -1618,8 +1624,7 @@ sub AjaxUpdate { PossibleNone => 1, Multiple => $Multiple, Max => 100, - } - ); + }; } } } @@ -1666,6 +1671,9 @@ sub AjaxUpdate { # update Dynamic Fields Possible Values via AJAX my @DynamicFieldAJAX; + # get ticket object + my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); + # cycle through the activated Dynamic Fields for this screen DYNAMICFIELD: for my $DynamicFieldConfig ( @{ $Self->{DynamicField} } ) { @@ -1685,9 +1693,6 @@ sub AjaxUpdate { my %AclData = %{$PossibleValues}; @AclData{ keys %AclData } = keys %AclData; - # get ticket object - my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); - # set possible values filter from ACLs my $ACL = $TicketObject->TicketAcl( %GetParam, @@ -1714,16 +1719,14 @@ sub AjaxUpdate { ) || $PossibleValues; # add dynamic field to the list of fields to update - push( - @DynamicFieldAJAX, + push @DynamicFieldAJAX, { Name => 'DynamicField_' . $DynamicFieldConfig->{Name}, Data => $DataValues, SelectedID => $DynamicFieldValues{ $DynamicFieldConfig->{Name} }, Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0, Max => 100, - } - ); + }; } my $JSON = $LayoutObject->BuildSelectionJSON( @@ -1803,7 +1806,9 @@ sub _Mask { # prepare errors! if ( $Param{Errors} ) { for my $Error ( sort keys %{ $Param{Errors} } ) { - $Param{$Error} = $LayoutObject->Ascii2Html( Text => $Param{Errors}->{$Error} ); + $Param{$Error} = $LayoutObject->Ascii2Html( + Text => $Param{Errors}->{$Error}, + ); } } @@ -1958,8 +1963,6 @@ sub _Mask { ); } - my $DynamicFieldObject = $Kernel::OM->Get('Kernel::System::DynamicField'); - # render dynamic fields { my %DynamicFieldConfigs = map { $_->{Name} => $_ } $Self->{DynamicField}->@*; diff --git a/Kernel/Modules/AgentTicketForward.pm b/Kernel/Modules/AgentTicketForward.pm index 50298d356b..f7da863589 100644 --- a/Kernel/Modules/AgentTicketForward.pm +++ b/Kernel/Modules/AgentTicketForward.pm @@ -19,6 +19,11 @@ package Kernel::Modules::AgentTicketForward; use strict; use warnings; +# core modules + +# CPAN modules + +# OTOBO modules use Kernel::System::VariableCheck qw(:all); use Kernel::Language qw(Translatable); use Mail::Address; @@ -28,8 +33,8 @@ our $ObjectManagerDisabled = 1; sub new { my ( $Type, %Param ) = @_; - my $Self = {%Param}; - bless( $Self, $Type ); + # allocate new hash for object + my $Self = bless {%Param}, $Type; # Try to load draft if requested. if ( @@ -44,7 +49,7 @@ sub new { ); } - # frontend specific config + # get config for frontend module my $Config = $Kernel::OM->Get('Kernel::Config')->Get("Ticket::Frontend::$Self->{Action}"); my $DynamicFieldObject = $Kernel::OM->Get('Kernel::System::DynamicField'); @@ -194,6 +199,7 @@ sub Run { else { $Output = $Self->Form(); } + return $Output; } @@ -214,6 +220,7 @@ sub Form { ); } + # get needed objects my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); my $ArticleObject = $Kernel::OM->Get('Kernel::System::Ticket::Article'); @@ -249,7 +256,6 @@ sub Form { my @MultipleCustomerBcc = @{ $GetParamExtended{MultipleCustomerBcc} }; # get lock state - my $Output = ''; if ( $Config->{RequiredLock} ) { if ( !$TicketObject->TicketLockGet( TicketID => $Self->{TicketID} ) ) { @@ -279,7 +285,7 @@ sub Form { Name => 'PropertiesLock', Data => { %Param, - TicketID => $Self->{TicketID} + TicketID => $Self->{TicketID}, }, ); } @@ -290,18 +296,18 @@ sub Form { OwnerID => $Self->{UserID}, ); if ( !$AccessOk ) { - my $Output = $LayoutObject->Header( - Type => 'Small', - BodyClass => 'Popup', - ); - $Output .= $LayoutObject->Warning( - Message => Translatable('Sorry, you need to be the ticket owner to perform this action.'), - Comment => Translatable('Please change the owner first.'), - ); - $Output .= $LayoutObject->Footer( - Type => 'Small', - ); - return $Output; + return join '', + $LayoutObject->Header( + Type => 'Small', + BodyClass => 'Popup', + ), + $LayoutObject->Warning( + Message => Translatable('Sorry, you need to be the ticket owner to perform this action.'), + Comment => Translatable('Please change the owner first.'), + ), + $LayoutObject->Footer( + Type => 'Small', + ); } else { $LayoutObject->Block( @@ -557,9 +563,9 @@ sub Form { ); # check some values - for (qw(To Cc Bcc)) { - if ( $Data{$_} ) { - delete $Data{$_}; + for my $Recipient (qw(To Cc Bcc Subject)) { + if ( $Data{$Recipient} ) { + delete $Data{$Recipient}; } } @@ -618,19 +624,19 @@ sub Form { } } + # get dynamic field backend object + my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend'); + # remember dynamic field validation results if erroneous my %DynamicFieldPossibleValues; # cycle through the activated Dynamic Fields for this screen DYNAMICFIELD: for my $DynamicFieldConfig ( @{ $Self->{DynamicField} } ) { - next DYNAMICFIELD if !IsHashRefWithData($DynamicFieldConfig); + next DYNAMICFIELD unless IsHashRefWithData($DynamicFieldConfig); my $PossibleValuesFilter; - # get backend object - my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend'); - my $IsACLReducible = $DynamicFieldBackendObject->HasBehavior( DynamicFieldConfig => $DynamicFieldConfig, Behavior => 'IsACLReducible', @@ -672,12 +678,17 @@ sub Form { } $DynamicFieldPossibleValues{ 'DynamicField_' . $DynamicFieldConfig->{Name} } = $PossibleValuesFilter; - } + # extract dynamic field values from ticket data + my %TicketDFValues = + map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } + grep { $_->{ObjectType} eq 'Ticket' } + $Self->{DynamicField}->@*; + # build view ... # start with page ... - $Output .= $LayoutObject->Header( + my $Output = $LayoutObject->Header( Value => $Ticket{TicketNumber}, Type => 'Small', BodyClass => 'Popup', @@ -687,15 +698,12 @@ sub Form { my $References = defined $Data{References} ? $Data{References} . ' ' : ''; $References .= defined $Data{MessageID} ? $Data{MessageID} : ''; - # grep dynamic field values from ticket data - my %DFValues = map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } grep { $_->{ObjectType} eq 'Ticket' } $Self->{DynamicField}->@*; - $Output .= $Self->_Mask( TicketNumber => $Ticket{TicketNumber}, TicketID => $Self->{TicketID}, + Title => $Ticket{Title}, CustomerID => $Ticket{CustomerID}, CustomerUserID => $Ticket{CustomerUserID}, - Title => $Ticket{Title}, QueueID => $Ticket{QueueID}, SLAID => $Ticket{SLAID}, NextStates => $Self->_GetNextStates( @@ -717,7 +725,7 @@ sub Form { InReplyTo => $Data{MessageID}, References => $References, DFPossibleValues => \%DynamicFieldPossibleValues, - DFValues => \%DFValues, + DFValues => \%TicketDFValues, ); $Output .= $LayoutObject->Footer( Type => 'Small', @@ -957,12 +965,13 @@ sub SendEmail { # get ticket object my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket'); - # prepare subject + # get information on the current ticket my %Ticket = $TicketObject->TicketGet( TicketID => $Self->{TicketID}, DynamicFields => 1, ); + # prepare the subject $GetParam{Subject} = $TicketObject->TicketSubjectBuild( TicketNumber => $Ticket{TicketNumber}, Action => 'Forward', @@ -1075,7 +1084,6 @@ sub SendEmail { my $IsLocal = $Kernel::OM->Get('Kernel::System::SystemAddress')->SystemAddressIsLocalAddress( Address => $Email->address(), ); - if ($IsLocal) { $Error{ $Line . 'IsLocalAddress' } = 'ServerError'; } @@ -1180,17 +1188,26 @@ sub SendEmail { # check if there is an error if (%Error) { - my $QueueID = $TicketObject->TicketQueueID( TicketID => $Self->{TicketID} ); - my $Output = $LayoutObject->Header( + + # extract dynamic field values from ticket data + my %TicketDFValues = + map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } + grep { $_->{ObjectType} eq 'Ticket' } + $Self->{DynamicField}->@*; + + my $Output = $LayoutObject->Header( Type => 'Small', BodyClass => 'Popup', ); + + # TODD: Notification about FormDraft + $Output .= $Self->_Mask( TicketNumber => $Ticket{TicketNumber}, + Title => $Ticket{Title}, CustomerID => $Ticket{CustomerID}, CustomerUserID => $Ticket{CustomerUserID}, - Title => $Ticket{Title}, TicketID => $Self->{TicketID}, QueueID => $QueueID, SLAID => $Ticket{SLAID}, @@ -1206,10 +1223,12 @@ sub SendEmail { %GetParam, DFPossibleValues => \%DynamicFieldPossibleValues, DFErrors => \%DynamicFieldValidationResult, + DFValues => \%TicketDFValues, ); $Output .= $LayoutObject->Footer( Type => 'Small', ); + return $Output; } @@ -1485,17 +1504,17 @@ sub AjaxUpdate { } my $Key = $Object->Option( %GetParam, Config => $Jobs{$Job} ); - if ($Key) { - push @ExtendedData, { - Name => $Key, - Data => \%Data, - SelectedID => $GetParam{$Key}, - Translation => 1, - PossibleNone => 1, - Multiple => $Multiple, - Max => 100, - }; + push @ExtendedData, + { + Name => $Key, + Data => \%Data, + SelectedID => $GetParam{$Key}, + Translation => 1, + PossibleNone => 1, + Multiple => $Multiple, + Max => 100, + }; } } } @@ -1587,13 +1606,14 @@ sub AjaxUpdate { ) || $PossibleValues; # add dynamic field to the list of fields to update - push @DynamicFieldAJAX, { - Name => 'DynamicField_' . $DynamicFieldConfig->{Name}, - Data => $DataValues, - SelectedID => $DynamicFieldValues{ $DynamicFieldConfig->{Name} }, - Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0, - Max => 100, - }; + push @DynamicFieldAJAX, + { + Name => 'DynamicField_' . $DynamicFieldConfig->{Name}, + Data => $DataValues, + SelectedID => $DynamicFieldValues{ $DynamicFieldConfig->{Name} }, + Translation => $DynamicFieldConfig->{Config}->{TranslatableValues} || 0, + Max => 100, + }; } my $JSON = $LayoutObject->BuildSelectionJSON( @@ -1610,6 +1630,7 @@ sub AjaxUpdate { @DynamicFieldAJAX, ], ); + return $LayoutObject->Attachment( ContentType => 'application/json', Content => $JSON, @@ -1628,6 +1649,7 @@ sub _GetNextStates { TicketID => $Self->{TicketID}, UserID => $Self->{UserID}, ); + return \%NextStates; } @@ -1666,8 +1688,8 @@ sub _Mask { $Param{NextStatesStrg} = $LayoutObject->BuildSelection( Data => $Param{NextStates}, Name => 'ComposeStateID', - Class => 'Modernize', PossibleNone => 1, + Class => 'Modernize', %State, ); @@ -2017,14 +2039,14 @@ sub _GetFieldsToUpdate { sub _GetExtendedParams { my ( $Self, %Param ) = @_; + # get param object + my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request'); + + # get params my %GetParam = %{ $Self->{GetParam} }; # hash for check duplicated entries my %AddressesList; - - # get param object - my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request'); - my @MultipleCustomer; my $CustomersNumber = $ParamObject->GetParam( Param => 'CustomerTicketCounterToCustomer' ) || 0; my $Selected = $ParamObject->GetParam( Param => 'CustomerSelected' ) || ''; diff --git a/Kernel/Modules/AgentTicketPhoneCommon.pm b/Kernel/Modules/AgentTicketPhoneCommon.pm index c538843592..65581083cc 100644 --- a/Kernel/Modules/AgentTicketPhoneCommon.pm +++ b/Kernel/Modules/AgentTicketPhoneCommon.pm @@ -33,8 +33,7 @@ sub new { my ( $Type, %Param ) = @_; # allocate new hash for object - my $Self = {%Param}; - bless( $Self, $Type ); + my $Self = bless {%Param}, $Type; # Try to load draft if requested. if ( @@ -49,7 +48,7 @@ sub new { ); } - # frontend specific config + # get config for frontend module my $Config = $Kernel::OM->Get('Kernel::Config')->Get("Ticket::Frontend::$Self->{Action}"); my $DynamicFieldObject = $Kernel::OM->Get('Kernel::System::DynamicField'); @@ -398,8 +397,11 @@ sub Run { } - # grep dynamic field values from ticket data - my %DFValues = map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } grep { $_->{ObjectType} eq 'Ticket' } $Self->{DynamicField}->@*; + # extracte dynamic field values from ticket data + my %TicketDFValues = + map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } + grep { $_->{ObjectType} eq 'Ticket' } + $Self->{DynamicField}->@*; # get and format default subject and body my $Subject = $LayoutObject->Output( @@ -414,7 +416,6 @@ sub Run { ); } - # print form ... my $Output = $LayoutObject->Header( Type => 'Small', BodyClass => 'Popup', @@ -433,11 +434,12 @@ sub Run { Subject => $Subject, Body => $Body, DFPossibleValues => \%DynamicFieldPossibleValues, - DFValues => \%DFValues, + DFValues => \%TicketDFValues, ); $Output .= $LayoutObject->Footer( Type => 'Small', ); + return $Output; } @@ -791,6 +793,12 @@ sub Run { } } + # extracte dynamic field values from ticket data + my %TicketDFValues = + map { 'DynamicField_' . $_->{Name} => $Ticket{ 'DynamicField_' . $_->{Name} } } + grep { $_->{ObjectType} eq 'Ticket' } + $Self->{DynamicField}->@*; + # header my $Output = $LayoutObject->Header( Type => 'Small', @@ -813,6 +821,7 @@ sub Run { DFPossibleValues => \%DynamicFieldPossibleValues, DFErrors => \%DynamicFieldValidationResult, Errors => \%Error, + DFValues => \%TicketDFValues, ); $Output .= $LayoutObject->Footer( Type => 'Small', @@ -1529,7 +1538,7 @@ sub _MaskPhone { ); } - # get output back + # create & return output return $LayoutObject->Output( TemplateFile => 'AgentTicketPhoneCommon', Data => { @@ -1540,7 +1549,6 @@ sub _MaskPhone { FormDraftMeta => $LoadedFormDraft, }, ); - } sub _GetFieldsToUpdate {