X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=tools%2Fmanage-marc-import.pl;h=ef0bd36d332ed43652c1064e6e7ab48522d836cd;hb=9d6d641d1f8b77271800f43bc027b651f9aea52b;hp=25f7769c1c054ce0b985131edd18389646028763;hpb=a278407a476c67c334e1e76fc72c1871a7328af5;p=srvgit diff --git a/tools/manage-marc-import.pl b/tools/manage-marc-import.pl index 25f7769c1c..ef0bd36d33 100755 --- a/tools/manage-marc-import.pl +++ b/tools/manage-marc-import.pl @@ -4,43 +4,40 @@ # # 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 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. +# 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. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; # standard or CPAN modules used -use CGI; +use CGI qw ( -utf8 ); use CGI::Cookie; use MARC::File::USMARC; # Koha modules used use C4::Context; use C4::Koha; -use C4::Auth; -use C4::AuthoritiesMarc; -use C4::Output; -use C4::Biblio; -use C4::ImportBatch; +use C4::Auth qw( get_template_and_user ); +use C4::Output qw( output_html_with_http_headers ); +use C4::ImportBatch qw( CleanBatch DeleteBatch GetImportBatch GetImportBatchOverlayAction GetImportBatchNoMatchAction GetImportBatchItemAction SetImportBatchOverlayAction SetImportBatchNoMatchAction SetImportBatchItemAction BatchFindDuplicates SetImportBatchMatcher GetItemNumbersFromImportBatch GetImportBatchRangeDesc GetNumberOfNonZ3950ImportBatches BatchCommitRecords BatchRevertRecords ); use C4::Matcher; use C4::BackgroundJob; use C4::Labels::Batch; -use C4::Branch qw(get_branch_code_from_name); +use Koha::BiblioFrameworks; my $script_name = "/cgi-bin/koha/tools/manage-marc-import.pl"; -my $input = new CGI; +my $input = CGI->new; my $op = $input->param('op') || ''; my $completedJobID = $input->param('completedJobID'); our $runinbackground = $input->param('runinbackground'); @@ -51,38 +48,29 @@ my $offset = $input->param('offset') || 0; my $results_per_page = $input->param('results_per_page') || 25; my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "tools/manage-marc-import.tmpl", + = get_template_and_user({template_name => "tools/manage-marc-import.tt", query => $input, type => "intranet", - authnotrequired => 0, flagsrequired => {tools => 'manage_staged_marc'}, - debug => 1, }); my %cookies = parse CGI::Cookie($cookie); our $sessionID = $cookies{'CGISESSID'}->value; our $dbh = C4::Context->dbh; -# Frameworks selection loop -{ - my $frameworks = getframeworks; - my $arrayref = []; - while ( my ($key, $value) = each %$frameworks ) { - push @$arrayref, { value => $key, label => $value->{frameworktext} }; - } - $template->param( frameworks => $arrayref ); -} +my $frameworks = Koha::BiblioFrameworks->search({ tagfield => { 'not' => undef } }, { join => 'marc_tag_structure', distinct => 'frameworkcode', order_by => ['frameworktext'] }); +$template->param( frameworks => $frameworks ); if ($op eq "create_labels") { #create a batch of labels, then lose $op & $import_batch_id so we get back to import batch list. my $label_batch_id = create_labelbatch_from_importbatch($import_batch_id); if ($label_batch_id == -1) { - $template->param( label_batch_msg => "Error attempting to create label batch. Please ask your system administrator to check the log for more details.", + $template->param( label_batch_msg => "error", message_type => 'alert', ); } else { - $template->param( label_batch_msg => "Label batch #$label_batch_id created.", + $template->param( label_batch_msg => $label_batch_id, message_type => 'dialog', ); } @@ -124,6 +112,12 @@ if ($op eq "") { did_clean => 1, import_batch_id => $import_batch_id, ); +} elsif ($op eq "delete-batch") { + DeleteBatch($import_batch_id); + import_batches_list($template, $offset, $results_per_page); + $template->param( + did_delete => 1, + ); } elsif ($op eq "redo-matching") { my $new_matcher_id = $input->param('new_matcher_id'); my $current_matcher_id = $input->param('current_matcher_id'); @@ -219,6 +213,7 @@ sub import_batches_list { comments => $batch->{'comments'}, can_clean => ($batch->{'import_status'} ne 'cleaned') ? 1 : 0, record_type => $batch->{'record_type'}, + profile => $batch->{'profile'}, }; } $template->param(batch_list => \@list); @@ -235,21 +230,31 @@ sub commit_batch { my ($template, $import_batch_id, $framework) = @_; my $job = undef; - $dbh->{AutoCommit} = 0; - my $callback = sub {}; - if ($runinbackground) { - $job = put_in_background($import_batch_id); - $callback = progress_callback($job, $dbh); - } - my ($num_added, $num_updated, $num_items_added, $num_items_errored, $num_ignored) = - BatchCommitRecords($import_batch_id, $framework, 50, $callback); - $dbh->commit(); + my ( $num_added, $num_updated, $num_items_added, + $num_items_replaced, $num_items_errored, $num_ignored ); + my $schema = Koha::Database->new->schema; + $schema->storage->txn_do( + sub { + my $callback = sub { }; + if ($runinbackground) { + $job = put_in_background($import_batch_id); + $callback = progress_callback( $job, $dbh ); + } + ( + $num_added, $num_updated, $num_items_added, + $num_items_replaced, $num_items_errored, $num_ignored + ) + = BatchCommitRecords( $import_batch_id, $framework, 50, + $callback ); + } + ); my $results = { did_commit => 1, num_added => $num_added, num_updated => $num_updated, num_items_added => $num_items_added, + num_items_replaced => $num_items_replaced, num_items_errored => $num_items_errored, num_ignored => $num_ignored }; @@ -263,16 +268,25 @@ sub commit_batch { sub revert_batch { my ($template, $import_batch_id) = @_; - $dbh->{AutoCommit} = 0; my $job = undef; - my $callback = sub {}; - if ($runinbackground) { - $job = put_in_background($import_batch_id); - $callback = progress_callback($job, $dbh); - } - my ($num_deleted, $num_errors, $num_reverted, $num_items_deleted, $num_ignored) = - BatchRevertRecords($import_batch_id, 50, $callback); - $dbh->commit(); + my ( + $num_deleted, $num_errors, $num_reverted, + $num_items_deleted, $num_ignored + ); + my $schema = Koha::Database->new->schema; + $schema->txn_do( + sub { + my $callback = sub { }; + if ($runinbackground) { + $job = put_in_background($import_batch_id); + $callback = progress_callback( $job, $dbh ); + } + ( + $num_deleted, $num_errors, $num_reverted, + $num_items_deleted, $num_ignored + ) = BatchRevertRecords( $import_batch_id, 50, $callback ); + } + ); my $results = { did_revert => 1, @@ -293,7 +307,7 @@ sub put_in_background { my $import_batch_id = shift; my $batch = GetImportBatch($import_batch_id); - my $job = C4::BackgroundJob->new($sessionID, $batch->{'file_name'}, $ENV{'SCRIPT_NAME'}, $batch->{'num_records'}); + my $job = C4::BackgroundJob->new($sessionID, $batch->{'file_name'}, '/cgi-bin/koha/tools/manage-marc-import.pl', $batch->{'num_records'}); my $jobID = $job->id(); # fork off @@ -318,7 +332,7 @@ sub put_in_background { close STDERR; } else { # fork failed, so exit immediately - warn "fork failed while attempting to run $ENV{'SCRIPT_NAME'} as a background job"; + warn "fork failed while attempting to run tools/manage-marc-import.pl as a background job"; exit 0; } return $job; @@ -352,65 +366,20 @@ sub import_records_list { my ($template, $import_batch_id, $offset, $results_per_page) = @_; my $batch = GetImportBatch($import_batch_id); - my $records = GetImportRecordsRange($import_batch_id, $offset, $results_per_page); - my @list = (); - foreach my $record (@$records) { - my $citation = $record->{'title'} || $record->{'authorized_heading'}; - $citation .= " $record->{'author'}" if $record->{'author'}; - $citation .= " (" if $record->{'issn'} or $record->{'isbn'}; - $citation .= $record->{'isbn'} if $record->{'isbn'}; - $citation .= ", " if $record->{'issn'} and $record->{'isbn'}; - $citation .= $record->{'issn'} if $record->{'issn'}; - $citation .= ")" if $record->{'issn'} or $record->{'isbn'}; - - my $match = GetImportRecordMatches($record->{'import_record_id'}, 1); - my $match_citation = ''; - my $match_id; - if ($#$match > -1) { - if ($match->[0]->{'record_type'} eq 'biblio') { - $match_citation .= $match->[0]->{'title'} if defined($match->[0]->{'title'}); - $match_citation .= ' ' . $match->[0]->{'author'} if defined($match->[0]->{'author'}); - $match_id = $match->[0]->{'biblionumber'}; - } elsif ($match->[0]->{'record_type'} eq 'auth') { - if (defined($match->[0]->{'authorized_heading'})) { - $match_citation .= $match->[0]->{'authorized_heading'}; - $match_id = $match->[0]->{'candidate_match_id'}; - } - } - } - - push @list, - { import_record_id => $record->{'import_record_id'}, - final_match_id => $record->{'matched_biblionumber'} || $record->{'matched_authid'}, - citation => $citation, - status => $record->{'status'}, - record_sequence => $record->{'record_sequence'}, - overlay_status => $record->{'overlay_status'}, - # Sorry about the match_id being from the "biblionumber" field; - # as it turns out, any match id will go in biblionumber - match_id => $match_id, - match_citation => $match_citation, - match_score => $#$match > -1 ? $match->[0]->{'score'} : 0, - record_type => $record->{'record_type'}, - }; - } - my $num_records = $batch->{'num_records'}; - $template->param(record_list => \@list); - add_page_numbers($template, $offset, $results_per_page, $num_records); - $template->param(offset => $offset); - $template->param(range_top => $offset + $results_per_page - 1); - $template->param(num_results => $num_records); - $template->param(results_per_page => $results_per_page); $template->param(import_batch_id => $import_batch_id); + my $overlay_action = GetImportBatchOverlayAction($import_batch_id); $template->param("overlay_action_${overlay_action}" => 1); $template->param(overlay_action => $overlay_action); + my $nomatch_action = GetImportBatchNoMatchAction($import_batch_id); $template->param("nomatch_action_${nomatch_action}" => 1); $template->param(nomatch_action => $nomatch_action); + my $item_action = GetImportBatchItemAction($import_batch_id); $template->param("item_action_${item_action}" => 1); $template->param(item_action => $item_action); + batch_info($template, $batch); } @@ -419,6 +388,7 @@ sub batch_info { my ($template, $batch) = @_; $template->param(batch_info => 1); $template->param(file_name => $batch->{'file_name'}); + $template->param(profile => $batch->{'profile'}); $template->param(comments => $batch->{'comments'}); $template->param(import_status => $batch->{'import_status'}); $template->param(upload_timestamp => $batch->{'upload_timestamp'});