use RT::Link ();
package RT::Link;
use strict;
use warnings;
use warnings FATAL => 'redefine';
use RTx::Shredder::Exceptions;
use RTx::Shredder::Dependencies;
use RTx::Shredder::Constants;
use RTx::Shredder::Transaction;
use RTx::Shredder::Record;
sub __DependsOn
{
my $self = shift;
my %args = (
Shredder => undef,
Dependencies => undef,
@_,
);
my $deps = $args{'Dependencies'};
my $list = [];
# AddLink transactions
my $map = RT::Ticket->LINKTYPEMAP;
my $link_meta = $map->{ $self->Type };
unless ( $link_meta && $link_meta->{'Mode'} && $link_meta->{'Type'} ) {
RTx::Shredder::Exception->throw( 'Wrong link link_meta, no record for '. $self->Type );
}
if ( $self->BaseURI->IsLocal ) {
my $objs = $self->BaseObj->Transactions;
$objs->Limit(
FIELD => 'Type',
OPERATOR => '=',
VALUE => 'AddLink',
);
$objs->Limit( FIELD => 'NewValue', VALUE => $self->Target );
while ( my ($k, $v) = each %$map ) {
next unless $v->{'Type'} eq $link_meta->{'Type'};
next unless $v->{'Mode'} eq $link_meta->{'Mode'};
$objs->Limit( FIELD => 'Field', VALUE => $k );
}
push( @$list, $objs );
}
my %reverse = ( Base => 'Target', Target => 'Base' );
if ( $self->TargetURI->IsLocal ) {
my $objs = $self->TargetObj->Transactions;
$objs->Limit(
FIELD => 'Type',
OPERATOR => '=',
VALUE => 'AddLink',
);
$objs->Limit( FIELD => 'NewValue', VALUE => $self->Base );
while ( my ($k, $v) = each %$map ) {
next unless $v->{'Type'} eq $link_meta->{'Type'};
next unless $v->{'Mode'} eq $reverse{ $link_meta->{'Mode'} };
$objs->Limit( FIELD => 'Field', VALUE => $k );
}
push( @$list, $objs );
}
$deps->_PushDependencies(
BaseObject => $self,
Flags => DEPENDS_ON|WIPE_AFTER,
TargetObjects => $list,
Shredder => $args{'Shredder'}
);
return $self->SUPER::__DependsOn( %args );
}
#TODO: Link record has small strength, but should be encountered
# if we plan write export tool.
sub __Relates
{
my $self = shift;
my %args = (
Shredder => undef,
Dependencies => undef,
@_,
);
my $deps = $args{'Dependencies'};
my $list = [];
# FIXME: if link is local then object should exist
return $self->SUPER::__Relates( %args );
}
1;