init III
This commit is contained in:
600
Perl OTRS/Kernel/System/LinkObject/Ticket.pm
Normal file
600
Perl OTRS/Kernel/System/LinkObject/Ticket.pm
Normal file
@@ -0,0 +1,600 @@
|
||||
# --
|
||||
# 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::LinkObject::Ticket;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::VariableCheck qw(:all);
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::Config',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::Ticket',
|
||||
);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Kernel::System::LinkObject::Ticket
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Ticket backend for the ticket link object.
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
=head2 new()
|
||||
|
||||
Don't use the constructor directly, use the ObjectManager instead:
|
||||
|
||||
my $LinkObjectTicketObject = $Kernel::OM->Get('Kernel::System::LinkObject::Ticket');
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
=head2 LinkListWithData()
|
||||
|
||||
fill up the link list with data
|
||||
|
||||
$Success = $LinkObject->LinkListWithData(
|
||||
LinkList => $HashRef,
|
||||
IgnoreLinkedTicketStateTypes => 0|1, # (optional) default 0
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub LinkListWithData {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Argument (qw(LinkList UserID)) {
|
||||
if ( !$Param{$Argument} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Argument!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check link list
|
||||
if ( ref $Param{LinkList} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'LinkList must be a hash reference!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get ticket object
|
||||
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
|
||||
|
||||
# get config, which ticket state types should not be included in linked tickets overview
|
||||
my @IgnoreLinkedTicketStateTypes = @{
|
||||
$Kernel::OM->Get('Kernel::Config')->Get('LinkObject::IgnoreLinkedTicketStateTypes')
|
||||
// []
|
||||
};
|
||||
|
||||
my %IgnoreLinkTicketStateTypesHash;
|
||||
map { $IgnoreLinkTicketStateTypesHash{$_}++ } @IgnoreLinkedTicketStateTypes;
|
||||
|
||||
for my $LinkType ( sort keys %{ $Param{LinkList} } ) {
|
||||
|
||||
for my $Direction ( sort keys %{ $Param{LinkList}->{$LinkType} } ) {
|
||||
|
||||
TICKETID:
|
||||
for my $TicketID ( sort keys %{ $Param{LinkList}->{$LinkType}->{$Direction} } ) {
|
||||
|
||||
# get ticket data
|
||||
my %TicketData = $TicketObject->TicketGet(
|
||||
TicketID => $TicketID,
|
||||
UserID => $Param{UserID},
|
||||
DynamicFields => 0,
|
||||
);
|
||||
|
||||
# remove id from hash if ticket can not get
|
||||
if ( !%TicketData ) {
|
||||
delete $Param{LinkList}->{$LinkType}->{$Direction}->{$TicketID};
|
||||
next TICKETID;
|
||||
}
|
||||
|
||||
# if param is set, remove entries from hash with configured ticket state types
|
||||
if (
|
||||
$Param{IgnoreLinkedTicketStateTypes}
|
||||
&& $IgnoreLinkTicketStateTypesHash{ $TicketData{StateType} }
|
||||
)
|
||||
{
|
||||
delete $Param{LinkList}->{$LinkType}->{$Direction}->{$TicketID};
|
||||
next TICKETID;
|
||||
}
|
||||
|
||||
# add ticket data
|
||||
$Param{LinkList}->{$LinkType}->{$Direction}->{$TicketID} = \%TicketData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 ObjectPermission()
|
||||
|
||||
checks read permission for a given object and UserID.
|
||||
|
||||
$Permission = $LinkObject->ObjectPermission(
|
||||
Object => 'Ticket',
|
||||
Key => 123,
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub ObjectPermission {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Argument (qw(Object Key UserID)) {
|
||||
if ( !$Param{$Argument} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Argument!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return $Kernel::OM->Get('Kernel::System::Ticket')->TicketPermission(
|
||||
Type => 'ro',
|
||||
TicketID => $Param{Key},
|
||||
UserID => $Param{UserID},
|
||||
);
|
||||
}
|
||||
|
||||
=head2 ObjectDescriptionGet()
|
||||
|
||||
return a hash of object descriptions
|
||||
|
||||
Return
|
||||
%Description = (
|
||||
Normal => "Ticket# 1234455",
|
||||
Long => "Ticket# 1234455: The Ticket Title",
|
||||
);
|
||||
|
||||
%Description = $LinkObject->ObjectDescriptionGet(
|
||||
Key => 123,
|
||||
Mode => 'Temporary', # (optional)
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub ObjectDescriptionGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Argument (qw(Object Key UserID)) {
|
||||
if ( !$Param{$Argument} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Argument!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# create description
|
||||
my %Description = (
|
||||
Normal => 'Ticket',
|
||||
Long => 'Ticket',
|
||||
);
|
||||
|
||||
return %Description if $Param{Mode} && $Param{Mode} eq 'Temporary';
|
||||
|
||||
# get ticket
|
||||
my %Ticket = $Kernel::OM->Get('Kernel::System::Ticket')->TicketGet(
|
||||
TicketID => $Param{Key},
|
||||
UserID => $Param{UserID},
|
||||
DynamicFields => 0,
|
||||
);
|
||||
|
||||
return if !%Ticket;
|
||||
|
||||
my $ParamHook = $Kernel::OM->Get('Kernel::Config')->Get('Ticket::Hook') || 'Ticket#';
|
||||
$ParamHook .= $Kernel::OM->Get('Kernel::Config')->Get('Ticket::HookDivider') || '';
|
||||
|
||||
# create description
|
||||
%Description = (
|
||||
Normal => $ParamHook . "$Ticket{TicketNumber}",
|
||||
Long => $ParamHook . "$Ticket{TicketNumber}: $Ticket{Title}",
|
||||
);
|
||||
|
||||
return %Description;
|
||||
}
|
||||
|
||||
=head2 ObjectSearch()
|
||||
|
||||
return a hash list of the search results
|
||||
|
||||
Returns:
|
||||
|
||||
$SearchList = {
|
||||
NOTLINKED => {
|
||||
Source => {
|
||||
12 => $DataOfItem12,
|
||||
212 => $DataOfItem212,
|
||||
332 => $DataOfItem332,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
$SearchList = $LinkObject->ObjectSearch(
|
||||
SubObject => 'Bla', # (optional)
|
||||
SearchParams => $HashRef, # (optional)
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub ObjectSearch {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# set default params
|
||||
$Param{SearchParams} ||= {};
|
||||
|
||||
# set focus
|
||||
my %Search;
|
||||
if ( $Param{SearchParams}->{TicketFulltext} ) {
|
||||
$Search{Fulltext} = '*' . $Param{SearchParams}->{TicketFulltext} . '*';
|
||||
}
|
||||
if ( $Param{SearchParams}->{TicketTitle} ) {
|
||||
$Search{Title} = '*' . $Param{SearchParams}->{TicketTitle} . '*';
|
||||
}
|
||||
|
||||
if ( IsArrayRefWithData( $Param{SearchParams}->{ArchiveID} ) ) {
|
||||
if ( $Param{SearchParams}->{ArchiveID}->[0] eq 'AllTickets' ) {
|
||||
$Search{ArchiveFlags} = [ 'y', 'n' ];
|
||||
}
|
||||
elsif ( $Param{SearchParams}->{ArchiveID}->[0] eq 'NotArchivedTickets' ) {
|
||||
$Search{ArchiveFlags} = ['n'];
|
||||
}
|
||||
elsif ( $Param{SearchParams}->{ArchiveID}->[0] eq 'ArchivedTickets' ) {
|
||||
$Search{ArchiveFlags} = ['y'];
|
||||
}
|
||||
}
|
||||
|
||||
# get ticket object
|
||||
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
|
||||
|
||||
# search the tickets
|
||||
my @TicketIDs = $TicketObject->TicketSearch(
|
||||
%{ $Param{SearchParams} },
|
||||
%Search,
|
||||
Limit => 50,
|
||||
Result => 'ARRAY',
|
||||
ConditionInline => 1,
|
||||
ContentSearchPrefix => '*',
|
||||
ContentSearchSuffix => '*',
|
||||
FullTextIndex => 1,
|
||||
OrderBy => 'Down',
|
||||
SortBy => 'Age',
|
||||
UserID => $Param{UserID},
|
||||
);
|
||||
|
||||
my %SearchList;
|
||||
TICKETID:
|
||||
for my $TicketID (@TicketIDs) {
|
||||
|
||||
# get ticket data
|
||||
my %TicketData = $TicketObject->TicketGet(
|
||||
TicketID => $TicketID,
|
||||
UserID => $Param{UserID},
|
||||
DynamicFields => 0,
|
||||
);
|
||||
|
||||
next TICKETID if !%TicketData;
|
||||
|
||||
# add ticket data
|
||||
$SearchList{NOTLINKED}->{Source}->{$TicketID} = \%TicketData;
|
||||
}
|
||||
|
||||
return \%SearchList;
|
||||
}
|
||||
|
||||
=head2 LinkAddPre()
|
||||
|
||||
link add pre event module
|
||||
|
||||
$True = $LinkObject->LinkAddPre(
|
||||
Key => 123,
|
||||
SourceObject => 'Ticket',
|
||||
SourceKey => 321,
|
||||
Type => 'Normal',
|
||||
State => 'Valid',
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
or
|
||||
|
||||
$True = $LinkObject->LinkAddPre(
|
||||
Key => 123,
|
||||
TargetObject => 'Ticket',
|
||||
TargetKey => 321,
|
||||
Type => 'Normal',
|
||||
State => 'Valid',
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub LinkAddPre {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Argument (qw(Key Type State UserID)) {
|
||||
if ( !$Param{$Argument} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Argument!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return 1 if $Param{State} eq 'Temporary';
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 LinkAddPost()
|
||||
|
||||
link add pre event module
|
||||
|
||||
$True = $LinkObject->LinkAddPost(
|
||||
Key => 123,
|
||||
SourceObject => 'Ticket',
|
||||
SourceKey => 321,
|
||||
Type => 'Normal',
|
||||
State => 'Valid',
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
or
|
||||
|
||||
$True = $LinkObject->LinkAddPost(
|
||||
Key => 123,
|
||||
TargetObject => 'Ticket',
|
||||
TargetKey => 321,
|
||||
Type => 'Normal',
|
||||
State => 'Valid',
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub LinkAddPost {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Argument (qw(Key Type State UserID)) {
|
||||
if ( !$Param{$Argument} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Argument!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return 1 if $Param{State} eq 'Temporary';
|
||||
|
||||
# get ticket object
|
||||
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
|
||||
|
||||
if ( $Param{SourceObject} && $Param{SourceObject} eq 'Ticket' && $Param{SourceKey} ) {
|
||||
|
||||
# lookup ticket number
|
||||
my $TicketNumber = $TicketObject->TicketNumberLookup(
|
||||
TicketID => $Param{SourceKey},
|
||||
UserID => $Param{UserID},
|
||||
);
|
||||
|
||||
# add ticket history entry
|
||||
$TicketObject->HistoryAdd(
|
||||
TicketID => $Param{Key},
|
||||
CreateUserID => $Param{UserID},
|
||||
HistoryType => 'TicketLinkAdd',
|
||||
Name => "\%\%$TicketNumber\%\%$Param{SourceKey}\%\%$Param{Key}",
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( $Param{TargetObject} && $Param{TargetObject} eq 'Ticket' && $Param{TargetKey} ) {
|
||||
|
||||
# lookup ticket number
|
||||
my $TicketNumber = $TicketObject->TicketNumberLookup(
|
||||
TicketID => $Param{TargetKey},
|
||||
UserID => $Param{UserID},
|
||||
);
|
||||
|
||||
# add ticket history entry
|
||||
$TicketObject->HistoryAdd(
|
||||
TicketID => $Param{Key},
|
||||
CreateUserID => $Param{UserID},
|
||||
HistoryType => 'TicketLinkAdd',
|
||||
Name => "\%\%$TicketNumber\%\%$Param{TargetKey}\%\%$Param{Key}",
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 LinkDeletePre()
|
||||
|
||||
link delete pre event module
|
||||
|
||||
$True = $LinkObject->LinkDeletePre(
|
||||
Key => 123,
|
||||
SourceObject => 'Ticket',
|
||||
SourceKey => 321,
|
||||
Type => 'Normal',
|
||||
State => 'Valid',
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
or
|
||||
|
||||
$True = $LinkObject->LinkDeletePre(
|
||||
Key => 123,
|
||||
TargetObject => 'Ticket',
|
||||
TargetKey => 321,
|
||||
Type => 'Normal',
|
||||
State => 'Valid',
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub LinkDeletePre {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Argument (qw(Key Type State UserID)) {
|
||||
if ( !$Param{$Argument} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Argument!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return 1 if $Param{State} eq 'Temporary';
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 LinkDeletePost()
|
||||
|
||||
link delete post event module
|
||||
|
||||
$True = $LinkObject->LinkDeletePost(
|
||||
Key => 123,
|
||||
SourceObject => 'Ticket',
|
||||
SourceKey => 321,
|
||||
Type => 'Normal',
|
||||
State => 'Valid',
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
or
|
||||
|
||||
$True = $LinkObject->LinkDeletePost(
|
||||
Key => 123,
|
||||
TargetObject => 'Ticket',
|
||||
TargetKey => 321,
|
||||
Type => 'Normal',
|
||||
State => 'Valid',
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub LinkDeletePost {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Argument (qw(Key Type State UserID)) {
|
||||
if ( !$Param{$Argument} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Argument!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return 1 if $Param{State} eq 'Temporary';
|
||||
|
||||
# get ticket object
|
||||
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
|
||||
|
||||
if ( $Param{SourceObject} && $Param{SourceObject} eq 'Ticket' && $Param{SourceKey} ) {
|
||||
|
||||
# lookup ticket number
|
||||
my $TicketNumber = $TicketObject->TicketNumberLookup(
|
||||
TicketID => $Param{SourceKey},
|
||||
UserID => $Param{UserID},
|
||||
);
|
||||
|
||||
# add ticket history entry
|
||||
$TicketObject->HistoryAdd(
|
||||
TicketID => $Param{Key},
|
||||
CreateUserID => $Param{UserID},
|
||||
HistoryType => 'TicketLinkDelete',
|
||||
Name => "\%\%$TicketNumber\%\%$Param{SourceKey}\%\%$Param{Key}",
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( $Param{TargetObject} && $Param{TargetObject} eq 'Ticket' && $Param{TargetKey} ) {
|
||||
|
||||
# lookup ticket number
|
||||
my $TicketNumber = $TicketObject->TicketNumberLookup(
|
||||
TicketID => $Param{TargetKey},
|
||||
UserID => $Param{UserID},
|
||||
);
|
||||
|
||||
# add ticket history entry
|
||||
$TicketObject->HistoryAdd(
|
||||
TicketID => $Param{Key},
|
||||
CreateUserID => $Param{UserID},
|
||||
HistoryType => 'TicketLinkDelete',
|
||||
Name => "\%\%$TicketNumber\%\%$Param{TargetKey}\%\%$Param{Key}",
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 TERMS AND CONDITIONS
|
||||
|
||||
This software is part of the OTRS project (L<https://otrs.org/>).
|
||||
|
||||
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 L<https://www.gnu.org/licenses/gpl-3.0.txt>.
|
||||
|
||||
=cut
|
||||
Reference in New Issue
Block a user