X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=31e53dbd32d65d525674104191c1e950f6522c53;hb=c545a57d21341c49674defed65a4243f07b5ebaf;hp=787acee22f05374015caa784aacc07d72091901d;hpb=eb4ff7f73c5d4bdf74a3472448b5a195598ff4cd;p=freeside.git diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index 787acee22..31e53dbd3 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -3,6 +3,7 @@ package FS::svc_Common; use strict; use vars qw( @ISA $noexport_hack $DEBUG $me ); use Carp qw( cluck carp croak ); #specify cluck have to specify them all.. +use Scalar::Util qw( blessed ); use FS::Record qw( qsearch qsearchs fields dbh ); use FS::cust_main_Mixin; use FS::cust_svc; @@ -359,7 +360,7 @@ sub delete { ''; } -=item replace OLD_RECORD +=item replace [ OLD_RECORD ] [ HASHREF | OPTION => VALUE ] Replaces OLD_RECORD with this one. If there is an error, returns the error, otherwise returns false. @@ -367,8 +368,16 @@ otherwise returns false. =cut sub replace { - my ($new, $old) = (shift, shift); - my %options = @_; + my $new = shift; + + my $old = ( blessed($_[0]) && $_[0]->isa('FS::Record') ) + ? shift + : $new->replace_old; + + my $options = + ( ref($_[0]) eq 'HASH' ) + ? shift + : { @_ }; local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; @@ -381,9 +390,6 @@ sub replace { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - # We absolutely have to have an old vs. new record to make this work. - $old = $new->replace_old unless defined($old); - my $error = $new->set_auto_inventory; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -399,7 +405,7 @@ sub replace { #new-style exports! unless ( $noexport_hack ) { - my $export_args = $options{'export_args'} || []; + my $export_args = $options->{'export_args'} || []; #not quite false laziness, but same pattern as FS::svc_acct::replace and #FS::part_export::sqlradius::_export_replace. List::Compare or something @@ -708,6 +714,19 @@ sub unsuspend { $self->export('unsuspend', @$export_args); } +=item export_links + +Runs export_links callbacks and returns the links. + +=cut + +sub export_links { + my $self = shift; + my $return = []; + $self->export('links', $return); + $return; +} + =item export HOOK [ EXPORT_ARGS ] Runs the provided export hook (i.e. "suspend", "unsuspend") for this service.