1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
package FS::UI::Web;
#use vars qw(@ISA);
#use FS::UI
#@ISA = qw( FS::UI );
use Date::Parse;
sub parse_beginning_ending {
my($cgi) = @_;
$cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/;
my $beginning = str2time($1) || 0;
#need an option to turn off the + 86399 ???
$cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/;
my $ending = ( $1 ? str2time($1) : 4294880896 ) + 86399;
( $beginning, $ending );
}
# begin JSRPC code...
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 = 0;
sub new {
my $class = shift;
my $self = {
env => {},
job => shift,
};
bless $self, $class;
return $self;
}
sub start_job {
my $self = shift;
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 {
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
#to the caller
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);
#warn 'froze string of size '. length(nfreeze(\%param)). " for job args\n"
# if $DEBUG;
my $error = $job->insert( '_JOB', encode_base64(nfreeze(\%param)) );
if ( $error ) {
$error;
} else {
$job->jobnum;
}
}
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;
|