communigate provisioning phase 2: add svc_domain.trailer -> communigate TrailerText...
[freeside.git] / FS / FS / queue.pm
index f42d998..1f2abe3 100644 (file)
@@ -3,6 +3,8 @@ package FS::queue;
 use strict;
 use vars qw( @ISA @EXPORT_OK $DEBUG $conf $jobnums);
 use Exporter;
+use MIME::Base64;
+use Storable qw( nfreeze thaw );
 use FS::UID qw(myconnect);
 use FS::Conf;
 use FS::Record qw( qsearch qsearchs dbh );
@@ -48,17 +50,40 @@ FS::Record.  The following fields are currently supported:
 
 =over 4
 
-=item jobnum - primary key
+=item jobnum
 
-=item job - fully-qualified subroutine name
+Primary key
 
-=item status - job status
+=item job
 
-=item statustext - freeform text status message
+Fully-qualified subroutine name
 
-=item _date - UNIX timestamp
+=item status
 
-=item svcnum - optional link to service (see L<FS::cust_svc>)
+Job status (new, locked, or failed)
+
+=item statustext
+
+Freeform text status message
+
+=item _date
+
+UNIX timestamp
+
+=item svcnum
+
+Optional link to service (see L<FS::cust_svc>).
+
+=item custnum
+
+Optional link to customer (see L<FS::cust_main>).
+
+=item secure
+
+Secure flag, 'Y' indicates that when using encryption, the job needs to be
+run on a machine with the private key.
+
+=cut
 
 =back
 
@@ -68,7 +93,7 @@ FS::Record.  The following fields are currently supported:
 
 =item new HASHREF
 
-Creates a new job.  To add the example to the database, see L<"insert">.
+Creates a new job.  To add the job to the database, see L<"insert">.
 
 Note that this stores the hash reference, not a distinct copy of the hash it
 points to.  You can ask the object for a copy with the I<hash> method.
@@ -91,7 +116,7 @@ created (see L<FS::queue_arg>).
 
 #false laziness w/part_export.pm
 sub insert {
-  my $self = shift;
+  my( $self, @args ) = @_;
 
   local $SIG{HUP} = 'IGNORE';
   local $SIG{INT} = 'IGNORE';
@@ -104,16 +129,26 @@ sub insert {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
+  my %args = ();
+  { 
+    no warnings "misc";
+    %args = @args;
+  }
+
+  $self->custnum( $args{'custnum'} ) if $args{'custnum'};
+
   my $error = $self->SUPER::insert;
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
     return $error;
   }
 
-  foreach my $arg ( @_ ) {
+  foreach my $arg ( @args ) {
+    my $freeze = ref($arg) ? 'Y' : '';
     my $queue_arg = new FS::queue_arg ( {
       'jobnum' => $self->jobnum,
-      'arg'    => $arg,
+      'frozen' => $freeze,
+      'arg'    => $freeze ? encode_base64(nfreeze($arg)) : $arg,# always freeze?
     } );
     $error = $queue_arg->insert;
     if ( $error ) {
@@ -223,11 +258,12 @@ Returns a list of the arguments associated with this job.
 
 sub args {
   my $self = shift;
-  map $_->arg, qsearch( 'queue_arg',
-                        { 'jobnum' => $self->jobnum },
-                        '',
-                        'ORDER BY argnum'
-                      );
+  map { $_->frozen ? thaw(decode_base64($_->arg)) : $_->arg }
+    qsearch( 'queue_arg',
+             { 'jobnum' => $self->jobnum },
+             '',
+             'ORDER BY argnum'
+           );
 }
 
 =item cust_svc