X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fqueue.pm;h=8ebadd4173fe863d1e1c8f71c6f279d8d2653c3b;hb=430b2c784d2ee9ea5be00b821d2dbd27279ef132;hp=381e418c9358105d05656d9486ab7e4f82df2b8a;hpb=0afb8f9e5fa926907c43fa4a316b65e3aa834e71;p=freeside.git diff --git a/FS/FS/queue.pm b/FS/FS/queue.pm index 381e418c9..8ebadd417 100644 --- a/FS/FS/queue.pm +++ b/FS/FS/queue.pm @@ -3,6 +3,8 @@ package FS::queue; use strict; use vars qw( @ISA @EXPORT_OK $DEBUG $conf $jobnums); use Exporter; +use MIME::Base64; +use Storable qw( nfreeze thaw ); use FS::UID qw(myconnect); use FS::Conf; use FS::Record qw( qsearch qsearchs dbh ); @@ -10,6 +12,7 @@ use FS::Record qw( qsearch qsearchs dbh ); use FS::queue_arg; use FS::queue_depend; use FS::cust_svc; +use FS::CGI qw(rooturl); @ISA = qw(FS::Record); @EXPORT_OK = qw( joblisting ); @@ -64,6 +67,20 @@ Job status (new, locked, or failed) Freeform text status message +=cut + +sub statustext { + my $self = shift; + if ( defined ( $_[0] ) ) { + $self->SUPER::statustext(@_); + } else { + my $value = $self->SUPER::statustext(); + my $rooturl = rooturl(); + $value =~ s/%%%ROOTURL%%%/$rooturl/g; + $value; + } +} + =item _date UNIX timestamp @@ -142,9 +159,11 @@ sub insert { } foreach my $arg ( @args ) { + my $freeze = ref($arg) ? 'Y' : ''; my $queue_arg = new FS::queue_arg ( { 'jobnum' => $self->jobnum, - 'arg' => $arg, + 'frozen' => $freeze, + 'arg' => $freeze ? encode_base64(nfreeze($arg)) : $arg,# always freeze? } ); $error = $queue_arg->insert; if ( $error ) { @@ -174,35 +193,18 @@ deleted as well sub delete { my $self = shift; - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my @del = qsearch( 'queue_arg', { 'jobnum' => $self->jobnum } ); - push @del, qsearch( 'queue_depend', { 'depend_jobnum' => $self->jobnum } ); - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $del ( @del ) { - $error = $del->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; + my $reportname = ''; + if ( $self->status =~/^done/ ) { + my $dropstring = rooturl(). '/misc/queued_report\?report='; + if ($self->statustext =~ /.*$dropstring([.\w]+)\>/) { + $reportname = "$FS::UID::cache_dir/cache.$FS::UID::datasrc/report.$1"; } } - $dbh->commit or die $dbh->errstr if $oldAutoCommit; + my $error = $self->SUPER::delete; + return $error if $error; + + unlink $reportname if $reportname; ''; @@ -231,7 +233,7 @@ sub check { $self->ut_numbern('jobnum') || $self->ut_anything('job') || $self->ut_numbern('_date') - || $self->ut_enum('status',['', qw( new locked failed )]) + || $self->ut_enum('status',['', qw( new locked failed done )]) || $self->ut_anything('statustext') || $self->ut_numbern('svcnum') ; @@ -254,11 +256,12 @@ Returns a list of the arguments associated with this job. sub args { my $self = shift; - map $_->arg, qsearch( 'queue_arg', - { 'jobnum' => $self->jobnum }, - '', - 'ORDER BY argnum' - ); + map { $_->frozen ? thaw(decode_base64($_->arg)) : $_->arg } + qsearch( 'queue_arg', + { 'jobnum' => $self->jobnum }, + '', + 'ORDER BY argnum' + ); } =item cust_svc @@ -347,7 +350,7 @@ If there is an error, returns the error, otherwise returns false. use vars qw($_update_statustext_dbh); sub update_statustext { my( $self, $statustext ) = @_; - return '' if $statustext eq $self->statustext; + return '' if $statustext eq $self->get('statustext'); #avoid rooturl expansion warn "updating statustext for $self to $statustext" if $DEBUG; $_update_statustext_dbh ||= myconnect; @@ -358,7 +361,7 @@ sub update_statustext { $sth->execute($statustext, $self->jobnum) or return $sth->errstr; $_update_statustext_dbh->commit or die $_update_statustext_dbh->errstr; - $self->statustext($statustext); + $self->set('statustext', $statustext); #avoid rooturl expansion ''; #my $new = new FS::queue { $self->hash };