use a javascript layer instead of a browser popup (popup blockers), really generalize...
[freeside.git] / FS / FS / UI / Web.pm
index 869203b..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;
@@ -38,21 +41,14 @@ sub start_job {
        join('', map "  $_ => $param{$_}\n", keys %param )
     if $DEBUG;
 
-  #progressbar prototype code...  should be generalized
-  
   #first get the CGI params shipped off to a job ASAP so an id can be returned
   #to the caller
   
-  #my $job = new FS::queue { 'job' => 'FS::rate::process' };
   my $job = new FS::queue { 'job' => $self->{'job'} };
   
   #too slow to insert all the cgi params as individual args..,?
   #my $error = $queue->insert('_JOB', $cgi->Vars);
   
-  #my $bigstring = join(';', map { "$_=". scalar($cgi->param($_)) } $cgi->param );
-#  my $bigstring = join(';', map { "$_=". $param{$_} } keys %param );
-#  my $error = $job->insert('_JOB', $bigstring);
-
   #warn 'froze string of size '. length(nfreeze(\%param)). " for job args\n"
   #  if $DEBUG;
 
@@ -65,3 +61,34 @@ 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();
+}
+