generate a stack backtrace for mystery freeside link resolution problems
[freeside.git] / rt / lib / RT / URI / freeside.pm
index bd617f9..6194fd0 100644 (file)
 # END LICENSE BLOCK
 package RT::URI::freeside;
 
-use RT::URI::base;
+use base qw( RT::URI::base );
 use strict;
-use vars qw(@ISA $IntegrationType);
-@ISA = qw/RT::URI::base/;
+use vars qw( $IntegrationType $URL );
+use Carp qw( cluck );
 
 
 =head1 NAME
@@ -38,8 +38,8 @@ RT::URI::freeside
 
 =head1 DESCRIPTION
 
-URI handler for freeside URIs.  See http://www.sisd.com/freeside/ for
-more information on freeside.
+URI handler for Freeside URIs.  See http://www.freeside.biz/ for more
+information on Freeside.
 
 
 =head1 Public subroutines
@@ -62,7 +62,7 @@ Returns the URL for freeside's web interface.
 
 =cut
 
-sub FreesideURL { return undef; }
+sub FreesideURL { return $URL; }
 
 
 =item FreesideVersion
@@ -132,7 +132,7 @@ sub _FreesideURILabel {
 
   my $self = shift;
 
-  $RT::Logger->debug("Called _FreesideURILabel()");
+  #$RT::Logger->debug("Called _FreesideURILabel()");
 
   return unless (exists($self->{'fstable'}) and
                  exists($self->{'fspkey'}));
@@ -140,17 +140,21 @@ sub _FreesideURILabel {
   my $label;
   my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'});
 
-  if ($table ne 'cust_main') {
-    warn "FS::${table} not currently supported";
-    return;
-  }
+  #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') {
+  if (ref($rec) eq 'HASH' && $table eq 'cust_main') {
     my $name = $rec->{'last'} . ', ' . $rec->{'first'};
     $name = $rec->{'company'} . " ($name)" if $rec->{'company'};
     $label = "$pkey: $name";
+  } elsif ( $table eq 'cust_svc' && ref($rec) && $rec->{'_object'} ) {
+    #Internal only
+    my($l,$v) = $rec->{'_object'}->label;
+    $label = "$l: $v";
   } else {
     $label = "$pkey: $table";
   }
@@ -163,7 +167,7 @@ sub _FreesideURILabel {
 
 }
 
-=item _FreesideURILabel
+=item _FreesideURILabelLong
 
 Method that returns a longer string describing the customer referenced
 in the URI.
@@ -192,10 +196,18 @@ sub ParseURI {
     my ($table, $pkey);
 
     my $uriprefix = $self->_FreesideURIPrefix;
-    if ($uri =~ /^$uriprefix\/(\w+)\/(\d+)$/) {
+    if ($uri =~ /^$uriprefix\/(\w+)\/(\d*)$/) {
+
       $table = $1;
       $pkey = $2;
+
+      unless ( $pkey ) {
+        cluck "bad URL $uri";
+        return(undef);
+      }
+
       $self->{'scheme'} = $self->Scheme;
+
     } else {
       return(undef);
     }