diff options
Diffstat (limited to 'rt/lib/RT/URI')
-rw-r--r-- | rt/lib/RT/URI/base.pm | 151 | ||||
-rw-r--r-- | rt/lib/RT/URI/freeside.pm | 285 | ||||
-rw-r--r-- | rt/lib/RT/URI/freeside/Internal.pm | 138 | ||||
-rw-r--r-- | rt/lib/RT/URI/freeside/XMLRPC.pm | 122 | ||||
-rw-r--r-- | rt/lib/RT/URI/fsck_com_rt.pm | 269 | ||||
-rw-r--r-- | rt/lib/RT/URI/t.pm | 83 |
6 files changed, 0 insertions, 1048 deletions
diff --git a/rt/lib/RT/URI/base.pm b/rt/lib/RT/URI/base.pm deleted file mode 100644 index 56bfef3..0000000 --- a/rt/lib/RT/URI/base.pm +++ /dev/null @@ -1,151 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC -# <jesse@bestpractical.com> -# -# (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 -# 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. -# -# 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 BPS TAGGED 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/freeside.pm b/rt/lib/RT/URI/freeside.pm deleted file mode 100644 index ff1d38d..0000000 --- a/rt/lib/RT/URI/freeside.pm +++ /dev/null @@ -1,285 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com> -# Based on the original RT::URI::base and RT::URI::fsck_com_rt. -# -# 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::freeside; - -use RT::URI::base; -use strict; -use vars qw(@ISA $IntegrationType $URL); -@ISA = qw/RT::URI::base/; - - -=head1 NAME - -RT::URI::freeside - -=head1 DESCRIPTION - -URI handler for freeside URIs. See http://www.sisd.com/freeside/ for -more information on freeside. - - -=head1 Public subroutines - -=over 4 - -=item FreesideGetConfig CONFKEY - -Subroutine that returns the freeside's configuration value(s) for CONFKEY -as a scalar or list. - -=cut - -sub FreesideGetConfig { return undef; } - - -=item FreesideURL - -Returns the URL for freeside's web interface. - -=cut - -sub FreesideURL { return $URL; } - - -=item FreesideVersion - -Returns a string describing the freeside version being used. - -=cut - -sub FreesideVersion { return undef; } - - -=item smart_search - -A wrapper for the FS::cust_main::smart_search subroutine. - -=cut - -sub smart_search { return undef; } - - -=item small_custview - -A wrapper for the FS::CGI::small_custview subroutine. - -=cut - -sub small_custview { return 'Freeside integration error!</A>'; } - - -=back - -=head1 Private methods - -=over 4 - -=item _FreesideGetRecord - -Method returns a hashref of the freeside record referenced in the URI. -Must be called after ParseURI. - -=cut - -sub _FreesideGetRecord { return undef; } - - -=item _FreesideURIPrefix - -Method that returns the URI prefix for freeside URIs. - -=cut - -sub _FreesideURIPrefix { - - my $self = shift; - return($self->Scheme . '://freeside'); - -} - -=item _FreesideURILabel - -Method that returns a short string describing the customer referenced -in the URI. - -=cut - -sub _FreesideURILabel { - - my $self = shift; - - $RT::Logger->debug("Called _FreesideURILabel()"); - - return unless (exists($self->{'fstable'}) and - exists($self->{'fspkey'})); - - my $label; - my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'}); - - if ($table ne 'cust_main') { - warn "FS::${table} not currently supported"; - return; - } - - my $rec = $self->_FreesideGetRecord(); - - if (ref($rec) eq 'HASH' and $table eq 'cust_main') { - my $name = $rec->{'last'} . ', ' . $rec->{'first'}; - $name = $rec->{'company'} . " ($name)" if $rec->{'company'}; - $label = "$pkey: $name"; - } else { - $label = "$pkey: $table"; - } - - if ($label and !$@) { - return($label); - } else { - return; - } - -} - -=item _FreesideURILabelLong - -Method that returns a longer string describing the customer referenced -in the URI. - -=cut - -sub _FreesideURILabelLong { - - my $self = shift; - - return $self->_FreesideURILabel(); - -} - -=back - -=head1 Public methods - -=over 4 - -=cut - -sub ParseURI { - my $self = shift; - my $uri = shift; - my ($table, $pkey); - - my $uriprefix = $self->_FreesideURIPrefix; - if ($uri =~ /^$uriprefix\/(\w+)\/(\d+)$/) { - $table = $1; - $pkey = $2; - $self->{'scheme'} = $self->Scheme; - } else { - return(undef); - } - - $self->{'uri'} = "${uriprefix}/${table}/${pkey}"; - $self->{'fstable'} = $table; - $self->{'fspkey'} = $pkey; - - - my $url = $self->FreesideURL(); - - if ($url ne '') { - $self->{'href'} = "${url}/view/${table}.cgi?${pkey}"; - } else { - $self->{'href'} = $self->{'uri'}; - } - - $self->{'uri'}; - -} - -sub Scheme { - my $self = shift; - return('freeside'); - -} - -sub HREF { - my $self = shift; - return($self->{'href'} || $self->{'uri'}); -} - -sub IsLocal { - my $self = shift; - return undef; -} - -=item 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; - my $prettystring; - if ($prettystring = $self->_FreesideURILabel) { - return $prettystring; - } else { - return $self->URI; - } -} - -=item AsStringLong - -Return a longer (HTML) string representing the URI object. - -=cut - -sub AsStringLong { - my $self = shift; - my $prettystring; - if ($prettystring = $self->_FreesideURILabelLong || $self->_FreesideURILabel){ - return $prettystring; - } else { - return $self->URI; - } -} - -$IntegrationType ||= 'Internal'; -eval "require RT::URI::freeside::${RT::URI::freeside::IntegrationType}"; -warn $@ if $@; -if ($@ && - $@ !~ qr(^Can't locate RT/URI/freeside/${RT::URI::freeside::IntegrationType}.pm)) { - die $@; -}; - -=back - -=cut - -1; diff --git a/rt/lib/RT/URI/freeside/Internal.pm b/rt/lib/RT/URI/freeside/Internal.pm deleted file mode 100644 index 9ca0630..0000000 --- a/rt/lib/RT/URI/freeside/Internal.pm +++ /dev/null @@ -1,138 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com> -# Based on the original RT::URI::base and RT::URI::fsck_com_rt. -# -# 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 -# -use strict; -no warnings qw(redefine); - -#use vars qw($conf); - -use FS; -use FS::UID qw(dbh); -use FS::CGI qw(popurl small_custview); -use FS::Conf; -use FS::Record qw(qsearchs qsearch dbdef); -use FS::cust_main; -use FS::cust_svc; - -=head1 NAME - -RT::URI::freeside::Internal - -=head1 DESCRIPTION - -Overlay for the RT::URI::freeside URI handler implementing the Internal integration type. - -See L<RT::URI::freeside> for public/private interface documentation. - -=cut - - - -sub _FreesideGetRecord { - - my $self = shift; - my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'}); - - $RT::Logger->debug("Called _FreesideGetRecord()"); - - #eval "use FS::$table;"; - - my $dbdef = dbdef; - unless ($dbdef) { - $RT::Logger->error("Using Internal freeside integration type, ". - "but it doesn't look like we're running under ". - "freeside's Mason handler."); - return; - } - - my $pkeyfield = $dbdef->table($table)->primary_key; - unless ($pkeyfield) { - $RT::Logger->error("No primary key for freeside table '$table'"); - return; - } - - my $fsrec = qsearchs($table, { $pkeyfield => $pkey }); - unless ($fsrec) { - $RT::Logger->error("Record with '$pkeyfield' == '$pkey' does " . - "not exist in table $table"); - return; - } - - return { $fsrec->hash, '_object' => $fsrec }; - -} - -sub FreesideVersion { - - return $FS::VERSION; - -} - -sub FreesideGetConfig { - - #$conf = new FS::Conf unless ref($conf); - my $conf = new FS::Conf; - - return scalar($conf->config(@_)); - -} - -sub smart_search { #Subroutine - - return map { { $_->hash } } &FS::cust_main::smart_search(@_); - -} - -sub small_custview { - - return &FS::CGI::small_custview(@_); - -} - -sub _FreesideURILabelLong { - - my $self = shift; - - my $table = $self->{'fstable'}; - - if ( $table eq 'cust_main' ) { - - my $rec = $self->_FreesideGetRecord(); - return small_custview( $rec->{'_object'}, - scalar(FS::Conf->new->config('countrydefault')), - 1 #nobalance - ); - - } else { - - return $self->_FreesideURILabel(); - - } - -} - -1; diff --git a/rt/lib/RT/URI/freeside/XMLRPC.pm b/rt/lib/RT/URI/freeside/XMLRPC.pm deleted file mode 100644 index a8a731f..0000000 --- a/rt/lib/RT/URI/freeside/XMLRPC.pm +++ /dev/null @@ -1,122 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com> -# Based on the original RT::URI::base and RT::URI::fsck_com_rt. -# -# 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 - -use strict; -no warnings qw(redefine); - -use vars qw($XMLRPC_URL $_FS_VERSION); - -use Frontier::Client; - -=head1 NAME - -RT::URI::freeside::XMLRPC - -=head1 DESCRIPTION - -Overlay for the RT::URI::freeside URI handler implementing the XMLRPC integration type. - -See L<RT::URI::freeside> for public/private interface documentation. - -=cut - - -sub _XMLRPCRequest { #Subroutine - - my $method = shift; - my @args = @_; - - my $result; - eval { - my $server = new Frontier::Client ( url => $XMLRPC_URL ); - $result = $server->call($method, @args); - }; - - if (not $@ and ref($result) eq 'ARRAY') { - return (scalar(@$result) == 1) ? @$result[0] : @$result; - } else { - $RT::Logger->debug("Freeside XMLRPC: " . $result || $@); - return (); - } - -} - -sub _FreesideGetRecord { - - my $self = shift; - my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'}); - my $record; - - $RT::Logger->debug("Called XMLRPC::_FreesideGetRecord()"); - - #FIXME: Need a better way to get primary keys. - # Maybe create a method for it and cache them like version? - my %table_pkeys = ( - cust_main => 'custnum', - ); - - my $method = 'Record.qsearchs'; - my @args = ($table, { $table_pkeys{$table} => $pkey }); - my ($record) = &_XMLRPCRequest($method, @args); - - return $record; - -} - - -sub FreesideGetConfig { - - return _XMLRPCRequest('Conf.config', @_); - -} - - -sub FreesideVersion { - - return $_FS_VERSION if ($_FS_VERSION =~ /^\d+\.\d+\.\d+/); - - $RT::Logger->debug("Requesting freeside version..."); - ($_FS_VERSION) = &_XMLRPCRequest('version'); - $RT::Logger->debug("Cached freeside version: ${_FS_VERSION}"); - - return $_FS_VERSION; - -} - -sub smart_search { #Subroutine - - return _XMLRPCRequest('cust_main.smart_search', @_); - -} - -sub small_custview { - - return _XMLRPCRequest('CGI.small_custview', @_); - -} - -1; diff --git a/rt/lib/RT/URI/fsck_com_rt.pm b/rt/lib/RT/URI/fsck_com_rt.pm deleted file mode 100644 index ba98b1d..0000000 --- a/rt/lib/RT/URI/fsck_com_rt.pm +++ /dev/null @@ -1,269 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC -# <jesse@bestpractical.com> -# -# (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 -# 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. -# -# 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 BPS TAGGED 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 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://'.$RT::Organization); - -=end testing - - - -=cut - -sub LocalURIPrefix { - my $self = shift; - - 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::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. "/ticket/1" , $uri->URIForObject($ticket)); - -=end testing - -=cut - -sub URIForObject { - my $self = shift; - my $obj = shift; - return ($self->LocalURIPrefix."/".$self->ObjectType($obj)."/". $obj->Id); -} - - -=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; - } - - #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 $type = $1; - my $id = $2; - - if ( $type eq 'ticket' ) { $type = 'RT::Ticket' } - - # 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); - - if ( $record->Id ) { - $self->{'object'} = $record; - return ( $record->Id ); - } - } - - } - } - 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/i) { - 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 records - -=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 && $self->Object && ($self->ObjectType eq 'ticket')) { - 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 && $self->Object) { - return $self->loc("[_1] #[_2]", $self->ObjectType, $self->Object->Id); - } - else { - return $self->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; diff --git a/rt/lib/RT/URI/t.pm b/rt/lib/RT/URI/t.pm deleted file mode 100644 index 2f95b2d..0000000 --- a/rt/lib/RT/URI/t.pm +++ /dev/null @@ -1,83 +0,0 @@ -# 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::t; - -use RT::Ticket; -use RT::URI::base; - -use strict; -use vars qw(@ISA); -@ISA = qw/RT::URI::fsck_com_rt/; - -my $scheme = "t"; - -=head2 ParseURI URI - -When handed an t: URI, figures out if it is an RT ticket. This is an -alternate short form of specifying a full ticket URI. - -=begin testing - -use_ok("RT::URI::t"); -my $uri = RT::URI::t->new($RT::SystemUser); -ok(ref($uri), "URI object exists"); - -my $uristr = "t:1"; -$uri->ParseURI($uristr); -is(ref($uri->Object), "RT::Ticket", "Object loaded is a ticket"); -is($uri->Object->Id, 1, "Object loaded has correct ID"); -is($uri->URI, 'fsck.com-rt://'.$RT::Organization.'/ticket/1', - "URI object has correct URI string"); - -=end testing - -=cut - -sub ParseURI { - my $self = shift; - my $uri = shift; - - # "t:<articlenum>" - # Pass this off to fsck_com_rt, which is equipped to deal with - # tickets after stripping off the t: prefix. - - if ($uri =~ /^$scheme:(\d+)/) { - return $self->SUPER::ParseURI($1); - } else { - $self->{'uri'} = $uri; - return undef; - } -} - -=head2 Scheme - -Return the URI scheme - -=cut - -sub Scheme { - return $scheme; -} - -1; |