generalize progressbar code in preparation for using it wherever needed
authorivan <ivan>
Fri, 11 Feb 2005 06:44:27 +0000 (06:44 +0000)
committerivan <ivan>
Fri, 11 Feb 2005 06:44:27 +0000 (06:44 +0000)
FS/FS/UI/Web.pm [new file with mode: 0644]
FS/FS/rate.pm
htetc/global.asa
htetc/handler.pl
httemplate/edit/process/rate.cgi
httemplate/edit/rate.cgi

diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm
new file mode 100644 (file)
index 0000000..869203b
--- /dev/null
@@ -0,0 +1,67 @@
+package FS::UI::Web;
+
+#use vars qw(@ISA);
+#use FS::UI
+#@ISA = qw( FS::UI );
+
+
+# begin JSRPC code...
+
+package FS::UI::Web::JSRPC;
+
+use vars qw(@ISA $DEBUG);
+use Storable qw(nfreeze);
+use MIME::Base64;
+use JavaScript::RPC::Server::CGI;
+use FS::UID;
+
+@ISA = qw( JavaScript::RPC::Server::CGI );
+$DEBUG = 1;
+
+sub new {
+        my $class = shift;
+        my $self  = {
+                env => {},
+                job => shift,
+        };
+
+        bless $self, $class;
+
+        return $self;
+}
+
+sub start_job {
+  my $self = shift;
+
+  my %param = @_;
+  warn "FS::UI::Web::start_job\n".
+       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;
+
+  my $error = $job->insert( '_JOB', encode_base64(nfreeze(\%param)) );
+
+  if ( $error ) {
+    $error;
+  } else {
+    $job->jobnum;
+  }
+  
+}
index 7f625a6..7c6a70e 100644 (file)
@@ -2,6 +2,8 @@ package FS::rate;
 
 use strict;
 use vars qw( @ISA $DEBUG );
+use Storable qw(thaw);
+use Data::Dumper;
 use FS::Record qw( qsearch qsearchs dbh fields );
 use FS::rate_detail;
 
@@ -307,25 +309,29 @@ Experimental job-queue processor for web interface adds/edits
 
 =cut
 
+use MIME::Base64;
 sub process {
   my $job = shift;
 
   #my %param = @_;
 
-  my $param = shift;
-  my %param = split(/[;=]/, $param);
+  #my $param = shift;
+  #my %param = split(/[;=]/, $param);
 
-  my $old = qsearchs('rate', { 'ratenum' => $param{'ratenum'} } )
-    if $param{'ratenum'};
+  my $param = thaw(decode_base64(shift));
+  warn Dumper($param) if $DEBUG;
+
+  my $old = qsearchs('rate', { 'ratenum' => $param->{'ratenum'} } )
+    if $param->{'ratenum'};
 
   my @rate_detail = map {
 
     my $regionnum = $_->regionnum;
-    if ( $param{"sec_granularity$regionnum"} ) {
+    if ( $param->{"sec_granularity$regionnum"} ) {
 
       new FS::rate_detail {
         'dest_regionnum'  => $regionnum,
-        map { $_ => $param{"$_$regionnum"} }
+        map { $_ => $param->{"$_$regionnum"} }
             qw( min_included min_charge sec_granularity )
       };
 
@@ -343,13 +349,13 @@ sub process {
   } qsearch('rate_region', {} );
   
   my $rate = new FS::rate {
-    map { $_ => $param{$_} }
+    map { $_ => $param->{$_} }
         fields('rate')
   };
 
   my $error = '';
-  if ( $param{'ratenum'} ) {
-    warn "$rate replacing $old ($param{'ratenum'})\n" if $DEBUG;
+  if ( $param->{'ratenum'} ) {
+    warn "$rate replacing $old (". $param->{'ratenum'}. ")\n" if $DEBUG;
     $error = $rate->replace( $old,
                              'rate_detail' => \@rate_detail,
                              'job'         => $job,
index 94a1030..482572a 100644 (file)
@@ -29,6 +29,7 @@ use FS::Record qw(qsearch qsearchs fields dbdef);
 use FS::Conf;
 use FS::CGI qw(header menubar popurl table itable ntable idiot eidiot
                small_custview myexit http_header);
+use FS::UI::Web;
 use FS::Msgcat qw(gettext geterror);
 use FS::Misc qw( send_email );
 use FS::Report::Table::Monthly;
index 557ec02..934b419 100644 (file)
@@ -112,6 +112,7 @@ sub handler
       use FS::Conf;
       use FS::CGI qw(header menubar popurl table itable ntable idiot eidiot
                      small_custview myexit http_header);
+      use FS::UI::Web;
       use FS::Msgcat qw(gettext geterror);
       use FS::Misc qw( send_email );
       use FS::Report::Table::Monthly;
index df7c467..031f8d1 100755 (executable)
@@ -1,4 +1,7 @@
 <%
-my $server = new FS::rate::JSRPC;
+#my $server = new FS::rate::JSRPC;
+#$server->process;
+my $server = new FS::UI::Web::JSRPC 'FS::rate::process';
+###wtf###$server->start_job;
 $server->process;
 %>
index 3443f81..4a02940 100644 (file)
@@ -55,7 +55,8 @@ function process () {
   }
 
   jsrsPOST = true;
-  jsrsExecute( 'process/rate.cgi', myCallback, 'process_rate', Hash );
+  //jsrsExecute( 'process/rate.cgi', myCallback, 'process_rate', Hash );
+  jsrsExecute( 'process/rate.cgi', myCallback, 'start_job', Hash );
 
   function myCallback( jobnum ) {
     var progressWindow = window.open('../../misc/progress.html?jobnum=' + jobnum + ';url=<%=$p%>browse/rate.cgi', 'progressWindow', 'toolbar=no,location=no,directories=no,scrollbars=no,menubar=no,status=no,width=420,height=128');