# --
# 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::Calendar::Plugin::Ticket;
use strict;
use warnings;
use Kernel::System::VariableCheck qw(:all);
our @ObjectDependencies = (
'Kernel::System::Log',
'Kernel::System::LinkObject',
'Kernel::System::Ticket',
);
=head1 NAME
Kernel::System::Calendar::Plugin::Ticket - Ticket plugin
=head1 DESCRIPTION
Ticket appointment plugin.
=head1 PUBLIC INTERFACE
=head2 new()
create an object. Do not use it directly, instead use:
use Kernel::System::ObjectManager;
local $Kernel::OM = Kernel::System::ObjectManager->new();
my $TicketPluginObject = $Kernel::OM->Get('Kernel::System::Calendar::Plugin::Ticket');
=cut
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
return $Self;
}
=head2 LinkAdd()
adds a link from an appointment to the ticket
my $Success = $TicketPluginObject->LinkAdd(
AppointmentID => 123,
PluginData => $TicketID,
UserID => 1,
);
=cut
sub LinkAdd {
my ( $Self, %Param ) = @_;
# check needed stuff
for my $Needed (qw(AppointmentID PluginData UserID)) {
if ( !$Param{$Needed} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Needed!",
);
return;
}
}
# check ticket id
my %Ticket = $Kernel::OM->Get('Kernel::System::Ticket')->TicketGet(
TicketID => $Param{PluginData},
UserID => $Param{UserID},
);
return if !%Ticket;
my $Success = $Kernel::OM->Get('Kernel::System::LinkObject')->LinkAdd(
SourceObject => 'Appointment',
SourceKey => $Param{AppointmentID},
TargetObject => 'Ticket',
TargetKey => $Param{PluginData},
Type => 'Normal',
State => 'Valid',
UserID => $Param{UserID},
);
return $Success;
}
=head2 LinkList()
returns a hash of linked tickets to an appointment
my $Success = $TicketPluginObject->LinkList(
AppointmentID => 123,
UserID => 1,
);
=cut
sub LinkList {
my ( $Self, %Param ) = @_;
# check needed stuff
for my $Needed (qw(AppointmentID UserID PluginURL)) {
if ( !$Param{$Needed} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Needed!",
);
return;
}
}
my %LinkKeyList = $Kernel::OM->Get('Kernel::System::LinkObject')->LinkKeyListWithData(
Object1 => 'Appointment',
Key1 => $Param{AppointmentID},
Object2 => 'Ticket',
State => 'Valid',
UserID => $Param{UserID},
);
my %Result = map {
$_ => {
LinkID => $LinkKeyList{$_}->{TicketID},
LinkName => $LinkKeyList{$_}->{TicketNumber} . ' ' . $LinkKeyList{$_}->{Title},
LinkURL => sprintf( $Param{PluginURL}, $LinkKeyList{$_}->{TicketID} ),
}
} keys %LinkKeyList;
return \%Result;
}
=head2 Search()
search for ticket and return a hash of found tickets
my $ResultList = $TicketPluginObject->Search(
Search => '**', # search by ticket number or title
# or
ObjectID => 1, # search by ticket ID (single result)
UserID => 1,
);
=cut
sub Search {
my ( $Self, %Param ) = @_;
# check needed stuff
for my $Needed (qw(UserID)) {
if ( !$Param{$Needed} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Needed!",
);
return;
}
}
if ( !$Param{Search} && !$Param{ObjectID} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => 'Need either Search or ObjectID!',
);
return;
}
# get ticket object
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
my @TicketIDs;
if ( $Param{Search} ) {
# search the tickets by ticket number
@TicketIDs = $TicketObject->TicketSearch(
TicketNumber => $Param{Search},
Limit => 100,
Result => 'ARRAY',
ArchiveFlags => ['n'],
UserID => $Param{UserID},
);
# try the title search if no results were found
if ( !@TicketIDs ) {
@TicketIDs = $TicketObject->TicketSearch(
Title => '%' . $Param{Search},
Limit => 100,
Result => 'ARRAY',
ArchiveFlags => ['n'],
UserID => $Param{UserID},
);
}
}
elsif ( $Param{ObjectID} ) {
@TicketIDs = $TicketObject->TicketSearch(
TicketID => $Param{ObjectID},
Limit => 100,
Result => 'ARRAY',
ArchiveFlags => ['n'],
UserID => $Param{UserID},
);
}
my %ResultList;
# clean the results
TICKET:
for my $TicketID (@TicketIDs) {
next TICKET if !$TicketID;
# get ticket data
my %Ticket = $TicketObject->TicketGet(
TicketID => $TicketID,
DynamicFields => 0,
UserID => $Self->{UserID},
);
next TICKET if !%Ticket;
# generate the ticket information string
$ResultList{ $Ticket{TicketID} } = $Ticket{TicketNumber} . ' ' . $Ticket{Title};
}
return \%ResultList;
}
1;
=head1 TERMS AND CONDITIONS
This software is part of the OTRS project (L).
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.
=cut