X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FShredder%2FRecord.pm;h=1e777ba6f596921f610ef183cb24f87a7ea55bca;hp=d1c74bfd3e4d002edbedfeac48f272d684e56701;hb=ae14e320388fa5e7f400bff1c251ef885b7952e6;hpb=43a06151e47d2c59b833cbd8c26d97865ee850b6 diff --git a/rt/lib/RT/Shredder/Record.pm b/rt/lib/RT/Shredder/Record.pm index d1c74bfd3..1e777ba6f 100644 --- a/rt/lib/RT/Shredder/Record.pm +++ b/rt/lib/RT/Shredder/Record.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -46,8 +46,8 @@ # # END BPS TAGGED BLOCK }}} -use RT::Record (); package RT::Record; +use RT::Record (); use strict; use warnings; @@ -56,14 +56,6 @@ use warnings FATAL => 'redefine'; use RT::Shredder::Constants; use RT::Shredder::Exceptions; -=head2 _AsString - -Returns string in format ClassName-ObjectId. - -=cut - -sub _AsString { return ref($_[0]) ."-". $_[0]->id } - =head2 _AsInsertQuery Returns INSERT query string that duplicates current record and @@ -100,7 +92,7 @@ sub Dependencies my $self = shift; my %args = ( Shredder => undef, - Flags => DEPENDS_ON, + Flags => RT::Shredder::Constants::DEPENDS_ON, @_, ); @@ -109,12 +101,9 @@ sub Dependencies } my $deps = RT::Shredder::Dependencies->new(); - if( $args{'Flags'} & DEPENDS_ON ) { + if( $args{'Flags'} & RT::Shredder::Constants::DEPENDS_ON ) { $self->__DependsOn( %args, Dependencies => $deps ); } - if( $args{'Flags'} & RELATES ) { - $self->__Relates( %args, Dependencies => $deps ); - } return $deps; } @@ -145,12 +134,13 @@ sub __DependsOn push( @$list, $objs ); # Links - if ( $self->can('_Links') ) { - # XXX: We don't use Links->Next as it's dies when object - # is linked to object that doesn't exist - # also, ->Next skip links to deleted tickets :( + if ( $self->can('Links') ) { + # make sure we don't skip any record + no warnings 'redefine'; + local *RT::Links::IsValidLink = sub { 1 }; + foreach ( qw(Base Target) ) { - my $objs = $self->_Links( $_ ); + my $objs = $self->Links( $_ ); $objs->_DoSearch; push @$list, $objs->ItemsArrayRef; } @@ -163,111 +153,22 @@ sub __DependsOn $deps->_PushDependencies( BaseObject => $self, - Flags => DEPENDS_ON, + Flags => RT::Shredder::Constants::DEPENDS_ON, TargetObjects => $list, Shredder => $args{'Shredder'} ); return; } -sub __Relates -{ - my $self = shift; - my %args = ( - Shredder => undef, - Dependencies => undef, - @_, - ); - my $deps = $args{'Dependencies'}; - my $list = []; - - if( $self->_Accessible( 'Creator', 'read' ) ) { - my $obj = RT::Principal->new( $self->CurrentUser ); - $obj->Load( $self->Creator ); - - if( $obj && defined $obj->id ) { - push( @$list, $obj ); - } else { - my $rec = $args{'Shredder'}->GetRecord( Object => $self ); - $self = $rec->{'Object'}; - $rec->{'State'} |= INVALID; - push @{ $rec->{'Description'} }, - "Have no related User(Creator) #". $self->Creator ." object"; - } - } - - if( $self->_Accessible( 'LastUpdatedBy', 'read' ) ) { - my $obj = RT::Principal->new( $self->CurrentUser ); - $obj->Load( $self->LastUpdatedBy ); - - if( $obj && defined $obj->id ) { - push( @$list, $obj ); - } else { - my $rec = $args{'Shredder'}->GetRecord( Object => $self ); - $self = $rec->{'Object'}; - $rec->{'State'} |= INVALID; - push @{ $rec->{'Description'} }, - "Have no related User(LastUpdatedBy) #". $self->LastUpdatedBy ." object"; - } - } - - $deps->_PushDependencies( - BaseObject => $self, - Flags => RELATES, - TargetObjects => $list, - Shredder => $args{'Shredder'} - ); - - # cause of this $self->SUPER::__Relates should be called last - # in overridden subs - my $rec = $args{'Shredder'}->GetRecord( Object => $self ); - $rec->{'State'} |= VALID unless( $rec->{'State'} & INVALID ); - - return; -} - # implement proxy method because some RT classes # override Delete method sub __Wipeout { my $self = shift; - my $msg = $self->_AsString ." wiped out"; + my $msg = $self->UID ." wiped out"; $self->SUPER::Delete; $RT::Logger->info( $msg ); return; } -sub ValidateRelations -{ - my $self = shift; - my %args = ( - Shredder => undef, - @_ - ); - unless( $args{'Shredder'} ) { - $args{'Shredder'} = RT::Shredder->new(); - } - - my $rec = $args{'Shredder'}->PutObject( Object => $self ); - return if( $rec->{'State'} & VALID ); - $self = $rec->{'Object'}; - - $self->_ValidateRelations( %args, Flags => RELATES ); - $rec->{'State'} |= VALID unless( $rec->{'State'} & INVALID ); - - return; -} - -sub _ValidateRelations -{ - my $self = shift; - my %args = ( @_ ); - - my $deps = $self->Dependencies( %args ); - - $deps->ValidateRelations( %args ); - - return; -} - 1;