# --
# Kernel/System/LinkObject/Ticket.pm - to link ticket objects
# Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/
# --
# $Id: Ticket.pm,v 1.11 2007/01/21 01:26:10 mh Exp $
# --
# 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 http://www.gnu.org/licenses/gpl.txt.
# --

package Kernel::System::LinkObject::Ticket;

use strict;
use Kernel::System::Ticket;

use vars qw($VERSION);
$VERSION = '$Revision: 1.11 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;

sub Init {
    my $Self = shift;
    my %Param = @_;

    $Self->{TicketObject} = Kernel::System::Ticket->new(%{$Self});

    return 1;
}

sub FillDataMap {
    my $Self = shift;
    my %Param = @_;
    foreach (qw(ID)) {
        if (!$Param{$_}) {
            $Self->{LogObject}->Log(Priority => 'error', Message => "Need $_!");
            return;
        }
    }
    my %Ticket = $Self->{TicketObject}->TicketGet(TicketID => $Param{ID}, UserID => $Self->{UserID});
    return (
        Text => 'T:'.$Ticket{TicketNumber},
        Number => $Ticket{TicketNumber},
        ID => $Param{ID},
        Object => 'Ticket',
        FrontendDest => "Action=AgentTicketZoom&TicketID=",
    );
}

sub BackendLinkObject {
    my $Self = shift;
    my %Param = @_;
    if ($Param{LinkObject1} eq 'Ticket' && $Param{LinkObject2} eq 'Ticket') {
        # add ticket hostory
        my $SlaveTicketNumber = $Self->{TicketObject}->TicketNumberLookup(
            TicketID => $Param{LinkID2},
            UserID => $Self->{UserID},
        );
        $Self->{TicketObject}->HistoryAdd(
            TicketID => $Param{LinkID1},
            CreateUserID => $Self->{UserID},
            HistoryType => 'TicketLinkAdd',
            Name => "\%\%$SlaveTicketNumber\%\%$Param{LinkID2}\%\%$Param{LinkID1}",
        );
        # ticket event
        $Self->{TicketObject}->TicketEventHandlerPost(
            Event => 'TicketSlaveLinkAdd'.$Param{LinkType},
            UserID => $Self->{UserID},
            TicketID => $Param{LinkID1},
        );
        # added slave ticket history
        my $MasterTicketNumber = $Self->{TicketObject}->TicketNumberLookup(
            TicketID => $Param{LinkID1},
            UserID => $Self->{UserID},
        );
        $Self->{TicketObject}->HistoryAdd(
            TicketID => $Param{LinkID2},
            CreateUserID => $Self->{UserID},
            HistoryType => 'TicketLinkAdd',
            Name => "\%\%$MasterTicketNumber\%\%$Param{LinkID1}\%\%$Param{LinkID2}",
        );
        # ticket event
        $Self->{TicketObject}->TicketEventHandlerPost(
            Event => 'TicketMasterLinkAdd'.$Param{LinkType},
            UserID => $Self->{UserID},
            TicketID => $Param{LinkID2},
        );
    }
    return 1;
}

sub BackendUnlinkObject {
    my $Self = shift;
    my %Param = @_;
    if ($Param{LinkObject1} eq 'Ticket' && $Param{LinkObject2} eq 'Ticket') {
        # add ticket hostory
        my $SlaveTicketNumber = $Self->{TicketObject}->TicketNumberLookup(
            TicketID => $Param{LinkID1},
            UserID => $Self->{UserID},
        );
        $Self->{TicketObject}->HistoryAdd(
            TicketID => $Param{LinkID2},
            CreateUserID => $Self->{UserID},
            HistoryType => 'TicketLinkDelete',
            Name => "\%\%$SlaveTicketNumber\%\%$Param{LinkID2}\%\%$Param{LinkID1}",
        );
        # ticket event
        $Self->{TicketObject}->TicketEventHandlerPost(
            Event => 'TicketSlaveLinkDelete'.$Param{LinkType},
            UserID => $Self->{UserID},
            TicketID => $Param{LinkID2},
        );
        # added slave ticket history
        my $MasterTicketNumber = $Self->{TicketObject}->TicketNumberLookup(
            TicketID => $Param{LinkID2},
            UserID => $Self->{UserID},
        );
        $Self->{TicketObject}->HistoryAdd(
            TicketID => $Param{LinkID1},
            CreateUserID => $Self->{UserID},
            HistoryType => 'TicketLinkDelete',
            Name => "\%\%$MasterTicketNumber\%\%$Param{LinkID1}\%\%$Param{LinkID2}",
        );
        # ticket event
        $Self->{TicketObject}->TicketEventHandlerPost(
            Event => 'TicketMasterLinkDelete'.$Param{LinkType},
            UserID => $Self->{UserID},
            TicketID => $Param{LinkID1},
        );
    }
    return 1;
}

sub LinkSearchParams {
    my $Self = shift;
    my %Param = @_;
    return (
        { Name => 'TicketNumber', Text => 'Ticket#'},
        { Name => 'TicketFulltext', Text => 'Fulltext'},
    );
}

sub LinkSearch {
    my $Self = shift;
    my %Param = @_;
    my %Search = ();
    my @ResultWithData = ();
    if ($Param{TicketFulltext}) {
        $Param{TicketFulltext} = '*'.$Param{TicketFulltext}.'*';
        %Search = (
            From => $Param{TicketFulltext},
            To => $Param{TicketFulltext},
            Cc => $Param{TicketFulltext},
            Subject => $Param{TicketFulltext},
            Body => $Param{TicketFulltext},
            ContentSearch => 'OR',
        );
    }
    my @TicketIDs = $Self->{TicketObject}->TicketSearch(
        Result => 'ARRAY',
        %Param,
        %Search,
    );
    foreach (@TicketIDs) {
        my %Ticket = $Self->{TicketObject}->TicketGet(
            TicketID => $_,
            UserID => $Self->{UserID},
        );
        push (@ResultWithData, {
                %Ticket,
                ID => $_,
                Number => $Ticket{TicketNumber},
            },
        );

    }
    return @ResultWithData;
}

sub LinkItemData {
    my $Self = shift;
    my %Param = @_;
    my $Body = '';
    my %Ticket = $Self->{TicketObject}->TicketGet(TicketID => $Param{ID});
    my @ArticleBox = $Self->{TicketObject}->ArticleContentIndex(TicketID => $Param{ID});
    foreach my $Article (reverse @ArticleBox) {
        $Body .= $Article->{Body};
    }
    return (
        %Ticket,
        ID => $Param{ID},
        Title => $Ticket{Title},
        Number => $Ticket{TicketNumber},
        Body => $Body,
        DetailLink => "Action=AgentTicketZoom&TicketID=$Param{ID}",
    );
}

1;
