FS/UI/Web.pm did not return a true value
[freeside.git] / FS / FS / UI / Web.pm
1 package FS::UI::Web;
2
3 #use vars qw(@ISA);
4 #use FS::UI
5 #@ISA = qw( FS::UI );
6
7
8 # begin JSRPC code...
9
10 package FS::UI::Web::JSRPC;
11
12 use strict;
13 use vars qw(@ISA $DEBUG);
14 use Storable qw(nfreeze);
15 use MIME::Base64;
16 use JavaScript::RPC::Server::CGI;
17 use FS::UID;
18 use FS::Record qw(qsearchs);
19 use FS::queue;
20
21 @ISA = qw( JavaScript::RPC::Server::CGI );
22 $DEBUG = 0;
23
24 sub new {
25         my $class = shift;
26         my $self  = {
27                 env => {},
28                 job => shift,
29         };
30
31         bless $self, $class;
32
33         return $self;
34 }
35
36 sub start_job {
37   my $self = shift;
38
39   my %param = @_;
40   warn "FS::UI::Web::start_job\n".
41        join('', map "  $_ => $param{$_}\n", keys %param )
42     if $DEBUG;
43
44   #first get the CGI params shipped off to a job ASAP so an id can be returned
45   #to the caller
46   
47   my $job = new FS::queue { 'job' => $self->{'job'} };
48   
49   #too slow to insert all the cgi params as individual args..,?
50   #my $error = $queue->insert('_JOB', $cgi->Vars);
51   
52   #warn 'froze string of size '. length(nfreeze(\%param)). " for job args\n"
53   #  if $DEBUG;
54
55   my $error = $job->insert( '_JOB', encode_base64(nfreeze(\%param)) );
56
57   if ( $error ) {
58     $error;
59   } else {
60     $job->jobnum;
61   }
62   
63 }
64
65 sub job_status {
66   my( $self, $jobnum ) = @_; #$url ???
67
68   sleep 5; #could use something better...
69
70   my $job;
71   if ( $jobnum =~ /^(\d+)$/ ) {
72     $job = qsearchs('queue', { 'jobnum' => $jobnum } );
73   } else {
74     die "FS::UI::Web::job_status: illegal jobnum $jobnum\n";
75   }
76
77   my @return;
78   if ( $job && $job->status ne 'failed' ) {
79     @return = ( 'progress', $job->statustext );
80   } elsif ( !$job ) { #handle job gone case : job sucessful
81                       # so close popup, redirect parent window...
82     @return = ( 'complete' );
83   } else {
84     @return = ( 'error', $job ? $job->statustext : $jobnum );
85   }
86
87   join("\n",@return);
88
89 }
90
91 sub get_new_query {
92   FS::UID::cgi();
93 }
94
95 1;
96