#!/usr/bin/perl

# Script for testing progressbar, part 2 - json submit handler
#   and Z39.50 lookups

# Koha library project  www.koha-community.org

# Licensed under the GPL

# Copyright 2010  Catalyst IT, Ltd
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# 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.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

use strict;
use warnings;

# standard or CPAN modules used
use CGI;
use CGI::Cookie;

# Koha modules used
use C4::Context;
use C4::Auth;
use C4::Output;
use C4::BackgroundJob;

my $input = new CGI;

my $submitted=$input->param('submitted');
my $runinbackground = $input->param('runinbackground');
my $jobID = $input->param('jobID');
my $completedJobID = $input->param('completedJobID');

my ($template, $loggedinuser, $cookie)
    = get_template_and_user({template_name => "test/progressbar.tmpl",
                    query => $input,
                    type => "intranet",
                    debug => 1,
                    });

my %cookies = parse CGI::Cookie($cookie);
my $sessionID = $cookies{'CGISESSID'}->value;
if ($completedJobID) {
} elsif ($submitted) {
    my $job = undef;
    if ($runinbackground) {
        my $job_size = 100;
        $job = C4::BackgroundJob->new($sessionID, undef, $ENV{'SCRIPT_NAME'}, $job_size);
        $jobID = $job->id();

        # fork off
        if (my $pid = fork) {
            # parent
            # return job ID as JSON
            
            # prevent parent exiting from
            # destroying the kid's database handle
            # FIXME: according to DBI doc, this may not work for Oracle

            my $reply = CGI->new("");
            print $reply->header(-type => 'text/html');
            print '{"jobID":"' . $jobID . '"}';
            exit 0;
        } elsif (defined $pid) {
        # if we get here, we're a child that has detached
        # itself from Apache

            # close STDOUT to signal to Apache that
            # we're now running in the background
            close STDOUT;
            close STDERR;

            foreach (1..100) {
                $job->progress( $_ );
                sleep 1;
            }
            $job->finish();
        } else {
            # fork failed, so exit immediately
            die "fork failed while attempting to run $ENV{'SCRIPT_NAME'} as a background job";
        }

    }
} else {
    # initial form
    die "We should not be here";
}

exit 0;


