X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=tools%2Fmanage-marc-import.pl;h=4fea4005d7891ef9a3809e3a558a68401f8b86b8;hb=d2ce727e260f6b45266a8147aee7654811a44fa1;hp=32d3645ab55d62f128e1acdd71ce9f434cb96cea;hpb=a8c5497b8da7de25b7c4787ee5540e4e1b48704d;p=srvgit diff --git a/tools/manage-marc-import.pl b/tools/manage-marc-import.pl index 32d3645ab5..4fea4005d7 100755 --- a/tools/manage-marc-import.pl +++ b/tools/manage-marc-import.pl @@ -4,24 +4,23 @@ # # 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; @@ -36,7 +35,7 @@ use C4::ImportBatch; 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"; @@ -51,7 +50,7 @@ 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, @@ -63,15 +62,8 @@ 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. @@ -124,6 +116,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'); @@ -235,21 +233,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 +271,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 +310,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 +335,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,60 +369,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 = ''; - 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'}); - } elsif ($match->[0]->{'record_type'} eq 'auth') { - $match_citation .= $match->[0]->{'authorized_heading'} if defined($match->[0]->{'authorized_heading'}); - } - } - - 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 > -1 ? $match->[0]->{'biblionumber'} : 0, - 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); }