| File: | C4/AuthoritiesMarc/MARC21.pm |
| Coverage: | 58.3% |
| line | stmt | bran | cond | sub | time | code |
|---|---|---|---|---|---|---|
| 1 | package C4::AuthoritiesMarc::MARC21; | |||||
| 2 | ||||||
| 3 | # Copyright (C) 2007 LibLime | |||||
| 4 | # | |||||
| 5 | # This file is part of Koha. | |||||
| 6 | # | |||||
| 7 | # Koha is free software; you can redistribute it and/or modify it under the | |||||
| 8 | # terms of the GNU General Public License as published by the Free Software | |||||
| 9 | # Foundation; either version 2 of the License, or (at your option) any later | |||||
| 10 | # version. | |||||
| 11 | # | |||||
| 12 | # Koha is distributed in the hope that it will be useful, but WITHOUT ANY | |||||
| 13 | # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |||||
| 14 | # A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |||||
| 15 | # | |||||
| 16 | # You should have received a copy of the GNU General Public License along | |||||
| 17 | # with Koha; if not, write to the Free Software Foundation, Inc., | |||||
| 18 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |||||
| 19 | ||||||
| 20 | 8 8 8 | 71886 24 296 | use strict; | |||
| 21 | #use warnings; FIXME - Bug 2505 | |||||
| 22 | 8 8 8 | 43 19 1786 | use MARC::Record; | |||
| 23 | our $VERSION = 3.00; | |||||
| 24 | ||||||
| 25 - 47 | =head1 NAME C4::AuthoritiesMarc::MARC21 =head1 SYNOPSIS use C4::AuthoritiesMarc::MARC21; =head1 DESCRIPTION This is a helper module providing functions used by C<C4::AuthoritiesMarc> to deal with behavior specific to MARC21 authority records (as opposed to other MARC formats). Functions from this module generally should not be used directly; instead, use the appropriate function from C<C4::Authorities> that will dispatch the appropriate function based on the marcflavour system preference. =head1 FUNCTIONS =cut | |||||
| 48 | ||||||
| 49 - 57 | =head2 get_heading_type_from_marc my $auth_type = get_auth_type_from_marc($marc); Given a MARC::Record object containing an authority record, determine its heading type (e.g., personal name, topical term, etc.). =cut | |||||
| 58 | ||||||
| 59 - 67 | =head2 default_auth_type_location my ($tag, $subfield) = default_auth_type_location(); Get the tag and subfield used to store the heading type if not specified in the MARC framework. For MARC21, this defaults to 942$a. =cut | |||||
| 68 | ||||||
| 69 | sub default_auth_type_location { | |||||
| 70 | 2 | 444877 | return ('942', 'a'); | |||
| 71 | } | |||||
| 72 | ||||||
| 73 - 94 | =head2 fix_marc21_auth_type_location
fix_marc21_auth_type_location($auth_marc, $auth_type_tag, $auth_type_subfield);
If the incoming C<MARC::Record> object has a 152$b, remove it. If no
field already exists that contains the specified C<$auth_type_tag>
and C<$auth_type_subfield>, create a new field whose contents
are the original contents of the 152$b.
This routine exists to deal with a historical problem: MARC21
authority records in previous versions of Koha kept the
authority type in the 152$b. While the 152 may be OK for UNIMARC,
a 9XX should have been used for MARC21.
This function is meant to be called from GetAuthority, GetAuthorityXML,
and AddAuthority.
FIXME: This function should be removed once it's determined
that no MARC21 users of Koha are using the 152$b
to store the authority type.
=cut | |||||
| 95 | ||||||
| 96 | sub fix_marc21_auth_type_location { | |||||
| 97 | 2 | 2585 | my ($auth_marc, $auth_type_tag, $auth_type_subfield) = @_; | |||
| 98 | ||||||
| 99 | 2 | 4 | my $auth_type_code; | |||
| 100 | 2 | 16 | return unless $auth_type_code = $auth_marc->subfield('152', 'b'); | |||
| 101 | 0 | $auth_marc->delete_field($auth_marc->field('152')); | ||||
| 102 | 0 | unless ($auth_marc->field($auth_type_tag) && $auth_marc->subfield($auth_type_tag, $auth_type_subfield)) { | ||||
| 103 | 0 | $auth_marc->add_fields($auth_type_tag,'','', $auth_type_subfield=>$auth_type_code); | ||||
| 104 | } | |||||
| 105 | ||||||
| 106 | } | |||||
| 107 | ||||||
| 108 - 114 | =head1 AUTHOR Koha Development Team <http://koha-community.org/> Galen Charlton <galen.charlton@liblime.com> =cut | |||||
| 115 | ||||||
| 116 | 1; | |||||