X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FURI%2Ffreeside.pm;h=33845dda603604aadc69c5b3c10fb0ee3780b06e;hb=09aa4ca78df448f73e440a25a024e44eaf00c827;hp=ebd24ad606531af5e7bb06b97ea6fefd4bb29d44;hpb=f7fd2a3e34da751cbc02bbf215e99c6dc89adc15;p=freeside.git diff --git a/rt/lib/RT/URI/freeside.pm b/rt/lib/RT/URI/freeside.pm index ebd24ad60..33845dda6 100644 --- a/rt/lib/RT/URI/freeside.pm +++ b/rt/lib/RT/URI/freeside.pm @@ -26,149 +26,197 @@ # END LICENSE BLOCK package RT::URI::freeside; -use RT::URI::base; +use base qw( RT::URI::base ); use strict; -use vars qw(@ISA); - -@ISA = qw/RT::URI::base/; +use vars qw( $IntegrationType $URL ); +use Carp qw( cluck ); =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. +URI handler for Freeside URIs. See http://www.freeside.biz/ 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 { - my $self = shift; - return($self->Scheme . '://freeside'); +=item FreesideURL -} +Returns the URL for freeside's web interface. -sub FreesideURILabel { +=cut - my $self = shift; +sub FreesideURL { return $URL; } - return(undef) unless (exists($self->{'fstable'}) and - exists($self->{'fspkey'})); - my $label; - my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'}); +=item FreesideVersion - eval { - use FS::UID qw(dbh); - use FS::Record qw(qsearchs qsearch dbdef); - eval "use FS::$table;"; - use FS::cust_svc; +Returns a string describing the freeside version being used. - my $dbdef = dbdef or die "No dbdef"; - my $pkeyfield = $dbdef->table($table)->primary_key - or die "No primary key for table $table"; +=cut - my $rec = qsearchs($table, { $pkeyfield => $pkey }) - or die "Record with $pkeyfield == $pkey does not exist in table $table"; +sub FreesideVersion { return undef; } - 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}"; - } - #... other cases +=item smart_search - }; +A wrapper for the FS::cust_main::smart_search subroutine. - if ($label and !$@) { - return($label); - } else { - return(undef); - } - +=cut + +sub smart_search { return undef; } + + +=item email_search + +A wrapper for the FS::cust_main::email_search subroutine. + +=cut + +sub email_search { return undef; } + + +=item small_custview + +A wrapper for the FS::CGI::small_custview subroutine. + +=cut + +sub small_custview { return 'Freeside integration error!'; } + + +=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 FreesideURILabelLong { +=item _FreesideURILabel + +Method that returns a short string describing the customer referenced +in the URI. + +=cut + +sub _FreesideURILabel { my $self = shift; - return(undef) unless (exists($self->{'fstable'}) and - exists($self->{'fspkey'})); + #$RT::Logger->debug("Called _FreesideURILabel()"); + + return unless (exists($self->{'fstable'}) and + exists($self->{'fspkey'})); my $label; my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'}); - eval { - use FS::UID qw(dbh); - use FS::Record qw(qsearchs qsearch dbdef); - eval "use FS::$table;"; - use FS::cust_svc; - - my $dbdef = dbdef or die "No dbdef"; - my $pkeyfield = $dbdef->table($table)->primary_key - or die "No primary key for table $table"; - - my $rec = qsearchs($table, { $pkeyfield => $pkey }) - or die "Record with $pkeyfield == $pkey does not exist in table $table"; - - 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 - - }; + #if ($table ne 'cust_main') { + # warn "FS::${table} not currently supported"; + # return; + #} + + my $rec = $self->_FreesideGetRecord(); + + 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"; + } if ($label and !$@) { return($label); } else { - warn $@; - return(undef); + 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+)$/) { + my $uriprefix = $self->_FreesideURIPrefix; + if ($uri =~ /^$uriprefix\/(\w+)\/(\d*)$/) { + $table = $1; $pkey = $2; + + unless ( $pkey ) { + #way too noisy, using this prefix is normal usage# cluck "bad URL $uri"; + return(undef); + } + $self->{'scheme'} = $self->Scheme; + } else { return(undef); } @@ -177,22 +225,13 @@ sub ParseURI { $self->{'fstable'} = $table; $self->{'fspkey'} = $pkey; - my $p; - eval { - use FS::UID qw(dbh); - use FS::CGI qw(popurl); + my $url = $self->FreesideURL(); - if (dbh) { - $p = popurl(3); - } - - }; - - 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 +254,7 @@ sub IsLocal { return undef; } -=head2 AsString +=item AsString Return a "pretty" string representing the URI object. @@ -229,14 +268,14 @@ This is meant to be used like this: 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 +284,48 @@ Return a longer (HTML) string representing the URI object. 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 $@; +}; + +=item AgentName + +Return the name of the customer's agent. + +=cut + +sub AgentName { undef } + +=item CustomerClass + +Return the name of the customer's class. + +=cut + +sub CustomerClass { undef } + +=item CustomerTags + +Return the list of tags attached to the customer. Each tag is returned +as a hashref with keys "name", "desc", and "color". + +=cut + +sub CustomerTags { ( ) } + +=back + +=cut 1;