so Search.tsf and Search.rdf work
[freeside.git] / FS / FS / UI / Web.pm
index 646804d..46e904b 100644 (file)
@@ -9,14 +9,17 @@ package FS::UI::Web;
 
 package FS::UI::Web::JSRPC;
 
+use strict;
 use vars qw(@ISA $DEBUG);
 use Storable qw(nfreeze);
 use MIME::Base64;
 use JavaScript::RPC::Server::CGI;
 use FS::UID;
+use FS::Record qw(qsearchs);
+use FS::queue;
 
 @ISA = qw( JavaScript::RPC::Server::CGI );
-$DEBUG = 1;
+$DEBUG = 0;
 
 sub new {
         my $class = shift;
@@ -33,9 +36,27 @@ sub new {
 sub start_job {
   my $self = shift;
 
-  my %param = @_;
+  warn "FS::UI::Web::start_job: ". join(', ', @_) if $DEBUG;
+#  my %param = @_;
+  my %param = ();
+  while ( @_ ) {
+    my( $field, $value ) = splice(@_, 0, 2);
+    unless ( exists( $param{$field} ) ) {
+      $param{$field} = $value;
+    } elsif ( ! ref($param{$field}) ) {
+      $param{$field} = [ $param{$field}, $value ];
+    } else {
+      push @{$param{$field}}, $value;
+    }
+  }
   warn "FS::UI::Web::start_job\n".
-       join('', map "  $_ => $param{$_}\n", keys %param )
+       join('', map {
+                      if ( ref($param{$_}) ) {
+                        "  $_ => [ ". join(', ', @{$param{$_}}). " ]\n";
+                      } else {
+                        "  $_ => $param{$_}\n";
+                      }
+                    } keys %param )
     if $DEBUG;
 
   #first get the CGI params shipped off to a job ASAP so an id can be returned
@@ -59,7 +80,35 @@ sub start_job {
   
 }
 
+sub job_status {
+  my( $self, $jobnum ) = @_; #$url ???
+
+  sleep 5; #could use something better...
+
+  my $job;
+  if ( $jobnum =~ /^(\d+)$/ ) {
+    $job = qsearchs('queue', { 'jobnum' => $jobnum } );
+  } else {
+    die "FS::UI::Web::job_status: illegal jobnum $jobnum\n";
+  }
+
+  my @return;
+  if ( $job && $job->status ne 'failed' ) {
+    @return = ( 'progress', $job->statustext );
+  } elsif ( !$job ) { #handle job gone case : job sucessful
+                      # so close popup, redirect parent window...
+    @return = ( 'complete' );
+  } else {
+    @return = ( 'error', $job ? $job->statustext : $jobnum );
+  }
+
+  join("\n",@return);
+
+}
+
 sub get_new_query {
   FS::UID::cgi();
 }
 
+1;
+