eWay self-signup fixes
[freeside.git] / FS / FS / part_export.pm
index 69a0ba5..6f5aedc 100644 (file)
@@ -5,11 +5,15 @@ use vars qw( @ISA @EXPORT_OK $DEBUG %exports );
 use Exporter;
 use Tie::IxHash;
 use FS::Record qw( qsearch qsearchs dbh );
+use FS::option_Common;
 use FS::part_svc;
 use FS::part_export_option;
 use FS::export_svc;
 
-@ISA = qw(FS::Record);
+#for export modules, though they should probably just use it themselves
+use FS::queue;
+
+@ISA = qw( FS::option_Common );
 @EXPORT_OK = qw(export_info);
 
 $DEBUG = 0;
@@ -46,6 +50,8 @@ fields are currently supported:
 
 =item exportnum - primary key
 
+=item exportname - Descriptive name
+
 =item machine - Machine name 
 
 =item exporttype - Export type
@@ -103,48 +109,6 @@ otherwise returns false.
 If a hash reference of options is supplied, part_export_option records are
 created (see L<FS::part_export_option>).
 
-=cut
-
-#false laziness w/queue.pm
-sub insert {
-  my $self = shift;
-  my $options = shift;
-  local $SIG{HUP} = 'IGNORE';
-  local $SIG{INT} = 'IGNORE';
-  local $SIG{QUIT} = 'IGNORE';
-  local $SIG{TERM} = 'IGNORE';
-  local $SIG{TSTP} = 'IGNORE';
-  local $SIG{PIPE} = 'IGNORE';
-
-  my $oldAutoCommit = $FS::UID::AutoCommit;
-  local $FS::UID::AutoCommit = 0;
-  my $dbh = dbh;
-
-  my $error = $self->SUPER::insert;
-  if ( $error ) {
-    $dbh->rollback if $oldAutoCommit;
-    return $error;
-  }
-
-  foreach my $optionname ( keys %{$options} ) {
-    my $part_export_option = new FS::part_export_option ( {
-      'exportnum'   => $self->exportnum,
-      'optionname'  => $optionname,
-      'optionvalue' => $options->{$optionname},
-    } );
-    $error = $part_export_option->insert;
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return $error;
-    }
-  }
-
-  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
-
-  '';
-
-}
-
 =item delete
 
 Delete this record from the database.
@@ -171,14 +135,6 @@ sub delete {
     return $error;
   }
 
-  foreach my $part_export_option ( $self->part_export_option ) {
-    my $error = $part_export_option->delete;
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return $error;
-    }
-  }
-
   foreach my $export_svc ( $self->export_svc ) {
     my $error = $export_svc->delete;
     if ( $error ) {
@@ -193,72 +149,6 @@ sub delete {
 
 }
 
-=item replace OLD_RECORD HASHREF
-
-Replaces the OLD_RECORD with this one in the database.  If there is an error,
-returns the error, otherwise returns false.
-
-If a hash reference of options is supplied, part_export_option records are
-created or modified (see L<FS::part_export_option>).
-
-=cut
-
-sub replace {
-  my $self = shift;
-  my $old = shift;
-  my $options = shift;
-  local $SIG{HUP} = 'IGNORE';
-  local $SIG{INT} = 'IGNORE';
-  local $SIG{QUIT} = 'IGNORE';
-  local $SIG{TERM} = 'IGNORE';
-  local $SIG{TSTP} = 'IGNORE';
-  local $SIG{PIPE} = 'IGNORE';
-
-  my $oldAutoCommit = $FS::UID::AutoCommit;
-  local $FS::UID::AutoCommit = 0;
-  my $dbh = dbh;
-
-  my $error = $self->SUPER::replace($old);
-  if ( $error ) {
-    $dbh->rollback if $oldAutoCommit;
-    return $error;
-  }
-
-  foreach my $optionname ( keys %{$options} ) {
-    my $old = qsearchs( 'part_export_option', {
-        'exportnum'   => $self->exportnum,
-        'optionname'  => $optionname,
-    } );
-    my $new = new FS::part_export_option ( {
-        'exportnum'   => $self->exportnum,
-        'optionname'  => $optionname,
-        'optionvalue' => $options->{$optionname},
-    } );
-    $new->optionnum($old->optionnum) if $old;
-    my $error = $old ? $new->replace($old) : $new->insert;
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return $error;
-    }
-  }
-
-  #remove extraneous old options
-  foreach my $opt (
-    grep { !exists $options->{$_->optionname} } $old->part_export_option
-  ) {
-    my $error = $opt->delete;
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return $error;
-    }
-  }
-
-  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
-
-  '';
-
-};
-
 =item check
 
 Checks all fields to make sure this is a valid export.  If there is
