X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FURI%2Ffsck_com_rt.pm;h=bb2c188f9f9ed6f272a038cd3c68492f98ff149f;hp=4035776efcf48cbf2e73642e6bf74647a78ef5fb;hb=9c68254528b6f2c7d8c1921b452fa56064783782;hpb=289340780927b5bac2c7604d7317c3063c6dd8cc diff --git a/rt/lib/RT/URI/fsck_com_rt.pm b/rt/lib/RT/URI/fsck_com_rt.pm index 4035776ef..bb2c188f9 100644 --- a/rt/lib/RT/URI/fsck_com_rt.pm +++ b/rt/lib/RT/URI/fsck_com_rt.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# # -# (Except where explictly superceded by other copyright notices) +# (Except where explicitly superseded by other copyright notices) +# +# +# LICENSE: # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::URI::fsck_com_rt; use RT::Ticket; @@ -34,9 +56,9 @@ use vars qw(@ISA); -=head2 LocalURIPrefix +=head2 LocalURIPrefix -Returns the prefix for a local ticket URI +Returns the prefix for a local URI. =begin testing @@ -53,7 +75,7 @@ ok (UNIVERSAL::isa($uri,RT::URI::fsck_com_rt), "It's an RT::URI::fsck_com_rt"); ok ($uri->isa('RT::URI::base'), "It's an RT::URI::base"); ok ($uri->isa('RT::Base'), "It's an RT::Base"); -is ($uri->LocalURIPrefix , 'fsck.com-rt://example.com/ticket/'); +is ($uri->LocalURIPrefix , 'fsck.com-rt://'.$RT::Organization); =end testing @@ -63,99 +85,99 @@ is ($uri->LocalURIPrefix , 'fsck.com-rt://example.com/ticket/'); sub LocalURIPrefix { my $self = shift; - my $prefix = $self->Scheme. "://$RT::Organization/ticket/"; + + my $prefix = $self->Scheme. "://$RT::Organization"; + return ($prefix); } +=head2 ObjectType + +=cut + +sub ObjectType { + my $self = shift; + my $object = shift || $self->Object; + my $type = 'ticket'; + if (ref($object) && (ref($object) ne 'RT::Ticket')) { + $type = ref($object); + } + + return ($type); +} -=head2 URIForObject RT::Ticket -Returns the RT URI for a local RT::Ticket object +=head2 URIForObject RT::Record + +Returns the RT URI for a local RT::Record object =begin testing my $ticket = RT::Ticket->new($RT::SystemUser); $ticket->Load(1); my $uri = RT::URI::fsck_com_rt->new($ticket->CurrentUser); -is($uri->LocalURIPrefix . "1" , $uri->URIForObject($ticket)); +is($uri->LocalURIPrefix. "/ticket/1" , $uri->URIForObject($ticket)); =end testing =cut sub URIForObject { - my $self = shift; - my $obj = shift; - return ($self->LocalURIPrefix. $obj->Id); + return ($self->LocalURIPrefix ."/". $self->ObjectType($obj) ."/". $obj->Id); } -=head2 ParseObject $TicketObj - -When handed an RT::Ticekt object, figure out its URI +=head2 ParseURI URI +When handed an fsck.com-rt: URI, figures out things like whether its a local record and what its ID is =cut +sub ParseURI { + my $self = shift; + my $uri = shift; + + if ( $uri =~ /^\d+$/ ) { + my $ticket = RT::Ticket->new( $self->CurrentUser ); + $ticket->Load( $uri ); + $self->{'uri'} = $ticket->URI; + $self->{'object'} = $ticket; + return ($ticket->id); + } + else { + $self->{'uri'} = $uri; + } -=head2 ParseURI URI + #If it's a local URI, load the ticket object and return its URI + if ( $self->IsLocal ) { + my $local_uri_prefix = $self->LocalURIPrefix; + if ( $self->{'uri'} =~ /^\Q$local_uri_prefix\E\/(.*?)\/(\d+)$/i ) { + my $type = $1; + my $id = $2; -When handed an fsck.com-rt: URI, figures out things like whether its a local ticket -and what its ID is + if ( $type eq 'ticket' ) { $type = 'RT::Ticket' } -=cut + # We can instantiate any RT::Record subtype. but not anything else + if ( UNIVERSAL::isa( $type, 'RT::Record' ) ) { + my $record = $type->new( $self->CurrentUser ); + $record->Load($id); -sub ParseURI { - my $self = shift; - my $uri = shift; - - my $ticket; - - if ($uri =~ /^(\d+)$/) { - $ticket = RT::Ticket->new($self->CurrentUser); - $ticket->Load($uri); - $self->{'uri'} = $ticket->URI; - } - else { - $self->{'uri'} = $uri; - } - - - - #If it's a local URI, load the ticket object and return its URI - if ( $self->IsLocal) { - - my $local_uri_prefix = $self->LocalURIPrefix; - if ($self->{'uri'} =~ /^$local_uri_prefix(\d+)$/i) { - my $id = $1; - - - $ticket = RT::Ticket->new( $self->CurrentUser ); - $ticket->Load($id); - - #If we couldn't find a ticket, return undef. - unless ( defined $ticket->Id ) { - return undef; - } - } else { - return undef; - } - } - - $self->{'object'} = $ticket; - if ( UNIVERSAL::can( $ticket, 'Id' ) ) { - return ( $ticket->Id ); - } - else { - return undef; + if ( $record->Id ) { + $self->{'object'} = $record; + return ( $record->Id ); + } + } + + } } + return undef; } =head2 IsLocal @@ -169,9 +191,9 @@ Returns undef otherwise. sub IsLocal { my $self = shift; - my $local_uri_prefix = $self->LocalURIPrefix; - if ($self->{'uri'} =~ /^$local_uri_prefix/i) { - return 1; + my $local_uri_prefix = $self->LocalURIPrefix; + if ( $self->{'uri'} =~ /^\Q$local_uri_prefix/i ) { + return 1; } else { return undef; @@ -194,7 +216,7 @@ sub Object { =head2 Scheme -Return the URI scheme for RT tickets +Return the URI scheme for RT records =cut @@ -214,7 +236,7 @@ Otherwise, return its URI sub HREF { my $self = shift; - if ($self->IsLocal && $self->Object) { + if ($self->IsLocal && $self->Object && ($self->ObjectType eq 'ticket')) { return ( $RT::WebURL . "Ticket/Display.html?id=".$self->Object->Id); } else { @@ -231,7 +253,7 @@ Returns either a localized string 'ticket #23' or the full URI if the object is sub AsString { my $self = shift; if ($self->IsLocal && $self->Object) { - return $self->loc("ticket #[_1]", $self->Object->Id); + return $self->loc("[_1] #[_2]", $self->ObjectType, $self->Object->Id); } else { return $self->URI;