use a javascript layer instead of a browser popup (popup blockers), really generalize...
[freeside.git] / FS / FS / UI / Web.pm
index 646804d..d5c7168 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;
@@ -59,6 +62,32 @@ 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();
 }