better error message
[freeside.git] / httemplate / misc / queue.cgi
index 7e962d4..ce9c8fb 100644 (file)
@@ -1,13 +1,18 @@
 <%
 
-$cgi->param('jobnum') =~ /^(\d+)$/ or die "Illegal jobnum";
-my $jobnum = $1;
-my $job = qsearchs('queue', { 'jobnum' => $1 })
-  or die "unknown jobnum $jobnum";
-
-$cgi->param('action') =~ /^(new|del)$/ or die "Illegal action";
+$cgi->param('action') =~ /^(new|del|(retry|remove) selected)$/
+  or die "Illegal action";
 my $action = $1;
 
+my $job;
+if ( $action eq 'new' || $action eq 'del' ) {
+  $cgi->param('jobnum') =~ /^(\d+)$/ or die "Illegal jobnum";
+  my $jobnum = $1;
+  $job = qsearchs('queue', { 'jobnum' => $1 })
+    or die "unknown jobnum $jobnum - ".
+           "it probably completed normally or was removed by another user";
+}
+
 if ( $action eq 'new' ) {
   my %hash = $job->hash;
   $hash{'status'} = 'new';
@@ -18,6 +23,23 @@ if ( $action eq 'new' ) {
 } elsif ( $action eq 'del' ) {
   my $error = $job->delete;
   die $error if $error;
+} elsif ( $action =~ /^(retry|remove) selected$/ ) {
+  foreach my $jobnum (
+    map { /^jobnum(\d+)$/; $1; } grep /^jobnum\d+$/, $cgi->param
+  ) {
+    my $job = qsearchs('queue', { 'jobnum' => $jobnum });
+    if ( $action eq 'retry selected' && $job ) { #new
+      my %hash = $job->hash;
+      $hash{'status'} = 'new';
+      $hash{'statustext'} = '';
+      my $new = new FS::queue \%hash;
+      my $error = $new->replace($job);
+      die $error if $error;
+    } elsif ( $action eq 'remove selected' && $job ) { #del
+      my $error = $job->delete;
+      die $error if $error;
+    }
+  }
 }
 
 print $cgi->redirect(popurl(2). "browse/queue.cgi");