freeside/rt/lib/RT/URI freeside.pm,1.2,1.3

Kristian Hoffmann khoff at pouncequick.420.am
Thu Mar 10 17:34:35 PST 2005


Update of /home/cvs/cvsroot/freeside/rt/lib/RT/URI
In directory pouncequick:/tmp/cvs-serv2432/rt/lib/RT/URI

Modified Files:
	freeside.pm 
Log Message:
Reorganized RT->Freeside integration to support Internal (single RT/Freeside database) and XMLRPC interfaces.
All the UI stuff is handled the same either way.
Integration type is changed by setting $RT::URI::freeside::IntegrationType to either 'Internal' or 'XMLRPC' in your RT_SiteConfig.pm.


Index: freeside.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/rt/lib/RT/URI/freeside.pm,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- freeside.pm	2 Dec 2004 09:59:48 -0000	1.2
+++ freeside.pm	11 Mar 2005 01:34:31 -0000	1.3
@@ -28,143 +28,170 @@
 
 use RT::URI::base;
 use strict;
-use vars qw(@ISA);
-
+use vars qw(@ISA $IntegrationType);
 @ISA = qw/RT::URI::base/;
 
 
 =head1 NAME
 
-RT::URI::base
+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; }
 
-sub FreesideURIPrefix {
+
+=item FreesideURL
+
+Returns the URL for freeside's web interface.
+
+=cut
+
+sub FreesideURL { return undef; }
+
+
+=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');
 
 }
 
-sub FreesideURILabel {
+=item _FreesideURILabel
 
-  my $self = shift;
+Method that returns a short string describing the customer referenced
+in the URI.
 
-  return(undef) unless (exists($self->{'fstable'}) and
-                        exists($self->{'fspkey'}));
+=cut
 
-  my $label;
-  my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'});
+sub _FreesideURILabel {
 
-  eval {
-    use FS::UID qw(dbh);
-    use FS::Record qw(qsearchs qsearch dbdef);
-    eval "use FS::$table;";
-    use FS::cust_svc;
+  my $self = shift;
 
-    my $dbdef = dbdef or die "No dbdef";
-    my $pkeyfield = $dbdef->table($table)->primary_key
-      or die "No primary key for table $table";
+  $RT::Logger->debug("Called _FreesideURILabel()");
 
-    my $rec = qsearchs($table, { $pkeyfield => $pkey })
-      or die "Record with $pkeyfield == $pkey does not exist in table $table";
+  return unless (exists($self->{'fstable'}) and
+                 exists($self->{'fspkey'}));
 
-    if ($table =~ /^svc_/) {
-      if ($rec->can('cust_svc')) {
-        my $cust_svc = $rec->cust_svc or die '$rec->cust_svc failed';
-        my ($svc, $tag, $svcdb) = $cust_svc->label;
-        $label = "Freeside service ${svc}: ${tag}";
-      }
-    } elsif ($table eq 'cust_main') {
-      #my ($last, $first, $company) = map { $rec->getfield($_) }
-      #                                   qw(last first company);
-      #$label = "Freeside customer ${last}, ${first}";
-      #$label .= ($company ne '') ? " with ${company}" : '';
-      $label = "$pkey: ". $rec->name;
-    } else {
-      $label = "Freeside ${table}, ${pkeyfield} == ${pkey}";
-    }
+  my $label;
+  my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'});
 
-    #... other cases
+  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(undef);
+    return;
   }
-      
 
 }
 
-sub FreesideURILabelLong {
-
-  my $self = shift;
+=item _FreesideURILabel
 
-  return(undef) unless (exists($self->{'fstable'}) and
-                        exists($self->{'fspkey'}));
+Method that returns a longer string describing the customer referenced
+in the URI.
 
-  my $label;
-  my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'});
+=cut
 
-  eval {
-    use FS::UID qw(dbh);
-    use FS::Record qw(qsearchs qsearch dbdef);
-    eval "use FS::$table;";
-    use FS::cust_svc;
+sub _FreesideURILabelLong {
 
-    my $dbdef = dbdef or die "No dbdef";
-    my $pkeyfield = $dbdef->table($table)->primary_key
-      or die "No primary key for table $table";
+  my $self = shift;
 
-    my $rec = qsearchs($table, { $pkeyfield => $pkey })
-      or die "Record with $pkeyfield == $pkey does not exist in table $table";
+  return $self->_FreesideURILabel();
 
-    if ($table =~ /^svc_/) {
-      #if ($rec->can('cust_svc')) {
-      #  my $cust_svc = $rec->cust_svc or die '$rec->cust_svc failed';
-      #  my ($svc, $tag, $svcdb) = $cust_svc->label;
-      #  $label = "Freeside service ${svc}: ${tag}";
-      #}
-      $label = '';
-    } elsif ($table eq 'cust_main') {
-      use FS::CGI qw(small_custview);
-      $label = small_custview( $rec,
-                               scalar(FS::Conf->new->config('countrydefault')),
-                               1 #nobalance
-                             );
-    } else {
-      #$label = "Freeside ${table}, ${pkeyfield} == ${pkey}";
-      $label = '';
-    }
+}
 
-    #... other cases
+=back
 
-  };
+=head1 Public methods
 
-  if ($label and !$@) {
-    return($label);
-  } else {
-    warn $@;
-    return(undef);
-  }
-      
+=over 4
 
-}
+=cut
 
 sub ParseURI { 
     my $self = shift;
     my $uri = shift;
     my ($table, $pkey);
 
-    my $uriprefix = $self->FreesideURIPrefix;
+    my $uriprefix = $self->_FreesideURIPrefix;
     if ($uri =~ /^$uriprefix\/(\w+)\/(\d+)$/) {
       $table = $1;
       $pkey = $2;
@@ -177,22 +204,13 @@
     $self->{'fstable'} = $table;
     $self->{'fspkey'} = $pkey;
 
-    my $p;
-
-    eval {
-      use FS::UID qw(dbh);
-      use FS::CGI qw(popurl);
-
-      if (dbh) {
-	$p = popurl(3);
-      }
 
-    };
+    my $url = $self->FreesideURL();
 
-    if ($@ or (!$p)) {
-      $self->{'href'} = $self->{'uri'};
+    if ($url ne '') {
+      $self->{'href'} = "${url}/view/${table}.cgi?${pkey}";
     } else {
-      $self->{'href'} = "${p}view/${table}.cgi?${pkey}";
+      $self->{'href'} = $self->{'uri'};
     }
 
     $self->{'uri'};
@@ -215,7 +233,7 @@
     return undef;
 }
 
-=head2 AsString
+=item AsString
 
 Return a "pretty" string representing the URI object.
 
@@ -229,14 +247,14 @@
 sub AsString {
     my $self = shift;
     my $prettystring;
-    if ($prettystring = $self->FreesideURILabel) {
+    if ($prettystring = $self->_FreesideURILabel) {
       return $prettystring;
     } else {
       return $self->URI;
     }
 }
 
-=head2 AsStringLong
+=item AsStringLong
 
 Return a longer (HTML) string representing the URI object.
 
@@ -245,16 +263,23 @@
 sub AsStringLong {
     my $self = shift;
     my $prettystring;
-    if ($prettystring = $self->FreesideURILabelLong || $self->FreesideURILabel){
+    if ($prettystring = $self->_FreesideURILabelLong || $self->_FreesideURILabel){
       return $prettystring;
     } else {
       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});
+$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;




More information about the freeside-commits mailing list