init III
This commit is contained in:
126
Perl OTRS/Kernel/System/Ticket/Event/TicketProcessTransitions.pm
Normal file
126
Perl OTRS/Kernel/System/Ticket/Event/TicketProcessTransitions.pm
Normal file
@@ -0,0 +1,126 @@
|
||||
# --
|
||||
# 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::Ticket::Event::TicketProcessTransitions;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::Config',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::ProcessManagement::Process',
|
||||
'Kernel::System::Ticket',
|
||||
);
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
$Self->{Debug} = 0;
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
sub Run {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Needed (qw(Data Event Config UserID)) {
|
||||
if ( !$Param{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# listen to all kinds of events
|
||||
if ( !$Param{Data}->{TicketID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need TicketID in Data!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get ticket object
|
||||
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
|
||||
|
||||
my $CacheKey = '_TicketProcessTransitions::AlreadyProcessed';
|
||||
|
||||
# loop protection: only execute this handler once for each ticket, as multiple events may be
|
||||
# fired, for example TicketTitleUpdate and TicketPriorityUpdate.
|
||||
return if ( $TicketObject->{$CacheKey}->{ $Param{Data}->{TicketID} } );
|
||||
|
||||
# get ticket data in silent mode, it could be that the ticket was deleted
|
||||
# in the meantime.
|
||||
my %Ticket = $TicketObject->TicketGet(
|
||||
TicketID => $Param{Data}->{TicketID},
|
||||
DynamicFields => 1,
|
||||
Silent => 1,
|
||||
);
|
||||
|
||||
if ( !%Ticket ) {
|
||||
|
||||
# remember that the event was executed for this TicketID to avoid multiple executions.
|
||||
# Store the information on the ticketobject
|
||||
$TicketObject->{$CacheKey}->{ $Param{Data}->{TicketID} } = 1;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
# get config object
|
||||
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
|
||||
|
||||
my $ProcessIDField = $ConfigObject->Get("Process::DynamicFieldProcessManagementProcessID");
|
||||
my $ProcessEntityID = $Ticket{"DynamicField_$ProcessIDField"};
|
||||
|
||||
my $ActivityIDField = $ConfigObject->Get("Process::DynamicFieldProcessManagementActivityID");
|
||||
my $ActivityEntityID = $Ticket{"DynamicField_$ActivityIDField"};
|
||||
|
||||
# ticket can be ignored if it is no process ticket. Don't set the cache key in this case as
|
||||
# later events might make a transition check neccessary.
|
||||
return if ( !$ProcessEntityID || !$ActivityEntityID );
|
||||
|
||||
# ok, now we know that we need to call the transition logic for this ticket.
|
||||
|
||||
# get process object
|
||||
my $ProcessObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::Process');
|
||||
|
||||
# Remember that the event was executed for this ticket to avoid multiple executions.
|
||||
# Store the information on the ticketobject, this needs to be done before the execution of the
|
||||
# transitions as it could happen that the transition generates new events that will be
|
||||
# processed in the mean time, before the chache is set, see bug#9748
|
||||
$TicketObject->{$CacheKey}->{ $Param{Data}->{TicketID} } = 1;
|
||||
|
||||
my $TransitionApplied = $ProcessObject->ProcessTransition(
|
||||
ProcessEntityID => $ProcessEntityID,
|
||||
ActivityEntityID => $ActivityEntityID,
|
||||
TicketID => $Param{Data}->{TicketID},
|
||||
UserID => $Param{UserID},
|
||||
);
|
||||
|
||||
if ( $Self->{Debug} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message =>
|
||||
"Transition for to TicketID: $Param{Data}->{TicketID}"
|
||||
. " ProcessEntityID: $ProcessEntityID OldActivityEntityID: $ActivityEntityID "
|
||||
. ( $TransitionApplied ? "was applied." : "was not applied." ),
|
||||
);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user