@@ -271,6 +161,7 @@ sub check {
   my $self = shift;
   my $error = 
     $self->ut_numbern('exportnum')
+    || $self->ut_textn('exportname')
     || $self->ut_domain('machine')
     || $self->ut_alpha('exporttype')
   ;
@@ -338,6 +229,17 @@ sub export_svc {
   qsearch('export_svc', { 'exportnum' => $self->exportnum } );
 }
 
+=item export_device
+
+Returns a list of associated FS::export_device records.
+
+=cut
+
+sub export_device {
+  my $self = shift;
+  qsearch('export_device', { 'exportnum' => $self->exportnum } );
+}
+
 =item part_export_option
 
 Returns all options as FS::part_export_option objects (see
@@ -347,61 +249,44 @@ L<FS::part_export_option>).
 
 sub part_export_option {
   my $self = shift;
-  qsearch('part_export_option', { 'exportnum' => $self->exportnum } );
+  $self->option_objects;
 }
 
 =item options 
 
 Returns a list of option names and values suitable for assigning to a hash.
 
-=cut
-
-sub options {
-  my $self = shift;
-  map { $_->optionname => $_->optionvalue } $self->part_export_option;
-}
-
 =item option OPTIONNAME
 
 Returns the option value for the given name, or the empty string.
 
-=cut
-
-sub option {
-  my $self = shift;
-  my $part_export_option =
-    qsearchs('part_export_option', {
-      exportnum  => $self->exportnum,
-      optionname => shift,
-  } );
-  $part_export_option ? $part_export_option->optionvalue : '';
-}
-
-=item rebless
+=item _rebless
 
 Reblesses the object into the FS::part_export::EXPORTTYPE class, where
 EXPORTTYPE is the object's I<exporttype> field.  There should be better docs
-on how to create new exports (and they should live in their own files and be
-autoloaded-on-demand), but until then, see L</NEW EXPORT CLASSES>.
+on how to create new exports, but until then, see L</NEW EXPORT CLASSES>.
 
 =cut
 
-sub rebless {
+sub _rebless {
   my $self = shift;
   my $exporttype = $self->exporttype;
   my $class = ref($self). "::$exporttype";
   eval "use $class;";
-  die $@ if $@;
-  bless($self, $class);
+  #die $@ if $@;
+  bless($self, $class) unless $@;
+  $self;
 }
 
+#these should probably all go away, just let the subclasses define em
+
 =item export_insert SVC_OBJECT
 
 =cut
 
 sub export_insert {
   my $self = shift;
-  $self->rebless;
+  #$self->rebless;
   $self->_export_insert(@_);
 }
 
@@ -420,7 +305,7 @@ sub export_insert {
 
 sub export_replace {
   my $self = shift;
-  $self->rebless;
+  #$self->rebless;
   $self->_export_replace(@_);
 }
 
@@ -430,7 +315,7 @@ sub export_replace {
 
 sub export_delete {
   my $self = shift;
-  $self->rebless;
+  #$self->rebless;
   $self->_export_delete(@_);
 }
 
@@ -440,7 +325,7 @@ sub export_delete {
 
 sub export_suspend {
   my $self = shift;
-  $self->rebless;
+  #$self->rebless;
   $self->_export_suspend(@_);
 }
 
@@ -450,7 +335,7 @@ sub export_suspend {
 
 sub export_unsuspend {
   my $self = shift;
-  $self->rebless;
+  #$self->rebless;
   $self->_export_unsuspend(@_);
 }
 
@@ -488,6 +373,23 @@ sub _export_unsuspend {
   $self->_export_replace( $svc_x, $old );
 }
 
+=item export_links SVC_OBJECT ARRAYREF
+
+Adds a list of web elements to ARRAYREF specific to this export and SVC_OBJECT.
+The elements are displayed in the UI to lead the the operator to external
+configuration, monitoring, and similar tools.
+
+=item export_getsettings SVC_OBJECT SETTINGS_HASHREF DEFAUTS_HASHREF
+
+Adds a hashref of settings to SETTINGSREF specific to this export and
+SVC_OBJECT.  The elements can be displayed in the UI on the service view.
+
+DEFAULTSREF is a hashref with the same keys where true values indicate the
+setting is a default (and thus can be displayed in the UI with less emphasis,
+or hidden by default).
+
+=cut
+
 =back
 
 =head1 SUBROUTINES
@@ -532,10 +434,9 @@ sub export_info {
 #  '';
 #}
 
+#false laziness w/part_pkg & cdr
 foreach my $INC ( @INC ) {
-  $INC =~ /^(.*)$/;
-  my $untainted_INC = $1;
-  foreach my $file ( glob("$untainted_INC/FS/part_export/*.pm") ) {
+  foreach my $file ( glob("$INC/FS/part_export/*.pm") ) {
     warn "attempting to load export info from $file\n" if $DEBUG;
     $file =~ /\/(\w+)\.pm$/ or do {
       warn "unrecognized file in $INC/FS/part_export/: $file\n";