init III
This commit is contained in:
271
Perl OTRS/Kernel/System/PostMaster/Reject.pm
Normal file
271
Perl OTRS/Kernel/System/PostMaster/Reject.pm
Normal file
@@ -0,0 +1,271 @@
|
||||
# --
|
||||
# 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::System::PostMaster::Reject;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::System::DynamicField',
|
||||
'Kernel::System::DynamicField::Backend',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::Ticket',
|
||||
'Kernel::System::Ticket::Article',
|
||||
);
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
# get parser object
|
||||
$Self->{ParserObject} = $Param{ParserObject} || die "Got no ParserObject!";
|
||||
|
||||
# Get communication log object.
|
||||
$Self->{CommunicationLogObject} = $Param{CommunicationLogObject} || die "Got no CommunicationLogObject!";
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
sub Run {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for (qw(TicketID InmailUserID GetParam Tn AutoResponseType)) {
|
||||
if ( !$Param{$_} ) {
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Error',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value => "Need $_!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
my %GetParam = %{ $Param{GetParam} };
|
||||
|
||||
# get ticket object
|
||||
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
|
||||
|
||||
# get ticket data
|
||||
my %Ticket = $TicketObject->TicketGet(
|
||||
TicketID => $Param{TicketID},
|
||||
DynamicFields => 0,
|
||||
);
|
||||
|
||||
my $Comment = $Param{Comment} || '';
|
||||
my $Lock = $Param{Lock} || '';
|
||||
my $AutoResponseType = $Param{AutoResponseType} || '';
|
||||
|
||||
my $ArticleObject = $Kernel::OM->Get('Kernel::System::Ticket::Article');
|
||||
my $ArticleBackendObject = $ArticleObject->BackendForChannel(
|
||||
ChannelName => 'Email',
|
||||
);
|
||||
|
||||
# Check if X-OTRS-SenderType exists, if not set default 'customer'.
|
||||
if ( !$ArticleObject->ArticleSenderTypeLookup( SenderType => $GetParam{'X-OTRS-SenderType'} ) ) {
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Error',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value => "Can't find valid SenderType '$GetParam{'X-OTRS-SenderType'}' in DB, take 'customer'",
|
||||
);
|
||||
$GetParam{'X-OTRS-SenderType'} = 'customer';
|
||||
}
|
||||
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Debug',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value => "Going to create new article for TicketID '$Param{TicketID}'.",
|
||||
);
|
||||
|
||||
# do db insert
|
||||
my $ArticleID = $ArticleBackendObject->ArticleCreate(
|
||||
TicketID => $Param{TicketID},
|
||||
IsVisibleForCustomer => $GetParam{'X-OTRS-IsVisibleForCustomer'} // 1,
|
||||
SenderType => $GetParam{'X-OTRS-SenderType'},
|
||||
From => $GetParam{From},
|
||||
ReplyTo => $GetParam{ReplyTo},
|
||||
To => $GetParam{To},
|
||||
Cc => $GetParam{Cc},
|
||||
Subject => $GetParam{Subject},
|
||||
MessageID => $GetParam{'Message-ID'},
|
||||
InReplyTo => $GetParam{'In-Reply-To'},
|
||||
References => $GetParam{'References'},
|
||||
ContentType => $GetParam{'Content-Type'},
|
||||
Body => $GetParam{Body},
|
||||
UserID => $Param{InmailUserID},
|
||||
HistoryType => 'FollowUp',
|
||||
HistoryComment => "\%\%$Param{Tn}\%\%$Comment",
|
||||
AutoResponseType => $AutoResponseType,
|
||||
OrigHeader => \%GetParam,
|
||||
);
|
||||
|
||||
if ( !$ArticleID ) {
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Error',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value => "Article could not be created!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
$Self->{CommunicationLogObject}->ObjectLookupSet(
|
||||
ObjectLogType => 'Message',
|
||||
TargetObjectType => 'Article',
|
||||
TargetObjectID => $ArticleID,
|
||||
);
|
||||
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Debug',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value => "Reject Follow up Ticket!",
|
||||
);
|
||||
|
||||
my %CommunicationLogSkipAttributes = (
|
||||
Body => 1,
|
||||
Attachment => 1,
|
||||
);
|
||||
|
||||
ATTRIBUTE:
|
||||
for my $Attribute ( sort keys %GetParam ) {
|
||||
next ATTRIBUTE if $CommunicationLogSkipAttributes{$Attribute};
|
||||
|
||||
my $Value = $GetParam{$Attribute};
|
||||
next ATTRIBUTE if !( defined $Value ) || !( length $Value );
|
||||
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Debug',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value => "$Attribute: $Value",
|
||||
);
|
||||
}
|
||||
|
||||
# write plain email to the storage
|
||||
$ArticleBackendObject->ArticleWritePlain(
|
||||
ArticleID => $ArticleID,
|
||||
Email => $Self->{ParserObject}->GetPlainEmail(),
|
||||
UserID => $Param{InmailUserID},
|
||||
);
|
||||
|
||||
# write attachments to the storage
|
||||
for my $Attachment ( $Self->{ParserObject}->GetAttachments() ) {
|
||||
$ArticleBackendObject->ArticleWriteAttachment(
|
||||
Filename => $Attachment->{Filename},
|
||||
Content => $Attachment->{Content},
|
||||
ContentType => $Attachment->{ContentType},
|
||||
ContentID => $Attachment->{ContentID},
|
||||
ContentAlternative => $Attachment->{ContentAlternative},
|
||||
Disposition => $Attachment->{Disposition},
|
||||
ArticleID => $ArticleID,
|
||||
UserID => $Param{InmailUserID},
|
||||
);
|
||||
}
|
||||
|
||||
# get dynamic field objects
|
||||
my $DynamicFieldObject = $Kernel::OM->Get('Kernel::System::DynamicField');
|
||||
my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend');
|
||||
|
||||
# dynamic fields
|
||||
my $DynamicFieldList =
|
||||
$DynamicFieldObject->DynamicFieldList(
|
||||
Valid => 0,
|
||||
ResultType => 'HASH',
|
||||
ObjectType => 'Article',
|
||||
);
|
||||
|
||||
# set dynamic fields for Article object type
|
||||
DYNAMICFIELDID:
|
||||
for my $DynamicFieldID ( sort keys %{$DynamicFieldList} ) {
|
||||
next DYNAMICFIELDID if !$DynamicFieldID;
|
||||
next DYNAMICFIELDID if !$DynamicFieldList->{$DynamicFieldID};
|
||||
my $Key = 'X-OTRS-FollowUp-DynamicField-' . $DynamicFieldList->{$DynamicFieldID};
|
||||
if ( defined $GetParam{$Key} && length $GetParam{$Key} ) {
|
||||
|
||||
# get dynamic field config
|
||||
my $DynamicFieldGet = $DynamicFieldObject->DynamicFieldGet(
|
||||
ID => $DynamicFieldID,
|
||||
);
|
||||
|
||||
$DynamicFieldBackendObject->ValueSet(
|
||||
DynamicFieldConfig => $DynamicFieldGet,
|
||||
ObjectID => $ArticleID,
|
||||
Value => $GetParam{$Key},
|
||||
UserID => $Param{InmailUserID},
|
||||
);
|
||||
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Debug',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value => "Article DynamicField update via '$Key'! Value: $GetParam{$Key}.",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
# reverse dynamic field list
|
||||
my %DynamicFieldListReversed = reverse %{$DynamicFieldList};
|
||||
|
||||
# set free article text
|
||||
my %Values =
|
||||
(
|
||||
'X-OTRS-FollowUp-ArticleKey' => 'ArticleFreeKey',
|
||||
'X-OTRS-FollowUp-ArticleValue' => 'ArticleFreeText',
|
||||
);
|
||||
for my $Item ( sort keys %Values ) {
|
||||
for my $Count ( 1 .. 16 ) {
|
||||
my $Key = $Item . $Count;
|
||||
if (
|
||||
defined $GetParam{$Key}
|
||||
&& length $GetParam{$Key}
|
||||
&& $DynamicFieldListReversed{ $Values{$Item} . $Count }
|
||||
)
|
||||
{
|
||||
# get dynamic field config
|
||||
my $DynamicFieldGet = $DynamicFieldObject->DynamicFieldGet(
|
||||
ID => $DynamicFieldListReversed{ $Values{$Item} . $Count },
|
||||
);
|
||||
if ($DynamicFieldGet) {
|
||||
my $Success = $DynamicFieldBackendObject->ValueSet(
|
||||
DynamicFieldConfig => $DynamicFieldGet,
|
||||
ObjectID => $ArticleID,
|
||||
Value => $GetParam{$Key},
|
||||
UserID => $Param{InmailUserID},
|
||||
);
|
||||
}
|
||||
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Debug',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value =>
|
||||
"TicketKey$Count: Article DynamicField (ArticleKey) update via '$Key'! Value: $GetParam{$Key}.",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$Self->{CommunicationLogObject}->ObjectLog(
|
||||
ObjectLogType => 'Message',
|
||||
Priority => 'Notice',
|
||||
Key => 'Kernel::System::PostMaster::Reject',
|
||||
Value => "Reject FollowUp Article to Ticket [$Param{Tn}] created "
|
||||
. "(TicketID=$Param{TicketID}, ArticleID=$ArticleID). $Comment"
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user