3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20 use JSON
qw( decode_json );
27 use Koha
::BackgroundJobs
;
28 use Koha
::Virtualshelves
;
31 my $op = $input->param('op') || 'list';
34 my ( $template, $loggedinuser, $cookie ) = get_template_and_user
(
36 template_name
=> "admin/background_jobs.tt",
40 flagsrequired
=> { parameters
=> 'manage_background_jobs' }, # Maybe the "view" view should be accessible for the user who create this job.
41 # But in that case what could the permission to check here? tools => '*' ?
46 my $dbh = C4
::Context
->dbh;
48 if ( $op eq 'view' ) {
49 my $id = $input->param('id');
50 if ( my $job = Koha
::BackgroundJobs
->find($id) ) {
54 $template->param( lists
=> scalar Koha
::Virtualshelves
->search([{ category
=> 1, owner
=> $loggedinuser }, { category
=> 2 }]) )
55 if $job->type eq 'batch_biblio_record_modification';
61 if ( $op eq 'cancel' ) {
62 my $id = $input->param('id');
63 if ( my $job = Koha
::BackgroundJobs
->find($id) ) { # FIXME Make sure logged in user can cancel this job
70 if ( $op eq 'list' ) {
71 my $jobs = Koha
::BackgroundJobs
->search({}, { order_by
=> { -desc
=> 'enqueued_on' }});
74 my $conn = Koha
::BackgroundJob
->connect;
75 my $job_type = 'batch_biblio_record_modification';
76 $conn->subscribe({ destination
=> $job_type, ack
=> 'client' });
78 while (my $frame = $conn->receive_frame({timeout
=> 1})) {
80 my $body = $frame->body;
81 my $args = decode_json
($body);
82 push @pending_jobs, $args->{job_id
};
85 $conn->nack( { frame
=> $_ } ) for @frames;
90 code
=> 'cannot_retrieve_jobs',
95 $template->param( jobs
=> $jobs, pending_jobs
=> \
@pending_jobs, );
99 messages
=> \
@messages,
103 output_html_with_http_headers
$input, $cookie, $template->output;