diff --git a/C4/AuthoritiesMarc/MARC21.pm b/C4/AuthoritiesMarc/MARC21.pm new file mode 100644 index 0000000000..4de7f39183 --- /dev/null +++ b/C4/AuthoritiesMarc/MARC21.pm @@ -0,0 +1,127 @@ +package C4::AuthoritiesMarc::MARC21; + +# Copyright (C) 2007 LibLime +# +# 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 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., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +use MARC::Record; +our $VERSION = 3.00; + +=head1 NAME + +C4::AuthoritiesMarc::MARC21 + +=head1 SYNOPSIS + +use C4::AuthoritiesMarc::MARC21; + +=head1 DESCRIPTION + +This is a helper module providing functions used by +C 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 that will dispatch the appropriate +function based on the marcflavour system preference. + +=head1 FUNCTIONS + +=cut + +=head2 get_heading_type_from_marc + +=over 4 + +my $auth_type = get_auth_type_from_marc($marc); + +=back + +Given a MARC::Record object containing an authority record, +determine its heading type (e.g., personal name, topical term, +etc.). + +=cut + +=head2 default_auth_type_location + +=over 4 + +my ($tag, $subfield) = default_auth_type_location(); + +=back + +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 + +sub default_auth_type_location { + return ('942', 'a'); +} + +=head2 fix_marc21_auth_type_location + +=over 4 + +fix_marc21_auth_type_location($auth_marc, $auth_type_tag, $auth_type_subfield); + +=back + +If the incoming C 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 + +sub fix_marc21_auth_type_location { + my ($auth_marc, $auth_type_tag, $auth_type_subfield) = @_; + + my $auth_type_code; + return unless $auth_type_code = $auth_marc->subfield('152', 'b'); + $auth_marc->delete_field($auth_marc->field('152')); + unless ($auth_marc->field($auth_type_tag) && $auth_marc->subfield($auth_type_tag, $auth_type_subfield)) { + $auth_marc->add_fields($auth_type_tag,'','', $auth_type_subfield=>$auth_type_code); + } + +} + +=head1 AUTHOR + +Koha Developement team + +Galen Charlton + +=cut + +1; diff --git a/C4/AuthoritiesMarc/UNIMARC.pm b/C4/AuthoritiesMarc/UNIMARC.pm new file mode 100644 index 0000000000..5a148edaf7 --- /dev/null +++ b/C4/AuthoritiesMarc/UNIMARC.pm @@ -0,0 +1,87 @@ +package C4::AuthoritiesMarc::UNIMARC; + +# Copyright (C) 2007 LibLime +# +# 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 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., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +our $VERSION = 3.00; + +=head1 NAME + +C4::AuthoritiesMarc::UNIMARC + +=head1 SYNOPSIS + +use C4::AuthoritiesMarc::UNIMARC; + +=head1 DESCRIPTION + +This is a helper module providing functions used by +C to deal with behavior specific +to UNIMARC 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 that will dispatch the appropriate +function based on the marcflavour system preference. + +=head1 FUNCTIONS + +=cut + +=head2 get_heading_type_from_marc + +=over 4 + +my $auth_type = get_auth_type_from_marc($marc); + +=back + +Given a MARC::Record object containing an authority record, +determine its heading type (e.g., personal name, topical term, +etc.). + +=cut + +=head2 default_auth_type_location + +=over 4 + +my ($tag, $subfield) = default_auth_type_location(); + +=back + +Get the tag and subfield used to store the heading type +if not specified in the MARC framework. For UNIMARC, +this defaults to 152$b. + +=cut + +sub default_auth_type_location { + return ('152', 'b'); +} + +=head1 AUTHOR + +Koha Developement team + +Galen Charlton + +=cut + +1;