diff options
author | ivan <ivan> | 2003-07-15 13:16:32 +0000 |
---|---|---|
committer | ivan <ivan> | 2003-07-15 13:16:32 +0000 |
commit | 945721f48f74d5cfffef7c7cf3a3d6bc2521f5dd (patch) | |
tree | c874aeac27d37fce2e41d64c3347c99527f6e66d /rt/lib/RT/URI | |
parent | 160be29a0dc62e79a4fb95d2ab8c0c7e5996760e (diff) |
import of rt 3.0.4
Diffstat (limited to 'rt/lib/RT/URI')
-rw-r--r-- | rt/lib/RT/URI/base.pm | 129 | ||||
-rw-r--r-- | rt/lib/RT/URI/fsck_com_rt.pm | 247 |
2 files changed, 376 insertions, 0 deletions
diff --git a/rt/lib/RT/URI/base.pm b/rt/lib/RT/URI/base.pm new file mode 100644 index 000000000..a599f3ad8 --- /dev/null +++ b/rt/lib/RT/URI/base.pm @@ -0,0 +1,129 @@ +# BEGIN LICENSE BLOCK +# +# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# +# (Except where explictly superceded by other copyright notices) +# +# 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 +# been provided with this software, but in any event can be snarfed +# from www.gnu.org. +# +# This work is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# 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. +# +# +# END LICENSE BLOCK +package RT::URI::base; + +use strict; +use base qw(RT::Base); + +=head1 NAME + +RT::URI::base + +=head1 DESCRIPTION + +A baseclass (and fallback) RT::URI handler. Every URI handler needs to +handle the API presented here + +=cut + + +=head1 API + +=head2 new + +Create a new URI handler + +=cut + +sub new { + my $proto = shift; + my $class = ref($proto) || $proto; + my $self = {}; + bless( $self, $class ); + $self->CurrentUser(@_); + return ($self); +} + +sub ParseObject { + my $self = shift; + my $obj = shift; + $self->{'uri'} = "unknown-object:".ref($obj); + + +} + + + +sub ParseURI { + my $self = shift; + my $uri = shift; + + if ($uri =~ /^(.*?):/) { + $self->{'scheme'} = $1; + } + $self->{'uri'} = $uri; + + +} + + +sub Object { + my $self = shift; + return undef; + +} + +sub URI { + my $self = shift; + return($self->{'uri'}); +} + +sub Scheme { + my $self = shift; + return($self->{'scheme'}); + +} + +sub HREF { + my $self = shift; + return($self->{'href'} || $self->{'uri'}); +} + +sub IsLocal { + my $self = shift; + return undef; +} + +=head2 AsString + +Return a "pretty" string representing the URI object. + +This is meant to be used like this: + + % $re = $uri->Resolver; + <A HREF="<% $re->HREF %>"><% $re->AsString %></A> + +=cut + +sub AsString { + my $self = shift; + return $self->URI; +} + +eval "require RT::URI::base_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/URI/base_Vendor.pm}); +eval "require RT::URI::base_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/URI/base_Local.pm}); + +1; diff --git a/rt/lib/RT/URI/fsck_com_rt.pm b/rt/lib/RT/URI/fsck_com_rt.pm new file mode 100644 index 000000000..36e8f82fd --- /dev/null +++ b/rt/lib/RT/URI/fsck_com_rt.pm @@ -0,0 +1,247 @@ +# BEGIN LICENSE BLOCK +# +# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# +# (Except where explictly superceded by other copyright notices) +# +# 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 +# been provided with this software, but in any event can be snarfed +# from www.gnu.org. +# +# This work is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# 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. +# +# +# END LICENSE BLOCK +package RT::URI::fsck_com_rt; + +use RT::Ticket; + +use RT::URI::base; + +use strict; +use vars qw(@ISA); +@ISA = qw/RT::URI::base/; + + + + +=head2 LocalURIPrefix + +Returns the prefix for a local ticket URI + +=begin testing + +use_ok("RT::URI::fsck_com_rt"); +my $uri = RT::URI::fsck_com_rt->new($RT::SystemUser); + +ok(ref($uri)); + +use Data::Dumper; + + +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/'); + +=end testing + + + +=cut + +sub LocalURIPrefix { + my $self = shift; + my $prefix = $self->Scheme. "://$RT::Organization/ticket/"; + return ($prefix); +} + + + + + +=head2 URIForObject RT::Ticket + +Returns the RT URI for a local RT::Ticket 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)); + +=end testing + +=cut + +sub URIForObject { + + my $self = shift; + + my $obj = shift; + return ($self->LocalURIPrefix. $obj->Id); +} + + +=head2 ParseObject $TicketObj + +When handed an RT::Ticekt object, figure out its URI + + +=cut + + + +=head2 ParseURI URI + +When handed an fsck.com-rt: URI, figures out things like whether its a local ticket +and what its ID is + +=cut + + +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+)$/) { + 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; + } +} + +=head2 IsLocal + +Returns true if this URI is for a local ticket. +Returns undef otherwise. + + + +=cut + +sub IsLocal { + my $self = shift; + my $local_uri_prefix = $self->LocalURIPrefix; + if ($self->{'uri'} =~ /^$local_uri_prefix/) { + return 1; + } + else { + return undef; + } +} + + + +=head2 Object + +Returns the object for this URI, if it's local. Otherwise returns undef. + +=cut + +sub Object { + my $self = shift; + return ($self->{'object'}); + +} + +=head2 Scheme + +Return the URI scheme for RT tickets + +=cut + + +sub Scheme { + my $self = shift; + return "fsck.com-rt"; +} + +=head2 HREF + +If this is a local ticket, return an HTTP url to it. +Otherwise, return its URI + +=cut + + +sub HREF { + my $self = shift; + if ($self->IsLocal) { + return ( $RT::WebURL . "Ticket/Display.html?id=".$self->Object->Id); + } + else { + return ($self->URI); + } +} + +=head2 AsString + +Returns either a localized string 'ticket #23' or the full URI if the object is not local + +=cut + +sub AsString { + my $self = shift; + if ($self->IsLocal) { + return $self->loc("ticket #[_1]", $self->Object->Id); + + } + else { + return $self->Object->URI; + } +} + +eval "require RT::URI::fsck_com_rt_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/URI/fsck_com_rt_Vendor.pm}); +eval "require RT::URI::fsck_com_rt_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/URI/fsck_com_rt_Local.pm}); + +1; |