Browse Source
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> Signed-off-by: David Cook <dcook@prosentient.com.au> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>20.11.x
Jonathan Druart
5 years ago
2 changed files with 232 additions and 0 deletions
@ -0,0 +1,67 @@ |
|||
#! /usr/bin/perl |
|||
|
|||
# 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 3 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, see <http://www.gnu.org/licenses>. |
|||
|
|||
use Modern::Perl; |
|||
use CGI qw ( -utf8 ); |
|||
use JSON qw( decode_json ); |
|||
use C4::Context; |
|||
use C4::Auth; |
|||
use C4::Output; |
|||
|
|||
use Koha::BackgroundJob; |
|||
use Koha::BackgroundJobs; |
|||
|
|||
my $input = new CGI; |
|||
my $op = $input->param('op') || 'list'; |
|||
my @messages; |
|||
|
|||
my ( $template, $loggedinuser, $cookie ) = get_template_and_user( |
|||
{ |
|||
template_name => "admin/background_jobs.tt", |
|||
query => $input, |
|||
type => "intranet", |
|||
authnotrequired => 0, |
|||
flagsrequired => { parameters => 'manage_background_jobs' }, # TODO Add this new permission, so far only works for superlibrarians |
|||
debug => 1, |
|||
} |
|||
); |
|||
|
|||
my $dbh = C4::Context->dbh; |
|||
|
|||
if ( $op eq 'view' ) { |
|||
my $id = $input->param('id'); |
|||
if ( my $job = Koha::BackgroundJobs->find($id) ) { |
|||
$template->param( |
|||
job => $job, |
|||
); |
|||
} else { |
|||
$op = 'list'; |
|||
} |
|||
|
|||
} |
|||
|
|||
if ( $op eq 'list' ) { |
|||
my $jobs = Koha::BackgroundJobs->search({}, { order_by => { -desc => 'enqueued_on' }}); |
|||
$template->param( jobs => $jobs, ); |
|||
} |
|||
|
|||
$template->param( |
|||
messages => \@messages, |
|||
op => $op, |
|||
); |
|||
|
|||
output_html_with_http_headers $input, $cookie, $template->output; |
@ -0,0 +1,165 @@ |
|||
[% USE raw %] |
|||
[% USE Asset %] |
|||
[% SET footerjs = 1 %] |
|||
[% INCLUDE 'doc-head-open.inc' %] |
|||
<title>Koha › Administration › [% IF op =='add_form' %]Background jobs› [% IF job %] View background job[% ELSE %] Background jobs[% END %][% END %]</title> |
|||
[% INCLUDE 'doc-head-close.inc' %] |
|||
</head> |
|||
|
|||
<body id="admin_background_jobs" class="admin"> |
|||
[% INCLUDE 'header.inc' %] |
|||
|
|||
<div id="breadcrumbs"> |
|||
<a href="/cgi-bin/koha/mainpage.pl">Home</a> |
|||
› <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> |
|||
› <a href="/cgi-bin/koha/admin/background_jobs.pl">Background jobs</a> |
|||
</div> |
|||
|
|||
<div class="main container-fluid"> |
|||
<div class="row"> |
|||
<div class="col-sm-10 col-sm-push-2"> |
|||
<main> |
|||
|
|||
[% FOR m IN messages %] |
|||
<div class="dialog [% m.type | html %]"> |
|||
[% SWITCH m.code %] |
|||
[% CASE %] |
|||
[% m.code | html %] |
|||
[% END %] |
|||
</div> |
|||
[% END %] |
|||
|
|||
[% IF op == 'view' %] |
|||
<h1>Detail of job #[% job.id | html %]</h1> |
|||
|
|||
<fieldset class="rows"> |
|||
<ol> |
|||
<li><span class="label">Job ID: </span>[% job.id | html %]</li> |
|||
<li><label for="job_status">Status: </label>[% job.status | html %]</li> |
|||
<li><label for="job_progress">Progress: </label>[% job.progress || 0 | html %] / [% job.size | html %]</li> |
|||
<li><label for="job_type">Type: </label>[% job.type | html %]</li> |
|||
<li><label for="job_enqueued_on">enqueued_on: </label>[% job.enqueued_on | html %]</li> |
|||
<li><label for="job_started_on">started_on: </label>[% job.started_on | html %]</li> |
|||
<li><label for="job_ended_on">ended_on: </label>[% job.ended_on | html %]</li> |
|||
<li><label for="job_data">Report: </label> |
|||
[% SWITCH job.type %] |
|||
[% CASE 'batch_biblio_record_modification' %] |
|||
[% SET report = job.report %] |
|||
[% IF report %] |
|||
[% IF report.total_records == report.total_success %] |
|||
<div class="dialog message"> |
|||
All records have successfully been modified! <a href="/cgi-bin/koha/tools/batch_record_modification.pl" title="New batch record modification">New batch record modification</a> |
|||
</div> |
|||
[% ELSE %] |
|||
<div class="dialog message"> |
|||
[% report.total_success | html %] / [% report.total_records | html %] records have successfully been modified. Some errors occurred. <a href="/cgi-bin/koha/tools/batch_record_modification.pl" title="New batch record modification">New batch record modification</a> |
|||
</div> |
|||
[% END %] |
|||
[% END %] |
|||
[% CASE %][% job.type | html %] |
|||
[% END %] |
|||
</li> |
|||
<li><label for="job_data">Detailed messages: </label> |
|||
[% SWITCH job.type %] |
|||
[% CASE 'batch_biblio_record_modification' %] |
|||
[% FOR m IN job.messages %] |
|||
<div class="dialog message"> |
|||
[% IF m.type == 'success' %] |
|||
<i class="fa fa-check success"></i> |
|||
[% ELSIF m.type == 'warning' %] |
|||
<i class="fa fa-warning warn"></i> |
|||
[% ELSIF m.type == 'error' %] |
|||
<i class="fa fa-exclamation error"></i> |
|||
[% END %] |
|||
[% SWITCH m.code %] |
|||
[% CASE 'biblio_not_modified' %] |
|||
Bibliographic record <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% m.biblionumber | uri %]">[% m.biblionumber | html %]</a> has not been modified. An error occurred on modifying it. |
|||
[% CASE 'biblio_modified' %] |
|||
Bibliographic record <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% m.biblionumber | uri %]">[% m.biblionumber | html %]</a> has successfully been modified. |
|||
[% END %] |
|||
</div> |
|||
[% END %] |
|||
[% CASE %][% job.type | html %] |
|||
[% END %] |
|||
</li> |
|||
</ol> |
|||
</fieldset> |
|||
|
|||
<a href="/cgi-bin/koha/admin/background_jobs.pl">Return to the job list</a> |
|||
[% END %] |
|||
|
|||
[% IF op == 'list' %] |
|||
|
|||
<h2>Background jobs</h2> |
|||
|
|||
[% IF jobs.count %] |
|||
<table id="table_background_jobs"> |
|||
<thead> |
|||
<tr> |
|||
<th>Job ID</th> |
|||
<th>Status</th> |
|||
<th>Progress</th> |
|||
<th>Type</th> |
|||
<th>Enqueued on</th> |
|||
<th>Started on</th> |
|||
<th>Ended on</th> |
|||
<th>Actions (NIY)</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
[% FOREACH job IN jobs %] |
|||
<tr> |
|||
<td>[% job.id | html %]</td> |
|||
<td>[% job.status | html %]</td> |
|||
<td>[% job.progress || 0 | html %] / [% job.size | html %]</td> |
|||
<td> |
|||
[% SWITCH job.type %] |
|||
[% CASE 'batch_biblio_record_modification' %]Batch bibliographic record modification |
|||
[% CASE %][% job.type | html %] |
|||
[% END %] |
|||
</td> |
|||
<td>[% job.enqueued_on | html %]</td> |
|||
<td>[% job.started_on| html %]</td> |
|||
<td>[% job.ended_on| html %]</td> |
|||
<td class="actions"> |
|||
<a class="btn btn-default btn-xs disabled" href="/cgi-bin/koha/admin/background_jobs.pl?op=delete_confirm&id=[% job.id | html %]"><i class="fa fa-pencil"></i> Delete</a> |
|||
<a class="btn btn-default btn-xs disabled" href="/cgi-bin/koha/admin/background_jobs.pl?op=replay&id=[% job.id | html %]"><i class="fa fa-trash"></i> Replay</a> |
|||
</td> |
|||
</tr> |
|||
[% END %] |
|||
</tbody> |
|||
</table> |
|||
[% ELSE %] |
|||
<div class="dialog message"> |
|||
There are no background jobs yet. |
|||
</div> |
|||
[% END %] |
|||
[% END %] |
|||
|
|||
</main> |
|||
</div> <!-- /.col-sm-10.col-sm-push-2 --> |
|||
|
|||
<div class="col-sm-2 col-sm-pull-10"> |
|||
<aside> |
|||
[% INCLUDE 'admin-menu.inc' %] |
|||
</aside> |
|||
</div> <!-- /.col-sm-2.col-sm-pull-10 --> |
|||
</div> <!-- /.row --> |
|||
|
|||
[% MACRO jsinclude BLOCK %] |
|||
[% Asset.js("js/admin-menu.js") | $raw %] |
|||
[% INCLUDE 'datatables.inc' %] |
|||
<script> |
|||
$(document).ready(function() { |
|||
$("#table_cities").dataTable($.extend(true, {}, dataTablesDefaults, { |
|||
"aoColumnDefs": [ |
|||
{ "aTargets": [ -1, -2 ], "bSortable": false, "bSearchable": false }, |
|||
], |
|||
"aaSorting": [[ 1, "asc" ]], |
|||
"iDisplayLength": 10, |
|||
"sPaginationType": "full_numbers" |
|||
})); |
|||
}); |
|||
</script> |
|||
[% END %] |
|||
[% INCLUDE 'intranet-bottom.inc' %] |
Loading…
Reference in new issue