Bug 9044: (follow-up) fix merge conflict typo that broke this script
[koha.git] / C4 / BackgroundJob.pm
index 9f3acff..3ab5125 100644 (file)
@@ -14,19 +14,22 @@ package C4::BackgroundJob;
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 use strict;
+#use warnings; FIXME - Bug 2505
 use C4::Context;
 use C4::Auth qw/get_session/;
 use Digest::MD5;
 
 use vars qw($VERSION);
 
-# set the version for version checking
-$VERSION = 3.00;
+BEGIN {
+       # set the version for version checking
+    $VERSION = 3.07.00.049;
+}
 
 =head1 NAME
 
@@ -35,43 +38,31 @@ initiated from the web staff interface
 
 =head1 SYNOPSIS
 
-=over 4
-
-# start tracking a job
-my $job = C4::BackgroundJob->new($sessionID, $job_name, $job_invoker, $num_work_units);
-my $jobID = $job->id();
-$job->progress($work_units_processed);
-$job->finish($job_result_hashref);
-
-# get status and results of a job
-my $job = C4::BackgroundJob->fetch($sessionID, $jobID);
-my $max_work_units = $job->size();
-my $work_units_processed = $job->progress();
-my $job_status = $job->status();
-my $job_name = $job->name();
-my $job_invoker = $job->invoker();
-my $results_hashref = $job->results();
-
-=back
+ # start tracking a job
+ my $job = C4::BackgroundJob->new($sessionID, $job_name, $job_invoker, $num_work_units);
+ my $jobID = $job->id();
+ $job->progress($work_units_processed);
+ $job->finish($job_result_hashref);
+
+ # get status and results of a job
+ my $job = C4::BackgroundJob->fetch($sessionID, $jobID);
+ my $max_work_units = $job->size();
+ my $work_units_processed = $job->progress();
+ my $job_status = $job->status();
+ my $job_name = $job->name();
+ my $job_invoker = $job->invoker();
+ my $results_hashref = $job->results();
 
 This module manages tracking the progress and results
 of (potentially) long-running jobs initiated from 
 the staff user interface.  Such jobs can include
 batch MARC and patron record imports.
 
-=cut
-
 =head1 METHODS
 
-=cut
-
 =head2 new
 
-=over 4
-
-my $job = C4::BackgroundJob->new($sessionID, $job_name, $job_invoker, $num_work_units);
-
-=back
+ my $job = C4::BackgroundJob->new($sessionID, $job_name, $job_invoker, $num_work_units);
 
 Create a new job object and set its status to 'running'.  C<$num_work_units>
 should be a number representing the size of the job; the units of the
