diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 0886cb2265..ddf711f00a 100755 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -26,6 +26,7 @@ use MARC::File::USMARC; #$XML::SAX::ParserPackage = "XML::LibXML::SAX"; use MARC::File::XML; use ZOOM; +use POSIX qw(strftime); use C4::Koha; use C4::Dates qw/format_date/; @@ -1419,18 +1420,15 @@ sub GetPublisherNameFromIsbn($){ =cut sub TransformKohaToMarc { - my ( $hash ) = @_; - my $dbh = C4::Context->dbh; - my $sth = - $dbh->prepare( + my $sth = C4::Context->dbh->prepare( "SELECT tagfield,tagsubfield FROM marc_subfield_structure WHERE frameworkcode=? AND kohafield=?" ); my $record = MARC::Record->new(); + SetMarcUnicodeFlag($record, C4::Context->preference("marcflavour")); foreach (keys %{$hash}) { - &TransformKohaToMarcOneField( $sth, $record, $_, - $hash->{$_}, '' ); - } + &TransformKohaToMarcOneField( $sth, $record, $_, $hash->{$_}, '' ); + } return $record; } @@ -1592,7 +1590,6 @@ sub TransformHtmlToXml { $xml .= "\n" if @$tags > 0; if (C4::Context->preference('marcflavour') eq 'UNIMARC' and !$unimarc_and_100_exist) { # warn "SETTING 100 for $auth_type"; - use POSIX qw(strftime); my $string = strftime( "%Y%m%d", localtime(time) ); # set 50 to position 26 is biblios, 13 if authorities my $pos=26; diff --git a/C4/Charset.pm b/C4/Charset.pm index 4b73ceb9f8..5ca40daf82 100644 --- a/C4/Charset.pm +++ b/C4/Charset.pm @@ -25,7 +25,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); BEGIN { # set the version for version checking - $VERSION = 3.00; + $VERSION = 3.01; require Exporter; @ISA = qw(Exporter); @EXPORT = qw( @@ -228,7 +228,7 @@ any actual character conversion. sub SetMarcUnicodeFlag { my $marc_record = shift; - my $marc_flavour = shift; + my $marc_flavour = shift; # || C4::Context->preference("marcflavour"); $marc_record->encoding('UTF-8'); if ($marc_flavour eq 'MARC21') { @@ -241,6 +241,8 @@ sub SetMarcUnicodeFlag { substr($sfa, 26, 4) = '5050'; $field->update('a' => $sfa); } + } else { + warn "Unrecognized marcflavour: $marc_flavour"; } } diff --git a/acqui/addorder.pl b/acqui/addorder.pl index a9b5f9cd48..58b48677e5 100755 --- a/acqui/addorder.pl +++ b/acqui/addorder.pl @@ -165,17 +165,12 @@ my $purchaseorder = $input->param('purchaseordernumber'); my $invoice = $input->param('invoice'); my $publishercode = $input->param('publishercode'); my $suggestionid = $input->param('suggestionid'); -my $user = $input->remote_user; - -#warn "CREATEBIBITEM = $input->param('createbibitem')"; -#warn Dumper $input->param('createbibitem'); -my $createbibitem = $input->param('createbibitem'); +my $biblionumber = $input->param('biblionumber'); # create, modify or delete biblio # create if $quantity>=0 and $existing='no' # modify if $quantity>=0 and $existing='yes' # delete if $quantity has been set to 0 by the librarian -my $biblionumber = $input->param('biblionumber'); my $bibitemnum; if ( $quantity ne '0' ) { #check to see if biblio exists diff --git a/misc/maintenance/leader_fix.pl b/misc/maintenance/MARC21_utf8_flag_fix.pl similarity index 88% rename from misc/maintenance/leader_fix.pl rename to misc/maintenance/MARC21_utf8_flag_fix.pl index 06d36fcdd5..dcbecc1dc1 100755 --- a/misc/maintenance/leader_fix.pl +++ b/misc/maintenance/MARC21_utf8_flag_fix.pl @@ -72,7 +72,8 @@ if ($debug) { $verbose++; } -my $marcflavour = C4::Context->preference('marcflavour'); +my $marcflavour = C4::Context->preference('marcflavour') or die "No marcflavour (MARC21 or UNIMARC) set in syspref"; +($marcflavour eq 'MARC21') or die "marcflavour must be MARC21, not $marcflavour"; my $all = C4::Context->dbh->prepare("SELECT COUNT(*) FROM biblioitems"); $all->execute; @@ -100,8 +101,6 @@ $limit or $limit = $bad_recs->rows(); # limit becomes max if unspecified $limit += $offset if $offset; # increase limit for offset my $i = 0; -$marcflavour or die "No marcflavour (MARC21 or UNIMARC) set in syspref"; - MARC::File::XML->default_record_format($marcflavour) or die "FAILED MARC::File::XML->default_record_format($marcflavour)"; while ( my $row = $bad_recs->fetchrow_hashref() ) { @@ -120,7 +119,7 @@ while ( my $row = $bad_recs->fetchrow_hashref() ) { next; } if ($fix) { - $record->encoding('UTF-8'); + SetMarcUnicodeFlag($record, $marcflavour); if (ModBiblioMarc($record, $row->{biblionumber})) { printf "# %4d of %4d: biblionumber %s : %s\n", $i, $badcount, $row->{biblionumber}, $record->leader(); } else { @@ -134,13 +133,13 @@ __END__ =head1 NAME -leader_fix.pl - Repair missing leader position 9 value ("a" for MARC21 - UTF8). +MARC21_utf8_flag_fix.pl - Repair missing leader position 9 value ("a" for MARC21 - UTF8). =head1 SYNOPSIS -leader_fix.pl [ -h | -m ] [ -v ] [ -d ] [ -s ] [ -l N ] [ -o N ] [ -f ] +MARC21_utf8_flag_fix.pl [ -h | -m ] [ -v ] [ -d ] [ -s ] [ -l N ] [ -o N ] [ -f ] - Help Options: + Help Optionsc -h --help -? Brief help message -m --man Full documentation, same as --help --verbose --version Prints version info @@ -188,25 +187,27 @@ presents a problem when records have been inserted with the leader/09 showing blank for MARC8 encoding. This script is used to determine the extent of the problem and to fix the affected leaders. -Run leader_fix.pl the first time with no options, and assuming you agree that the leaders +As the name suggests, this script is only useful for MARC21 and will die for marcflavour UNIMARC. + +Run MARC21_utf8_flag_fix.pl the first time with no options, and assuming you agree that the leaders presented need fixing, run it again with B<--fix>. =head1 USAGE EXAMPLES -B +B In the most basic form, displays summary of biblioitems examined and the leader from any found without /09 = a. -B +B Fixes the same biblioitems, displaying summary and each leader before/after change. -B +B Dumps MARCXML from the 16th, 17th and 18th bad records found. -B +B Same thing as previous example in terse form.