X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FLink.pm;h=bd8ad615eed522c28e94cf43039984efaff9b808;hb=31f3763747b82764bb019cfab5b2a2945fc9a99d;hp=027962e5f8f0b47867dafb37c10c09089da89bdf;hpb=fc6209f398899f0211cfcedeb81a3cd65e04a941;p=freeside.git diff --git a/rt/lib/RT/Link.pm b/rt/lib/RT/Link.pm index 027962e5f..bd8ad615e 100644 --- a/rt/lib/RT/Link.pm +++ b/rt/lib/RT/Link.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -46,86 +46,229 @@ # # END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - =head1 NAME -RT::Link - + RT::Link - an RT Link object =head1 SYNOPSIS + use RT::Link; + =head1 DESCRIPTION +This module should never be called directly by client code. it's an internal module which +should only be accessed through exported APIs in Ticket other similar objects. + =head1 METHODS + + =cut + package RT::Link; -use RT::Record; +use strict; +use warnings; + + + +use base 'RT::Record'; + +sub Table {'Links'} +use Carp; +use RT::URI; + + + +=head2 Create PARAMHASH -use vars qw( @ISA ); -@ISA= qw( RT::Record ); +Create a new link object. Takes 'Base', 'Target' and 'Type'. +Returns undef on failure or a Link Id on success. -sub _Init { - my $self = shift; +=cut - $self->Table('Links'); - $self->SUPER::_Init(@_); +sub Create { + my $self = shift; + my %args = ( Base => undef, + Target => undef, + Type => undef, + @_ ); + + my $base = RT::URI->new( $self->CurrentUser ); + unless ($base->FromURI( $args{'Base'} )) { + my $msg = $self->loc("Couldn't resolve base '[_1]' into a URI.", $args{'Base'}); + $RT::Logger->warning( "$self $msg" ); + return wantarray ? (undef, $msg) : undef; + } + + my $target = RT::URI->new( $self->CurrentUser ); + unless ($target->FromURI( $args{'Target'} )) { + my $msg = $self->loc("Couldn't resolve target '[_1]' into a URI.", $args{'Target'}); + $RT::Logger->warning( "$self $msg" ); + return wantarray ? (undef, $msg) : undef; + } + + my $base_id = 0; + my $target_id = 0; + + + + + if ( $base->IsLocal ) { + my $object = $base->Object; + unless (UNIVERSAL::can($object, 'Id')) { + return (undef, $self->loc("[_1] appears to be a local object, but can't be found in the database", $args{'Base'})); + + } + $base_id = $object->Id if UNIVERSAL::isa($object, 'RT::Ticket'); + } + if ( $target->IsLocal ) { + my $object = $target->Object; + unless (UNIVERSAL::can($object, 'Id')) { + return (undef, $self->loc("[_1] appears to be a local object, but can't be found in the database", $args{'Target'})); + + } + $target_id = $object->Id if UNIVERSAL::isa($object, 'RT::Ticket'); + } + + # We don't want references to ourself + if ( $base->URI eq $target->URI ) { + return ( 0, $self->loc("Can't link a ticket to itself") ); + } + + # }}} + + my ( $id, $msg ) = $self->SUPER::Create( Base => $base->URI, + Target => $target->URI, + LocalBase => $base_id, + LocalTarget => $target_id, + Type => $args{'Type'} ); + return ( $id, $msg ); } + # sub LoadByParams + +=head2 LoadByParams + Load an RT::Link object from the database. Takes three parameters + + Base => undef, + Target => undef, + Type =>undef + + Base and Target are expected to be integers which refer to Tickets or URIs + Type is the link type +=cut +sub LoadByParams { + my $self = shift; + my %args = ( Base => undef, + Target => undef, + Type => undef, + @_ ); + + my $base = RT::URI->new($self->CurrentUser); + $base->FromURI( $args{'Base'} ) + or return (0, $self->loc("Couldn't parse Base URI: [_1]", $args{Base})); + + my $target = RT::URI->new($self->CurrentUser); + $target->FromURI( $args{'Target'} ) + or return (0, $self->loc("Couldn't parse Target URI: [_1]", $args{Target})); + + my ( $id, $msg ) = $self->LoadByCols( Base => $base->URI, + Type => $args{'Type'}, + Target => $target->URI ); + + unless ($id) { + return ( 0, $self->loc("Couldn't load link: [_1]", $msg) ); + } else { + return ($id, $msg); + } +} -=head2 Create PARAMHASH -Create takes a hash of values and creates a row in the database: +=head2 Load + + Load an RT::Link object from the database. Takes one parameter, the id of an entry in the links table. - varchar(240) 'Base'. - varchar(240) 'Target'. - varchar(20) 'Type'. - int(11) 'LocalTarget'. - int(11) 'LocalBase'. =cut +sub Load { + my $self = shift; + my $identifier = shift; -sub Create { + + if ( $identifier !~ /^\d+$/ ) { + return ( 0, $self->loc("That's not a numerical id") ); + } + else { + my ( $id, $msg ) = $self->LoadById($identifier); + unless ( $self->Id ) { + return ( 0, $self->loc("Couldn't load link") ); + } + return ( $id, $msg ); + } +} + + + + +=head2 TargetURI + +returns an RT::URI object for the "Target" of this link. + +=cut + +sub TargetURI { my $self = shift; - my %args = ( - Base => '', - Target => '', - Type => '', - LocalTarget => '0', - LocalBase => '0', - - @_); - $self->SUPER::Create( - Base => $args{'Base'}, - Target => $args{'Target'}, - Type => $args{'Type'}, - LocalTarget => $args{'LocalTarget'}, - LocalBase => $args{'LocalBase'}, -); + my $URI = RT::URI->new($self->CurrentUser); + $URI->FromURI($self->Target); + return ($URI); +} + + +=head2 TargetObj +=cut + +sub TargetObj { + my $self = shift; + return $self->TargetURI->Object; } +=head2 BaseURI + +returns an RT::URI object for the "Base" of this link. + +=cut + +sub BaseURI { + my $self = shift; + my $URI = RT::URI->new($self->CurrentUser); + $URI->FromURI($self->Base); + return ($URI); +} + + +=head2 BaseObj + +=cut + +sub BaseObj { + my $self = shift; + return $self->BaseURI->Object; +} + =head2 id -Returns the current value of id. +Returns the current value of id. (In the database, id is stored as int(11).) @@ -134,7 +277,7 @@ Returns the current value of id. =head2 Base -Returns the current value of Base. +Returns the current value of Base. (In the database, Base is stored as varchar(240).) @@ -142,7 +285,7 @@ Returns the current value of Base. =head2 SetBase VALUE -Set Base to VALUE. +Set Base to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Base will be stored as a varchar(240).) @@ -152,7 +295,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =head2 Target -Returns the current value of Target. +Returns the current value of Target. (In the database, Target is stored as varchar(240).) @@ -160,7 +303,7 @@ Returns the current value of Target. =head2 SetTarget VALUE -Set Target to VALUE. +Set Target to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Target will be stored as a varchar(240).) @@ -170,7 +313,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =head2 Type -Returns the current value of Type. +Returns the current value of Type. (In the database, Type is stored as varchar(20).) @@ -178,7 +321,7 @@ Returns the current value of Type. =head2 SetType VALUE -Set Type to VALUE. +Set Type to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, Type will be stored as a varchar(20).) @@ -188,7 +331,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =head2 LocalTarget -Returns the current value of LocalTarget. +Returns the current value of LocalTarget. (In the database, LocalTarget is stored as int(11).) @@ -196,7 +339,7 @@ Returns the current value of LocalTarget. =head2 SetLocalTarget VALUE -Set LocalTarget to VALUE. +Set LocalTarget to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, LocalTarget will be stored as a int(11).) @@ -206,7 +349,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =head2 LocalBase -Returns the current value of LocalBase. +Returns the current value of LocalBase. (In the database, LocalBase is stored as int(11).) @@ -214,7 +357,7 @@ Returns the current value of LocalBase. =head2 SetLocalBase VALUE -Set LocalBase to VALUE. +Set LocalBase to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. (In the database, LocalBase will be stored as a int(11).) @@ -224,7 +367,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =head2 LastUpdatedBy -Returns the current value of LastUpdatedBy. +Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -233,7 +376,7 @@ Returns the current value of LastUpdatedBy. =head2 LastUpdated -Returns the current value of LastUpdated. +Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -242,7 +385,7 @@ Returns the current value of LastUpdated. =head2 Creator -Returns the current value of Creator. +Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -251,7 +394,7 @@ Returns the current value of Creator. =head2 Created -Returns the current value of Created. +Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -261,67 +404,31 @@ Returns the current value of Created. sub _CoreAccessible { { - + id => {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - Base => + Base => {read => 1, write => 1, sql_type => 12, length => 240, is_blob => 0, is_numeric => 0, type => 'varchar(240)', default => ''}, - Target => + Target => {read => 1, write => 1, sql_type => 12, length => 240, is_blob => 0, is_numeric => 0, type => 'varchar(240)', default => ''}, - Type => + Type => {read => 1, write => 1, sql_type => 12, length => 20, is_blob => 0, is_numeric => 0, type => 'varchar(20)', default => ''}, - LocalTarget => + LocalTarget => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LocalBase => + LocalBase => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LastUpdatedBy => + LastUpdatedBy => {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LastUpdated => + LastUpdated => {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - Creator => + Creator => {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Created => + Created => {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; - - eval "require RT::Link_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Link_Overlay.pm}) { - die $@; - }; - - eval "require RT::Link_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Link_Vendor.pm}) { - die $@; - }; - - eval "require RT::Link_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Link_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Link_Overlay, RT::Link_Vendor, RT::Link_Local - -=cut - +RT::Base->_ImportOverlays(); 1;