@@ -92,6 +83,7 @@ sub new {
     $self->{'progress'} = 0;
     $self->{'status'} = "running";
     $self->{'jobID'} = Digest::MD5::md5_hex(Digest::MD5::md5_hex(time().{}.rand().{}.$$));
+    $self->{'extra_values'} = {};
 
     bless $self, $class;
     $self->_serialize();
@@ -105,29 +97,13 @@ sub _serialize {
 
     my $prefix = "job_" . $self->{'jobID'};
     my $session = get_session($self->{'sessionID'});
-    $session->param("$prefix.name", $self->{'name'});
-    $session->param("$prefix.invoker", $self->{'invoker'});
-    $session->param("$prefix.size", $self->{'size'});
-    $session->param("$prefix.progress", $self->{'size'});
-    $session->param("$prefix.status", $self->{'size'});
-    if (exists $self->{'results'}) {
-        my @keys = ();
-        foreach my $key (keys %{ $self->{'results'} }) {
-            $session->param("$prefix.results.$key", $self->{'results'}->{$key});
-            push @keys, $key;
-        }
-        $session->param("$prefix.results_keys", join("\t", @keys));
-    }
+    $session->param($prefix, $self);
     $session->flush();
 }
 
 =head2 id
 
-=over 4
-
-my $jobID = $job->id();
-
-=back
+ my $jobID = $job->id();
 
 Read-only accessor for job ID.
 
@@ -135,17 +111,13 @@ Read-only accessor for job ID.
 
 sub id {
     my $self = shift;
-    return $self->{'id'};
+    return $self->{'jobID'};
 }
 
 =head2 name
 
-=over 4
-
-my $name = $job->name();
-$job->name($name);
-
-=back
+ my $name = $job->name();
+ $job->name($name);
 
 Read/write accessor for job name.
 
@@ -163,12 +135,8 @@ sub name {
 
 =head2 invoker
 
-=over 4
-
-my $invoker = $job->invoker();
-$job->invoker($invoker);
-
-=back
+ my $invoker = $job->invoker();
+i $job->invoker($invoker);
 
 Read/write accessor for job invoker.
 
@@ -186,12 +154,8 @@ sub invoker {
 
 =head2 progress
 
-=over 4
-
-my $progress = $job->progress();
-$job->progress($progress);
-
-=back
+ my $progress = $job->progress();
+ $job->progress($progress);
 
 Read/write accessor for job progress.
 
@@ -209,11 +173,7 @@ sub progress {
 
 =head2 status
 
-=over 4
-
-my $status = $job->status();
-
-=back
+ my $status = $job->status();
 
 Read-only accessor for job status.
 
@@ -226,12 +186,8 @@ sub status {
 
 =head2 size
 
-=over 4
-
-my $size = $job->size();
-$job->size($size);
-
-=back
+ my $size = $job->size();
+ $job->size($size);
 
 Read/write accessor for job size.
 
@@ -249,11 +205,7 @@ sub size {
 
 =head2 finish
 
-=over 4
-
-$job->finish($results_hashref);
-
-=back
+ $job->finish($results_hashref);
 
 Mark the job as finished, setting its status to 'completed'.
 C<$results_hashref> should be a reference to a hash containing
@@ -264,18 +216,14 @@ the results of the job.
 sub finish {
     my $self = shift;
     my $results_hashref = shift;
-    my $self->{'status'} = 'completed';
-    my $self->{'results'} = $results_hashref;
+    $self->{'status'} = 'completed';
+    $self->{'results'} = $results_hashref;
     $self->_serialize();
 }
 
 =head2 results
 
-=over 4
-
-my $results_hashref = $job->results();
-
-=back
+ my $results_hashref = $job->results();
 
 Retrieve the results of the current job.  Returns undef 
 if the job status is not 'completed'.
@@ -284,17 +232,13 @@ if the job status is not 'completed'.
 
 sub results {
     my $self = shift;
-    return undef unless $self->{'status'} eq 'completed';
+    return unless $self->{'status'} eq 'completed';
     return $self->{'results'};
 }
 
 =head2 fetch
 
-=over 4
-
-my $job = C4::BackgroundJob->fetch($sessionID, $jobID);
-
-=back
+ my $job = C4::BackgroundJob->fetch($sessionID, $jobID);
 
 Retrieve a job that has been serialized to the database. 
 Returns C<undef> if the job does not exist in the current 
@@ -309,31 +253,59 @@ sub fetch {
 
     my $session = get_session($sessionID);
     my $prefix = "job_$jobID";
-    unless (defined $session->param("$prefix.name")) {
-        return undef;
-    }
-    my $self = {};
-    
-    $self->{'name'} = $session->param("$prefix.name");
-    $self->{'status'} = $session->param("$prefix.status");
-    $self->{'invoker'} = $session->param("$prefix.invoker");
-    $self->{'size'} = $session->param("$prefix.size");
-    $self->{'progress'} = $session->param("$prefix.progress");
-    if (defined(my $keys = $session->param("$prefix.results_keys"))) {
-        my @keys = split /\t/, $keys;
-        $self->{'results'} = {};
-        foreach my $key (@keys) {
-            $self->{'results'}->{$key} = $session->param("$prefix.results.$key");
-        }
+    unless (defined $session->param($prefix)) {
+        return;
     }
-
+    my $self = $session->param($prefix);
     bless $self, $class;
     return $self;
 }
 
+=head2 set
+
+=over 4
+
+=item $job->set($hashref);
+
+=back
+
+Set some variables into the hashref.
+These variables can be retrieved using the get method.
+
+=cut
+
+sub set {
+    my ($self, $hashref) = @_;
+    while ( my ($k, $v) = each %$hashref ) {
+        $self->{extra_values}->{$k} = $v;
+    }
+    $self->_serialize();
+    return;
+}
+
+=head2 get
+
+=over 4
+
+=item $value = $job->get($key);
+
+=back
+
+Get a variable which has been previously stored with the set method.
+
+=cut
+
+sub get {
+    my ($self, $key) = @_;
+    return $self->{extra_values}->{$key};
+}
+
+1;
+__END__
+
 =head1 AUTHOR
 
-Koha Development Team <info@koha.org>
+Koha Development Team <http://koha-community.org/>
 
 Galen Charlton <galen.charlton@liblime.com>