var backgroundJobProgressTimer = 0; var jobID = ''; var savedForm; var inBackgroundJobProgressTimer = false; function updateJobProgress() { if (inBackgroundJobProgressTimer) { return; } inBackgroundJobProgressTimer = true; $.getJSON("/cgi-bin/koha/tools/background-job-progress.pl?jobID=" + jobID, function(json) { var percentage = json.job_status == 'completed' ? 100 : json.job_size > 0 ? Math.floor(100 * json.progress / json.job_size) : 100; var bgproperty = (parseInt(percentage/2)*3-300)+"px 0px"; $("#jobprogress").css("background-position",bgproperty); $("#jobprogresspercent").text(percentage); if (percentage == 100) { clearInterval(backgroundJobProgressTimer); // just in case form submission fails completeJob(); } inBackgroundJobProgressTimer = false; }); } function completeJob() { savedForm.completedJobID.value = jobID; savedForm.submit(); } // submit a background job with data // supplied from form f and activate // progress indicator function submitBackgroundJob(f) { // check for background field if (f.runinbackground) { // set value of this hidden field for // use by CGI script savedForm = f; f.mainformsubmit.disabled = true; f.runinbackground.value = 'true'; // gather up form submission var inputs = []; $(':input', f).each(function() { if (this.type == 'radio' || this.type == 'checkbox') { if (this.checked) { inputs.push(this.name + '=' + encodeURIComponent(this.value)); } } else if (this.type == 'button') { ; // do nothing } else { inputs.push(this.name + '=' + encodeURIComponent(this.value)); } }); // and submit the request $("#jobpanel").show(); $("#jobstatus").show(); $.ajax({ data: inputs.join('&'), url: f.action, dataType: 'json', type: 'post', success: function(json) { jobID = json.jobID; inBackgroundJobProgressTimer = false; backgroundJobProgressTimer = setInterval("updateJobProgress()", 500); }, error: function(xml, textStatus) { alert('Failed to submit form: ' + textStatus); } }); } else { // background job support not enabled, // so just do a normal form submission f.submit(); } return false; }