File Coverage

File:C4/AuthoritiesMarc/MARC21.pm
Coverage:58.3%

linestmtbrancondsubtimecode
1package 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;
23our $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
69sub 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
96sub 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
1161;