c704a682322b35a1fb71de1fccc0132278d3f1e9
[srvgit] / C4 / AuthoritiesMarc / MARC21.pm
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
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20 use Modern::Perl;
21 use MARC::Record;
22
23 =head1 NAME
24
25 C4::AuthoritiesMarc::MARC21
26
27 =head1 SYNOPSIS
28
29 use C4::AuthoritiesMarc::MARC21;
30
31 =head1 DESCRIPTION
32
33 This is a helper module providing functions used by
34 C<C4::AuthoritiesMarc> to deal with behavior specific
35 to MARC21 authority records (as opposed to other
36 MARC formats).
37
38 Functions from this module generally should not be used
39 directly; instead, use the appropriate function from
40 C<C4::Authorities> that will dispatch the appropriate
41 function based on the marcflavour system preference.
42
43 =head1 FUNCTIONS
44
45 =cut
46
47 =head2 get_heading_type_from_marc
48
49   my $auth_type = get_auth_type_from_marc($marc);
50
51 Given a MARC::Record object containing an authority record,
52 determine its heading type (e.g., personal name, topical term,
53 etc.).
54
55 =cut
56
57 =head2 default_auth_type_location
58
59   my ($tag, $subfield) = default_auth_type_location();
60
61 Get the tag and subfield used to store the heading type
62 if not specified in the MARC framework.  For MARC21,
63 this defaults to 942$a.
64
65 =cut
66
67 sub default_auth_type_location {
68     return ('942', 'a');
69 }
70
71 =head2 fix_marc21_auth_type_location 
72
73   fix_marc21_auth_type_location($auth_marc, $auth_type_tag, $auth_type_subfield);
74
75 If the incoming C<MARC::Record> object has a 152$b, remove it.  If no
76 field already exists that contains the specified C<$auth_type_tag>
77 and C<$auth_type_subfield>, create a new field whose contents
78 are the original contents of the 152$b.
79
80 This routine exists to deal with a historical problem: MARC21
81 authority records in previous versions of Koha kept the
82 authority type in the 152$b.  While the 152 may be OK for UNIMARC,
83 a 9XX should have been used for MARC21.
84
85 This function is meant to be called from GetAuthority, GetAuthorityXML,
86 and AddAuthority.
87
88 FIXME: This function should be removed once it's determined
89        that no MARC21 users of Koha are using the 152$b
90        to store the authority type.
91
92 =cut
93
94 sub fix_marc21_auth_type_location {
95     my ($auth_marc, $auth_type_tag, $auth_type_subfield) = @_;
96
97     my $auth_type_code;
98     return unless $auth_type_code = $auth_marc->subfield('152', 'b');
99     $auth_marc->delete_field($auth_marc->field('152'));
100     unless ($auth_marc->field($auth_type_tag) && $auth_marc->subfield($auth_type_tag, $auth_type_subfield)) {
101         $auth_marc->add_fields($auth_type_tag,'','', $auth_type_subfield=>$auth_type_code); 
102     }
103     
104 }
105
106 =head1 AUTHOR
107
108 Koha Development Team <http://koha-community.org/>
109
110 Galen Charlton <galen.charlton@liblime.com>
111
112 =cut
113
114 1;