Main Koha release repository https://koha-community.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

125 lines
3.1 KiB

package Koha::MetadataRecord;
# Copyright 2013 C & P Bibliography Services
#
# 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 3 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.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=head1 NAME
Koha::MetadataRecord - base class for metadata records
=head1 SYNOPSIS
my $record = new Koha::MetadataRecord({ 'record' => $record });
=head1 DESCRIPTION
Object-oriented class that encapsulates all metadata (i.e. bibliographic
and authority) records in Koha.
=cut
use Modern::Perl;
use Carp;
use C4::Biblio;
use Koha::Util::MARC;
use base qw(Class::Accessor);
__PACKAGE__->mk_accessors(qw( record schema format id ));
=head2 new
my $metadata_record = new Koha::MetadataRecord({
record => $record,
schema => $schema,
format => $format,
id => $id
});
Returns a Koha::MetadataRecord object encapsulating record metadata.
C<$record> is expected to be a deserialized object (for example
a MARC::Record or XML::LibXML::Document object or JSON).
C<$schema> is used to describe the metadata schema (for example
marc21, unimarc, dc, mods, etc).
C<$format> is used to specify the serialization format. It is important
for Koha::RecordProcessor because it will pick the right Koha::Filter
implementation based on this parameter. Valid values are:
MARC (for MARC::Record objects)
XML (for XML::LibXML::Document objects)
JSON (for JSON objects)
(optional) C<$id> is used so the record carries its own id and Koha doesn't
need to look for it inside the record.
=cut
sub new {
my $class = shift;
my $params = shift;
if (!defined $params->{ record }) {
carp 'No record passed';
return;
}
if (!defined $params->{ schema }) {
carp 'No schema passed';
return;
}
$params->{format} //= 'MARC';
my $self = $class->SUPER::new($params);
bless $self, $class;
return $self;
}
=head2 createMergeHash
Create a hash for use when merging records. At the moment the only
metadata schema supported is MARC.
=cut
sub createMergeHash {
my ($self, $tagslib) = @_;
if ($self->schema =~ m/marc/) {
return Koha::Util::MARC::createMergeHash($self->record, $tagslib);
}
}
=head2 getKohaField
$metadata->{$key} = $record->getKohaField($kohafield);
=cut
sub getKohaField {
my ($self, $kohafield) = @_;
if ($self->schema =~ m/marc/) {
return C4::Biblio::TransformMarcToKohaOneField($kohafield, $self->record);
}
}
1;