use Koha::Caches;
use Koha::Authority::Types;
use Koha::Acquisition::Currencies;
-use Koha::Biblio::Metadata;
use Koha::Biblio::Metadatas;
use Koha::Holds;
use Koha::ItemTypes;
use Koha::SearchEngine;
use Koha::Libraries;
+use Koha::Util::MARC;
use vars qw($debug $cgi_debug);
'', '', "a" => "" . $field->subfield('a') );
map {
$authfield->add_subfields( $_->[0] => $_->[1] )
- if ( $_->[0] =~ /[A-z]/ && $_->[0] ne "a" )
+ if ( $_->[0] =~ /[A-z]/ && $_->[0] ne "a"
+ && C4::Heading::valid_bib_heading_subfield(
+ $authority_type->auth_tag_to_report, $_->[0] )
+ );
} $field->subfields();
$marcrecordauth->insert_fields_ordered($authfield);
FROM biblio_metadata
WHERE biblionumber=?
AND format='marcxml'
- AND marcflavour=?
+ AND `schema`=?
|, undef, $biblionumber, C4::Context->preference('marcflavour')
);
return $marcxml;
#---- branch
if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
- return Koha::Libraries->find($value)->branchname;
+ my $branch = Koha::Libraries->find($value);
+ return $branch? $branch->branchname: q{};
}
#---- itemtypes
my ($hostbiblionumber,$hostitemnumber, $marcflavour) = @_;
$marcflavour ||="MARC21";
- require C4::Items;
my $hostrecord = GetMarcBiblio({ biblionumber => $hostbiblionumber });
- my $item = C4::Items::GetItem($hostitemnumber);
-
+ my $item = Koha::Items->find($hostitemnumber);
+
my $hostmarcfield;
if ( $marcflavour eq "MARC21" || $marcflavour eq "NORMARC" ) {
#other fields
my $ed = $hostrecord->subfield('250','a');
- my $barcode = $item->{'barcode'};
+ my $barcode = $item->barcode;
my $title = $hostrecord->subfield('245','a');
# record control number, 001 with 003 and prefix
require C4::Items;
while ( my ($itemnumber) = $sth->fetchrow_array ) {
next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
- my $i = $opachiddenitems ? C4::Items::GetItem($itemnumber) : undef;
- push @items, { itemnumber => $itemnumber, item => $i };
+ my $item;
+ if ( $opachiddenitems ) {
+ $item = Koha::Items->find($itemnumber);
+ $item = $item ? $item->unblessed : undef;
+ }
+ push @items, { itemnumber => $itemnumber, item => $item };
}
my @items2pass = map { $_->{item} } @items;
my @hiddenitems =
$sth->execute(
$frameworkcode, $biblio->{'author'}, $biblio->{'title'}, $biblio->{'unititle'}, $biblio->{'notes'},
- $biblio->{'serial'}, $biblio->{'seriestitle'}, $biblio->{'copyrightdate'}, $biblio->{'abstract'}, $biblio->{'biblionumber'}
+ $biblio->{'serial'}, $biblio->{'seriestitle'}, $biblio->{'copyrightdate'} ? int($biblio->{'copyrightdate'}) : undef, $biblio->{'abstract'}, $biblio->{'biblionumber'}
) if $biblio->{'biblionumber'};
if ( $dbh->errstr || !$biblio->{'biblionumber'} ) {
$schema->txn_do(
sub {
$dbh->do( q|
- INSERT INTO deletedbiblio_metadata (biblionumber, format, marcflavour, metadata)
- SELECT biblionumber, format, marcflavour, metadata FROM biblio_metadata WHERE biblionumber=?
+ INSERT INTO deletedbiblio_metadata (biblionumber, format, `schema`, metadata)
+ SELECT biblionumber, format, `schema`, metadata FROM biblio_metadata WHERE biblionumber=?
|, undef, $biblionumber );
$dbh->do( q|DELETE FROM biblio_metadata WHERE biblionumber=?|,
undef, $biblionumber );
my $metadata = {
biblionumber => $biblionumber,
format => 'marcxml',
- marcflavour => C4::Context->preference('marcflavour'),
+ schema => C4::Context->preference('marcflavour'),
};
$record->as_usmarc; # Bug 20126/10455 This triggers field length calculation
- # FIXME To replace with ->find_or_create?
- if ( my $m_rs = Koha::Biblio::Metadatas->find($metadata) ) {
- $m_rs->metadata( $record->as_xml_record($encoding) );
- $m_rs->store;
- } else {
- my $m_rs = Koha::Biblio::Metadata->new($metadata);
- $m_rs->metadata( $record->as_xml_record($encoding) );
- $m_rs->store;
+ my $m_rs = Koha::Biblio::Metadatas->find($metadata) //
+ Koha::Biblio::Metadata->new($metadata);
+
+ my $userenv = C4::Context->userenv;
+ if ($userenv) {
+ my $borrowernumber = $userenv->{number};
+ my $borrowername = join ' ', @$userenv{qw(firstname surname)};
+ unless ($m_rs->in_storage) {
+ Koha::Util::MARC::set_marc_field($record, C4::Context->preference('MarcFieldForCreatorId'), $borrowernumber);
+ Koha::Util::MARC::set_marc_field($record, C4::Context->preference('MarcFieldForCreatorName'), $borrowername);
+ }
+ Koha::Util::MARC::set_marc_field($record, C4::Context->preference('MarcFieldForModifierId'), $borrowernumber);
+ Koha::Util::MARC::set_marc_field($record, C4::Context->preference('MarcFieldForModifierName'), $borrowername);
}
+
+ $m_rs->metadata( $record->as_xml_record($encoding) );
+ $m_rs->store;
+
ModZebra( $biblionumber, "specialUpdate", "biblioserver", $record );
return $biblionumber;
}