Bugzilla – Attachment 135665 Details for
Bug 29697
Replace GetMarcBiblio occurrences with $biblio->metadata->record
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 29697: Use flag embed_items
Bug-29697-Use-flag-embeditems.patch (text/plain), 79.49 KB, created by
Marcel de Rooy
on 2022-06-03 08:51:27 UTC
(
hide
)
Description:
Bug 29697: Use flag embed_items
Filename:
MIME Type:
Creator:
Marcel de Rooy
Created:
2022-06-03 08:51:27 UTC
Size:
79.49 KB
patch
obsolete
>From 84b1ebdf320b81809bcbf43f3f6da1bed81096a4 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Fri, 21 Jan 2022 14:41:41 +0100 >Subject: [PATCH] Bug 29697: Use flag embed_items >Content-Type: text/plain; charset=utf-8 > >Includes: > Bug 29697: (follow-up) Use flag embed_items > >Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >--- > C4/Biblio.pm | 164 +----------------- > C4/ILSDI/Services.pm | 8 +- > C4/OAI/Sets.pm | 12 +- > C4/Record.pm | 14 +- > Koha/Biblio/Metadata.pm | 105 ++++++++++- > Koha/BiblioUtils.pm | 18 +- > Koha/BiblioUtils/Iterator.pm | 12 +- > Koha/OAI/Server/Repository.pm | 11 +- > Koha/SearchEngine/Elasticsearch/Indexer.pm | 4 +- > basket/downloadcart.pl | 11 +- > basket/sendbasket.pl | 6 +- > catalogue/ISBDdetail.pl | 24 ++- > catalogue/MARCdetail.pl | 7 +- > catalogue/detail.pl | 4 +- > catalogue/export.pl | 7 +- > misc/batchRebuildItemsTables.pl | 9 +- > misc/cronjobs/build_browser_and_cloud.pl | 5 +- > misc/migration_tools/build_oai_sets.pl | 12 +- > misc/migration_tools/rebuild_zebra.pl | 5 +- > opac/opac-MARCdetail.pl | 23 +-- > opac/opac-downloadcart.pl | 27 ++- > opac/opac-downloadshelf.pl | 25 ++- > opac/opac-export.pl | 27 +-- > opac/opac-sendbasket.pl | 15 +- > opac/opac-sendshelf.pl | 15 +- > opac/opac-tags.pl | 15 +- > opac/opac-user.pl | 12 +- > serials/subscription-add.pl | 7 +- > t/Biblio.t | 17 +- > t/db_dependent/Biblio.t | 17 +- > t/db_dependent/Biblio/MarcOverlayRules.t | 8 +- > t/db_dependent/Biblio/ModBiblioMarc.t | 5 +- > t/db_dependent/Items.t | 125 +------------ > t/db_dependent/Koha/Biblio/Metadata.t | 111 +++++++++++- > .../Koha/Filter/EmbedItemsAvailability.t | 9 +- > .../Koha/SearchEngine/Elasticsearch/Indexer.t | 3 +- > t/db_dependent/OAI/AndSets.t | 10 +- > t/db_dependent/OAI/Server.t | 23 +-- > t/db_dependent/Record/marcrecord2csv.t | 4 +- > t/db_dependent/Reserves.t | 6 +- > tools/showdiffmarc.pl | 6 +- > virtualshelves/downloadshelf.pl | 7 +- > virtualshelves/sendshelf.pl | 7 +- > 43 files changed, 431 insertions(+), 531 deletions(-) > >diff --git a/C4/Biblio.pm b/C4/Biblio.pm >index fbf61ceb46..9647071f7c 100644 >--- a/C4/Biblio.pm >+++ b/C4/Biblio.pm >@@ -29,7 +29,6 @@ BEGIN { > @EXPORT_OK = qw( > AddBiblio > GetBiblioData >- GetMarcBiblio > GetISBDView > GetMarcControlnumber > GetMarcISBN >@@ -1189,91 +1188,6 @@ sub GetMarcSubfieldStructureFromKohaField { > return wantarray ? @{$mss->{$kohafield}} : $mss->{$kohafield}->[0]; > } > >-=head2 GetMarcBiblio >- >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => $embeditems, >- opac => $opac, >- borcat => $patron_category }); >- >-Returns MARC::Record representing a biblio record, or C<undef> if the >-biblionumber doesn't exist. >- >-Both embed_items and opac are optional. >-If embed_items is passed and is 1, items are embedded. >-If opac is passed and is 1, the record is filtered as needed. >- >-=over 4 >- >-=item C<$biblionumber> >- >-the biblionumber >- >-=item C<$embeditems> >- >-set to true to include item information. >- >-=item C<$opac> >- >-set to true to make the result suited for OPAC view. This causes things like >-OpacHiddenItems to be applied. >- >-=item C<$borcat> >- >-If the OpacHiddenItemsExceptions system preference is set, this patron category >-can be used to make visible OPAC items which would be normally hidden. >-It only makes sense in combination both embed_items and opac values true. >- >-=back >- >-=cut >- >-sub GetMarcBiblio { >- my ($params) = @_; >- >- if (not defined $params) { >- carp 'GetMarcBiblio called without parameters'; >- return; >- } >- >- my $biblionumber = $params->{biblionumber}; >- my $embeditems = $params->{embed_items} || 0; >- my $opac = $params->{opac} || 0; >- my $borcat = $params->{borcat} // q{}; >- >- if (not defined $biblionumber) { >- carp 'GetMarcBiblio called with undefined biblionumber'; >- return; >- } >- >- my $marcxml = GetXmlBiblio( $biblionumber ); >- $marcxml = StripNonXmlChars( $marcxml ); >- MARC::File::XML->default_record_format( C4::Context->preference('marcflavour') ); >- my $record = MARC::Record->new(); >- >- if ($marcxml) { >- $record = eval { >- MARC::Record::new_from_xml( $marcxml, "UTF-8", >- C4::Context->preference('marcflavour') ); >- }; >- if ($@) { warn " problem with :$biblionumber : $@ \n$marcxml"; } >- return unless $record; >- >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblionumber, >- opac => $opac, >- borcat => $borcat }) >- if ($embeditems); >- >- return $record; >- } >- else { >- return; >- } >-} >- > =head2 GetXmlBiblio > > my $marcxml = GetXmlBiblio($biblionumber); >@@ -2485,82 +2399,6 @@ sub ModZebra { > } > } > >-=head2 EmbedItemsInMarcBiblio >- >- EmbedItemsInMarcBiblio({ >- marc_record => $marc, >- biblionumber => $biblionumber, >- item_numbers => $itemnumbers, >- opac => $opac }); >- >-Given a MARC::Record object containing a bib record, >-modify it to include the items attached to it as 9XX >-per the bib's MARC framework. >-if $itemnumbers is defined, only specified itemnumbers are embedded. >- >-If $opac is true, then opac-relevant suppressions are included. >- >-If opac filtering will be done, borcat should be passed to properly >-override if necessary. >- >-=cut >- >-sub EmbedItemsInMarcBiblio { >- my ($params) = @_; >- my ($marc, $biblionumber, $itemnumbers, $opac, $borcat); >- $marc = $params->{marc_record}; >- if ( !$marc ) { >- carp 'EmbedItemsInMarcBiblio: No MARC record passed'; >- return; >- } >- $biblionumber = $params->{biblionumber}; >- $itemnumbers = $params->{item_numbers}; >- $opac = $params->{opac}; >- $borcat = $params->{borcat} // q{}; >- >- $itemnumbers = [] unless defined $itemnumbers; >- >- my $frameworkcode = GetFrameworkCode($biblionumber); >- _strip_item_fields($marc, $frameworkcode); >- >- # ... and embed the current items >- my $dbh = C4::Context->dbh; >- my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?"); >- $sth->execute($biblionumber); >- my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" ); >- >- my @item_fields; # Array holding the actual MARC data for items to be included. >- my @items; # Array holding items which are both in the list (sitenumbers) >- # and on this biblionumber >- >- # Flag indicating if there is potential hiding. >- my $opachiddenitems = $opac >- && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ ); >- >- while ( my ($itemnumber) = $sth->fetchrow_array ) { >- next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers; >- my $item; >- if ( $opachiddenitems ) { >- $item = Koha::Items->find($itemnumber); >- $item = $item ? $item->unblessed : undef; >- } >- push @items, { itemnumber => $itemnumber, item => $item }; >- } >- items => \@items2pass, >- borcat => $borcat }) >- : (); >- # Convert to a hash for quick searching >- my %hiddenitems = map { $_ => 1 } @hiddenitems; >- my @itemnumbers = Koha::Items->search( { itemnumber => $itemnumbers } ) >- ->filter_by_visible_in_opac({ patron => })->get_column('itemnumber'); >- foreach my $itemnumber ( map { $_->{itemnumber} } @items ) { >- next if $hiddenitems{$itemnumber}; >- my $item_marc = C4::Items::GetMarcItem( $biblionumber, $itemnumber ); >- push @item_fields, $item_marc->field($itemtag); >- } >- $marc->append_fields(@item_fields); >-} >- > =head1 INTERNAL FUNCTIONS > > =head2 _koha_marc_update_bib_ids >@@ -3108,7 +2946,7 @@ sub UpdateTotalIssues { > > my $biblio = Koha::Biblios->find($biblionumber); > unless ($biblio) { >- carp "UpdateTotalIssues could not get datas of biblio"; >+ carp "UpdateTotalIssues could not get biblio"; > return; > } > >diff --git a/C4/ILSDI/Services.pm b/C4/ILSDI/Services.pm >index 02fe8e12ed..73361cf5fd 100644 >--- a/C4/ILSDI/Services.pm >+++ b/C4/ILSDI/Services.pm >@@ -24,8 +24,7 @@ use C4::Members; > use C4::Items qw( get_hostitemnumbers_of ); > use C4::Circulation qw( CanBookBeRenewed barcodedecode CanBookBeIssued AddRenewal ); > use C4::Accounts; >-use C4::Biblio qw( GetMarcBiblio ); >-use C4::Reserves qw( CanBookBeReserved IsAvailableForItemLevelRequest CalculatePriority AddReserve CanItemBeReserved CanReserveBeCanceledFromOpac); >+use C4::Reserves qw( CanBookBeReserved IsAvailableForItemLevelRequest CalculatePriority AddReserve CanItemBeReserved ); > use C4::Context; > use C4::Auth; > use CGI qw ( -utf8 ); >@@ -218,10 +217,7 @@ sub GetRecords { > > my $biblioitem = $biblio->biblioitem->unblessed; > >- my $embed_items = 1; >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => $embed_items }); >+ my $record = $biblio->metadata->record({ embed_items => 1 }); > if ($record) { > $biblioitem->{marcxml} = $record->as_xml_record(); > } >diff --git a/C4/OAI/Sets.pm b/C4/OAI/Sets.pm >index ac9eb22dce..fc876769f4 100644 >--- a/C4/OAI/Sets.pm >+++ b/C4/OAI/Sets.pm >@@ -31,6 +31,7 @@ OAI Set description can be found L<here|http://www.openarchives.org/OAI/openarch > > use Modern::Perl; > use C4::Context; >+use Koha::Biblio::Metadata; > > use vars qw(@ISA @EXPORT); > >@@ -610,10 +611,13 @@ sub UpdateOAISetsBiblio { > return unless($biblionumber and $record); > > if (C4::Context->preference('OAI-PMH:AutoUpdateSetsEmbedItemData')) { >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblionumber >- }); >+ $record = Koha::Biblio::Metadata->record( >+ { >+ record => $record, >+ embed_items => 1, >+ biblionumber => $biblionumber, >+ } >+ ); > } > > my $sets_biblios; >diff --git a/C4/Record.pm b/C4/Record.pm >index 537a09d76f..3de35a27fc 100644 >--- a/C4/Record.pm >+++ b/C4/Record.pm >@@ -26,7 +26,7 @@ use MARC::Record; # marc2marcxml, marcxml2marc, changeEncoding > use MARC::File::XML; # marc2marcxml, marcxml2marc, changeEncoding > use Biblio::EndnoteStyle; > use Unicode::Normalize qw( NFC ); # _entity_encode >-use C4::Biblio qw( GetFrameworkCode GetMarcBiblio ); >+use C4::Biblio qw( GetFrameworkCode ); > use C4::Koha; #marc2csv > use C4::XSLT; > use YAML::XS; #marcrecords2csv >@@ -454,18 +454,16 @@ C<$itemnumbers> a list of itemnumbers to export > =cut > > sub marcrecord2csv { >- my ($biblio, $id, $header, $csv, $fieldprocessing, $itemnumbers) = @_; >+ my ($biblionumber, $id, $header, $csv, $fieldprocessing, $itemnumbers) = @_; > my $output; > > # Getting the record >- my $record = GetMarcBiblio({ biblionumber => $biblio }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ return unless $biblio; >+ my $record = $biblio->metadata->record({ embed_items => 1, itemnumbers => $itemnumbers }); > return unless $record; >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblio, >- item_numbers => $itemnumbers }); > # Getting the framework >- my $frameworkcode = GetFrameworkCode($biblio); >+ my $frameworkcode = $biblio->frameworkcode; > > # Getting information about the csv profile > my $profile = Koha::CsvProfiles->find($id); >diff --git a/Koha/Biblio/Metadata.pm b/Koha/Biblio/Metadata.pm >index f55b766a4b..ad451797e5 100644 >--- a/Koha/Biblio/Metadata.pm >+++ b/Koha/Biblio/Metadata.pm >@@ -17,9 +17,11 @@ package Koha::Biblio::Metadata; > > use Modern::Perl; > >-use MARC::Record; > use MARC::File::XML; >+use Scalar::Util qw( blessed ); > >+use C4::Biblio qw( GetMarcFromKohaField ); >+use C4::Items qw( GetMarcItem ); > use Koha::Database; > use Koha::Exceptions::Metadata; > >@@ -48,6 +50,35 @@ corresponds to this table: > | marcxml | MARC::Record | > ------------------------------- > >+ $record = $biblio->metadata->record({ >+ { >+ embed_items => 0|1 >+ itemnumbers => $itemnumbers, >+ opac => $opac >+ } >+ ); >+ >+ Koha::Biblio::Metadata::record( >+ { >+ record => $record, >+ embed_items => 1, >+ biblionumber => $biblionumber, >+ itemnumbers => $itemnumbers, >+ opac => $opac >+ } >+ ); >+ >+Given a MARC::Record object containing a bib record, >+modify it to include the items attached to it as 9XX >+per the bib's MARC framework. >+if $itemnumbers is defined, only specified itemnumbers are embedded. >+ >+If $opac is true, then opac-relevant suppressions are included. >+ >+If opac filtering will be done, patron should be passed to properly >+override if necessary. >+ >+ > =head4 Error handling > > =over >@@ -62,12 +93,21 @@ corresponds to this table: > > sub record { > >- my ($self) = @_; >+ my ($self, $params) = @_; > >- my $record; >+ my $record = $params->{record}; >+ my $embed_items = $params->{embed_items}; >+ my $format = blessed($self) ? $self->format : $params->{format}; >+ $format ||= 'marcxml'; > >- if ( $self->format eq 'marcxml' ) { >- $record = eval { MARC::Record::new_from_xml( $self->metadata, 'UTF-8', $self->schema ); }; >+ if ( !$record && !blessed($self) ) { >+ Koha::Exceptions::Metadata->throw( >+ 'Koha::Biblio::Metadata->record must be called on an instantiated object or like a class method with a record passed in parameter' >+ ); >+ } >+ >+ if ( $format eq 'marcxml' ) { >+ $record ||= eval { MARC::Record::new_from_xml( $self->metadata, 'UTF-8', $self->schema ); }; > my $marcxml_error = $@; > chomp $marcxml_error; > unless ($record) { >@@ -82,7 +122,11 @@ sub record { > } > else { > Koha::Exceptions::Metadata->throw( >- 'Koha::Biblio::Metadata->record called on unhandled format: ' . $self->format ); >+ 'Koha::Biblio::Metadata->record called on unhandled format: ' . $format ); >+ } >+ >+ if ( $embed_items ) { >+ $self->_embed_items({ %$params, format => $format, record => $record }); > } > > return $record; >@@ -90,6 +134,55 @@ sub record { > > =head2 Internal methods > >+=head3 _embed_items >+ >+=cut >+ >+sub _embed_items { >+ my ( $self, $params ) = @_; >+ >+ my $record = $params->{record}; >+ my $format = $params->{format}; >+ my $biblionumber = $params->{biblionumber} || $self->biblionumber; >+ my $itemnumbers = $params->{itemnumbers} // []; >+ my $patron = $params->{patron}; >+ my $opac = $params->{opac}; >+ >+ if ( $format eq 'marcxml' ) { >+ >+ # First remove the existing items from the MARC record >+ my ( $itemtag, $itemsubfield ) = C4::Biblio::GetMarcFromKohaField( "items.itemnumber" ); >+ foreach my $field ( $record->field($itemtag) ) { >+ $record->delete_field($field); >+ } >+ >+ my $biblio = Koha::Biblios->find($biblionumber); >+ >+ my $items = $biblio->items; >+ if ( @$itemnumbers ) { >+ $items = $items->search({ itemnumber => { -in => $itemnumbers } }); >+ } >+ if ( $opac ) { >+ $items = $items->filter_by_visible_in_opac({ patron => $patron }); >+ } >+ my @itemnumbers = $items->get_column('itemnumber'); >+ my @item_fields; >+ for my $itemnumber ( @itemnumbers ) { >+ my $item_marc = C4::Items::GetMarcItem( $biblionumber, $itemnumber ); >+ push @item_fields, $item_marc->field($itemtag); >+ } >+ $record->append_fields(@item_fields); >+ >+ } >+ else { >+ Koha::Exceptions::Metadata->throw( >+ 'Koha::Biblio::Metadata->embed_item called on unhandled format: ' . $format ); >+ } >+ >+ return $record; >+} >+ >+ > =head3 _type > > =cut >diff --git a/Koha/BiblioUtils.pm b/Koha/BiblioUtils.pm >index 8301210de4..ebae899dc6 100644 >--- a/Koha/BiblioUtils.pm >+++ b/Koha/BiblioUtils.pm >@@ -27,12 +27,9 @@ Koha::BiblioUtils - contains fundamental biblio-related functions > > This contains functions for normal operations on biblio records. > >-Note: really, C4::Biblio does the main functions, but the Koha namespace is >-the new thing that should be used. >- > =cut > >-use C4::Biblio; >+use Koha::Biblios; > use Koha::MetadataIterator; > use Koha::Database; > use Modern::Perl; >@@ -140,8 +137,7 @@ sub get_all_biblios_iterator { > > my $database = Koha::Database->new(); > my $schema = $database->schema(); >- my $rs = >- $schema->resultset('Biblio')->search( >+ my $rs = Koha::Biblios->search( > $search_terms, > $search_options ); > my $next_func = sub { >@@ -149,9 +145,7 @@ sub get_all_biblios_iterator { > while (1) { > my $row = $rs->next(); > return if !$row; >- my $marc = C4::Biblio::GetMarcBiblio({ >- biblionumber => $row->biblionumber, >- embed_items => 1 }); >+ my $marc = $row->metadata->record({ embed_items => 1 }); > my $next = eval { > $class->new($marc, $row->biblionumber); > }; >@@ -188,9 +182,9 @@ If set to true, item data is embedded in the record. Default is to not do this. > sub get_marc_biblio { > my ($class, $bibnum, %options) = @_; > >- return C4::Biblio::GetMarcBiblio({ >- biblionumber => $bibnum, >- embed_items => ($options{item_data} ? 1 : 0 ) }); >+ my $record = Koha::Biblios->find($bibnum) >+ ->metadata->record( { $options{item_data} ? ( embed_items => 1 ) : () } ); >+ return $record; > } > > 1; >diff --git a/Koha/BiblioUtils/Iterator.pm b/Koha/BiblioUtils/Iterator.pm >index c75a3733e5..e82f69fd73 100644 >--- a/Koha/BiblioUtils/Iterator.pm >+++ b/Koha/BiblioUtils/Iterator.pm >@@ -44,6 +44,7 @@ Returns biblionumber and marc in list context. > =cut > > use C4::Biblio; >+use Koha::Biblio::Metadata; > > use Carp qw( confess ); > use MARC::Record; >@@ -107,10 +108,13 @@ sub next { > confess "No biblionumber column returned in the request." > if ( !defined($bibnum) ); > >- # TODO this should really be in Koha::BiblioUtils or something similar. >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $marc, >- biblionumber => $bibnum }); >+ $marc = Koha::Biblio::Metadata->record( >+ { >+ record => $marc, >+ embed_items => 1, >+ biblionumber => $bibnum, >+ } >+ ); > } > > if (wantarray) { >diff --git a/Koha/OAI/Server/Repository.pm b/Koha/OAI/Server/Repository.pm >index d6e5c2ae59..f8e19b12c1 100644 >--- a/Koha/OAI/Server/Repository.pm >+++ b/Koha/OAI/Server/Repository.pm >@@ -35,9 +35,9 @@ use XML::SAX::Writer; > use YAML::XS; > use CGI qw/:standard -oldstyle_urls/; > use C4::Context; >-use C4::Biblio qw( GetMarcBiblio ); > use C4::XSLT qw( transformMARCXML4XSLT ); > use Koha::XSLT::Base; >+use Koha::Biblios; > > =head1 NAME > >@@ -176,13 +176,8 @@ sub get_biblio_marcxml { > $expanded_avs = $conf->{format}->{$format}->{expanded_avs}; > } > >- my $record = GetMarcBiblio( >- { >- biblionumber => $biblionumber, >- embed_items => $with_items, >- opac => 1 >- } >- ); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record({ embed_items => $with_items, opac => 1 }); > $record = transformMARCXML4XSLT( $biblionumber, $record ) > if $expanded_avs; > >diff --git a/Koha/SearchEngine/Elasticsearch/Indexer.pm b/Koha/SearchEngine/Elasticsearch/Indexer.pm >index ca0d19a442..3fa9d477c1 100644 >--- a/Koha/SearchEngine/Elasticsearch/Indexer.pm >+++ b/Koha/SearchEngine/Elasticsearch/Indexer.pm >@@ -28,8 +28,8 @@ use Koha::Exceptions::Elasticsearch; > use Koha::SearchEngine::Zebra::Indexer; > use Koha::BackgroundJob::UpdateElasticIndex; > use C4::AuthoritiesMarc qw//; >-use C4::Biblio; > use C4::Context; >+use Koha::Biblios; > > =head1 NAME > >@@ -338,7 +338,7 @@ sub index_records { > sub _get_record { > my ( $self, $record_id ) = @_; > return $self->index eq $Koha::SearchEngine::BIBLIOS_INDEX >- ? C4::Biblio::GetMarcBiblio({ biblionumber => $record_id, embed_items => 1 }) >+ ? Koha::Biblios->find($record_id)->metadata->record({ embed_items => 1 }) > : C4::AuthoritiesMarc::GetAuthority($record_id); > } > >diff --git a/basket/downloadcart.pl b/basket/downloadcart.pl >index f612099c6a..806ad4959f 100755 >--- a/basket/downloadcart.pl >+++ b/basket/downloadcart.pl >@@ -23,12 +23,12 @@ use CGI qw ( -utf8 ); > use Encode qw( encode ); > > use C4::Auth qw( get_template_and_user ); >-use C4::Biblio qw( GetMarcBiblio ); > use C4::Output qw( output_html_with_http_headers ); > use C4::Record; > use C4::Ris qw( marc2ris ); > > use Koha::CsvProfiles; >+use Koha::Biblios; > > use utf8; > my $query = CGI->new; >@@ -61,11 +61,10 @@ if ($bib_list && $format) { > # Other formats > } else { > >- foreach my $biblio (@bibs) { >+ foreach my $biblionumber (@bibs) { > >- my $record = GetMarcBiblio({ >- biblionumber => $biblio, >- embed_items => 1 }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record({ embed_items => 1 }); > next unless $record; > > if ($format eq 'iso2709') { >@@ -77,7 +76,7 @@ if ($bib_list && $format) { > $output .= marc2ris($record); > } > elsif ($format eq 'bibtex') { >- $output .= marc2bibtex($record, $biblio); >+ $output .= marc2bibtex($record, $biblionumber); > } > } > } >diff --git a/basket/sendbasket.pl b/basket/sendbasket.pl >index 3c53605069..c5bf9822fb 100755 >--- a/basket/sendbasket.pl >+++ b/basket/sendbasket.pl >@@ -23,13 +23,13 @@ use Carp qw( carp ); > use Try::Tiny qw( catch try ); > > use C4::Biblio qw( >- GetMarcBiblio > GetMarcSubjects > ); > use C4::Items qw( GetItemsInfo ); > use C4::Auth qw( get_template_and_user ); > use C4::Output qw( output_and_exit output_html_with_http_headers ); > use C4::Templates; >+use Koha::Biblios; > use Koha::Email; > use Koha::Token; > >@@ -72,9 +72,7 @@ if ( $email_add ) { > > my $biblio = Koha::Biblios->find( $biblionumber ) or next; > my $dat = $biblio->unblessed; >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1 }); >+ my $record = $biblio->metadata->record({ embed_items => 1 }); > my $marcauthorsarray = $biblio->get_marc_authors; > my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour ); > >diff --git a/catalogue/ISBDdetail.pl b/catalogue/ISBDdetail.pl >index d991d3e799..69da004361 100755 >--- a/catalogue/ISBDdetail.pl >+++ b/catalogue/ISBDdetail.pl >@@ -40,7 +40,7 @@ use C4::Auth qw( get_template_and_user ); > use C4::Context; > use C4::Output qw( output_html_with_http_headers ); > use CGI qw ( -utf8 ); >-use C4::Biblio qw( GetBiblioData GetFrameworkCode GetISBDView GetMarcBiblio ); >+use C4::Biblio qw( GetBiblioData GetISBDView ); > use C4::Serials qw( CountSubscriptionFromBiblionumber GetSubscription GetSubscriptionsFromBiblionumber ); > use C4::Search qw( z3950_search_args enabled_staff_search_views ); > >@@ -66,18 +66,17 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > } > ); > >-if ( not defined $biblionumber ) { >- # biblionumber invalid -> report and exit >- $template->param( unknownbiblionumber => 1, >- biblionumber => $biblionumber >- ); >- output_html_with_http_headers $query, $cookie, $template->output; >- exit; >+my $biblio = Koha::Biblios->find( $biblionumber ); >+unless ( $biblionumber && $biblio ) { >+ # biblionumber invalid -> report and exit >+ $template->param( unknownbiblionumber => 1, >+ biblionumber => $biblionumber >+ ); >+ output_html_with_http_headers $query, $cookie, $template->output; >+ exit; > } > >-my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1 }); >+my $record = $biblio->metadata->record({ embed_items => 1 }); > > if ( not defined $record ) { > # biblionumber invalid -> report and exit >@@ -88,8 +87,7 @@ if ( not defined $record ) { > exit; > } > >-my $biblio = Koha::Biblios->find( $biblionumber ); >-my $framework = GetFrameworkCode( $biblionumber ); >+my $framework = $biblio->frameworkcode; > my $record_processor = Koha::RecordProcessor->new({ > filters => 'ViewPolicy', > options => { >diff --git a/catalogue/MARCdetail.pl b/catalogue/MARCdetail.pl >index 4ff6a03c54..2e30b04d84 100755 >--- a/catalogue/MARCdetail.pl >+++ b/catalogue/MARCdetail.pl >@@ -55,7 +55,6 @@ use C4::Biblio qw( > GetAuthorisedValueDesc > GetBiblioData > GetFrameworkCode >- GetMarcBiblio > GetMarcFromKohaField > GetMarcStructure > ); >@@ -90,9 +89,8 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > } > ); > >-my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1 }); >+my $biblio_object = Koha::Biblios->find( $biblionumber ); # FIXME Should replace $biblio >+my $record = $biblio_object->metadata->record({ embed_items => 1 }); > > if ( not defined $record ) { > # biblionumber invalid -> report and exit >@@ -103,7 +101,6 @@ if ( not defined $record ) { > exit; > } > >-my $biblio_object = Koha::Biblios->find( $biblionumber ); # FIXME Should replace $biblio > my $tagslib = &GetMarcStructure(1,$frameworkcode); > my $biblio = GetBiblioData($biblionumber); > >diff --git a/catalogue/detail.pl b/catalogue/detail.pl >index 120fc28a88..d4801f116c 100755 >--- a/catalogue/detail.pl >+++ b/catalogue/detail.pl >@@ -32,7 +32,7 @@ use C4::Koha qw( > ); > use C4::Serials qw( CountSubscriptionFromBiblionumber SearchSubscriptions GetLatestSerials ); > use C4::Output qw( output_html_with_http_headers ); >-use C4::Biblio qw( GetBiblioData GetFrameworkCode GetMarcBiblio ); >+use C4::Biblio qw( GetBiblioData GetFrameworkCode ); > use C4::Items qw( GetAnalyticsCount GetHostItemsInfo GetItemsInfo ); > use C4::Circulation qw( GetTransfers ); > use C4::Reserves; >@@ -85,8 +85,8 @@ if ( C4::Context->config('enable_plugins') ) { > my $biblionumber = $query->param('biblionumber'); > $biblionumber = HTML::Entities::encode($biblionumber); > # FIXME Special case here >-my $record = GetMarcBiblio({ biblionumber => $biblionumber }); > my $biblio = Koha::Biblios->find( $biblionumber ); >+my $record = $biblio->metadata->record; > $template->param( 'biblio', $biblio ); > > if ( not defined $record ) { >diff --git a/catalogue/export.pl b/catalogue/export.pl >index 3785116581..ff02cea67f 100755 >--- a/catalogue/export.pl >+++ b/catalogue/export.pl >@@ -4,7 +4,7 @@ use Modern::Perl; > use C4::Record; > use C4::Auth qw( get_template_and_user ); > use C4::Output; >-use C4::Biblio qw( GetMarcBiblio GetMarcControlnumber ); >+use C4::Biblio qw( GetMarcControlnumber ); > use CGI qw ( -utf8 ); > use C4::Ris qw( marc2ris ); > >@@ -27,9 +27,8 @@ if ($op eq "export") { > my $file_id = $biblionumber; > my $file_pre = "bib-"; > >- my $marc = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1 }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $marc = $biblio->metadata->record({ embed_items => 1 }); > > if( C4::Context->preference('DefaultSaveRecordFileID') eq 'controlnumber' ){ > my $marcflavour = C4::Context->preference('marcflavour'); #FIXME This option is required but does not change control num behaviour >diff --git a/misc/batchRebuildItemsTables.pl b/misc/batchRebuildItemsTables.pl >index 13f0c4117e..220876a8b8 100755 >--- a/misc/batchRebuildItemsTables.pl >+++ b/misc/batchRebuildItemsTables.pl >@@ -10,8 +10,9 @@ use Time::HiRes qw( gettimeofday ); > > use Koha::Script; > use C4::Context; >-use C4::Biblio qw( GetMarcBiblio GetMarcFromKohaField ); >+use C4::Biblio qw( GetMarcFromKohaField ); > use C4::Items qw( ModItemFromMarc ); >+use Koha::Biblios; > > =head1 NAME > >@@ -72,9 +73,9 @@ $sth->execute(); > while ( my ( $biblionumber, $biblioitemnumber, $frameworkcode ) = $sth->fetchrow ) { > $count++; > warn $count unless $count % 1000; >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1 }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record({ embed_items => 1 }); >+ > unless ($record) { push @errors, "bad record biblionumber $biblionumber"; next; } > > unless ($test_parameter) { >diff --git a/misc/cronjobs/build_browser_and_cloud.pl b/misc/cronjobs/build_browser_and_cloud.pl >index 8cd733a785..c8b12611fb 100755 >--- a/misc/cronjobs/build_browser_and_cloud.pl >+++ b/misc/cronjobs/build_browser_and_cloud.pl >@@ -7,13 +7,13 @@ use strict; > use Koha::Script -cron; > use C4::Koha; > use C4::Context; >-use C4::Biblio qw( GetMarcBiblio ); > use Date::Calc; > use Time::HiRes qw(gettimeofday); > use ZOOM; > use MARC::File::USMARC; > use Getopt::Long; > use C4::Log; >+use Koha::Biblios; > > my ( $input_marc_file, $number) = ('',0); > my ($version, $confirm,$field,$batch,$max_digits,$cloud_tag); >@@ -85,8 +85,9 @@ while ((my ($biblionumber)= $sth->fetchrow)) { > print "." unless $batch; > #now, parse the record, extract the item fields, and store them in somewhere else. > my $Koharecord; >+ my $biblio = Koha::Biblios->find($biblionumber); > eval{ >- $Koharecord = GetMarcBiblio({ biblionumber => $biblionumber }); >+ $Koharecord = $biblio->metadata->record > }; > if($@){ > warn 'pb when getting biblio '.$i.' : '.$@; >diff --git a/misc/migration_tools/build_oai_sets.pl b/misc/migration_tools/build_oai_sets.pl >index 00f92c8fe7..58a7498f81 100755 >--- a/misc/migration_tools/build_oai_sets.pl >+++ b/misc/migration_tools/build_oai_sets.pl >@@ -45,7 +45,6 @@ use Getopt::Std qw( getopts ); > use Koha::Script; > use C4::Context; > use C4::Charset qw( StripNonXmlChars ); >-use C4::Biblio; > use C4::OAI::Sets qw( > AddOAISetsBiblios > CalcOAISetsBiblio >@@ -55,6 +54,7 @@ use C4::OAI::Sets qw( > GetOAISetsMappings > ModOAISetsBiblios > ); >+use Koha::Biblio::Metadata; > > my %opts; > $Getopt::Std::STANDARD_HELP_VERSION = 1; >@@ -141,9 +141,13 @@ foreach my $res (@$results) { > next; > } > if($embed_items) { >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblionumber }); >+ $record = Koha::Biblio::Metadata->record( >+ { >+ marc_record => $record, >+ embed_items => 1, >+ biblionumber => $biblionumber, >+ } >+ ); > } > > my @biblio_sets = CalcOAISetsBiblio($record, $mappings); >diff --git a/misc/migration_tools/rebuild_zebra.pl b/misc/migration_tools/rebuild_zebra.pl >index 718c30533d..fb16b8b360 100755 >--- a/misc/migration_tools/rebuild_zebra.pl >+++ b/misc/migration_tools/rebuild_zebra.pl >@@ -678,7 +678,10 @@ sub get_raw_marc_record { > > my $marc; > if ($record_type eq 'biblio') { >- eval { $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $record_number, embed_items => 1 }); }; >+ eval { >+ my $biblio = Koha::Biblios->find($record_number); >+ $marc = $biblio->metadata->record({ embed_items => 1 }); >+ }; > if ($@ || !$marc) { > # here we do warn since catching an exception > # means that the bib was found but failed >diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl >index 0133784d39..4a77c37ee9 100755 >--- a/opac/opac-MARCdetail.pl >+++ b/opac/opac-MARCdetail.pl >@@ -52,7 +52,6 @@ use CGI qw ( -utf8 ); > use C4::Biblio qw( > CountItemsIssued > GetAuthorisedValueDesc >- GetMarcBiblio > GetMarcControlnumber > GetMarcFromKohaField > GetMarcISSN >@@ -90,24 +89,20 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > } > ); > >-my $patron = Koha::Patrons->find( $loggedinuser ); >-my $borcat = q{}; >-if ( C4::Context->preference('OpacHiddenItemsExceptions') ) { >- # we need to fetch the borrower info here, so we can pass the category >- $borcat = $patron ? $patron->categorycode : $borcat; >-} >- >-my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1, >- opac => 1, >- borcat => $borcat }); >+my $patron = Koha::Patrons->find($loggedinuser); >+my $biblio = Koha::Biblios->find($biblionumber); >+my $record = $biblio->metadata->record( >+ { >+ embed_items => 1, >+ opac => 1, >+ patron => $patron, >+ } >+); > if ( ! $record ) { > print $query->redirect("/cgi-bin/koha/errors/404.pl"); > exit; > } > >-my $biblio = Koha::Biblios->find( $biblionumber ); > unless ( $patron and $patron->category->override_hidden_items ) { > # only skip this check if there's a logged in user > # and its category overrides OpacHiddenItems >diff --git a/opac/opac-downloadcart.pl b/opac/opac-downloadcart.pl >index f3a1769c0b..1f4b20d1fb 100755 >--- a/opac/opac-downloadcart.pl >+++ b/opac/opac-downloadcart.pl >@@ -23,10 +23,11 @@ use CGI qw ( -utf8 ); > use Encode qw( encode ); > > use C4::Auth qw( get_template_and_user ); >-use C4::Biblio qw( GetFrameworkCode GetISBDView GetMarcBiblio ); >+use C4::Biblio qw( GetFrameworkCode GetISBDView ); > use C4::Output qw( output_html_with_http_headers ); > use C4::Record; > use C4::Ris qw( marc2ris ); >+use Koha::Biblios; > use Koha::CsvProfiles; > use Koha::RecordProcessor; > >@@ -48,12 +49,7 @@ my $dbh = C4::Context->dbh; > > if ($bib_list && $format) { > >- my $borcat = q{}; >- if ( C4::Context->preference('OpacHiddenItemsExceptions') ) { >- # we need to fetch the borrower info here, so we can pass the category >- my $borrower = Koha::Patrons->find( { borrowernumber => $borrowernumber } ); >- $borcat = $borrower ? $borrower->categorycode : $borcat; >- } >+ my $patron = Koha::Patrons->find($borrowernumber); > > my @bibs = split( /\//, $bib_list ); > >@@ -78,13 +74,16 @@ if ($bib_list && $format) { > my $record_processor = Koha::RecordProcessor->new({ > filters => 'ViewPolicy' > }); >- foreach my $biblio (@bibs) { >- >- my $record = GetMarcBiblio({ >- biblionumber => $biblio, >- embed_items => 1, >- opac => 1, >- borcat => $borcat }); >+ foreach my $biblionumber (@bibs) { >+ >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record( >+ { >+ embed_items => 1, >+ opac => 1, >+ patron => $patron, >+ } >+ ); > my $framework = &GetFrameworkCode( $biblio ); > $record_processor->options({ > interface => 'opac', >diff --git a/opac/opac-downloadshelf.pl b/opac/opac-downloadshelf.pl >index 5647f873b2..2414d1566a 100755 >--- a/opac/opac-downloadshelf.pl >+++ b/opac/opac-downloadshelf.pl >@@ -22,10 +22,11 @@ use Modern::Perl; > use CGI qw ( -utf8 ); > > use C4::Auth qw( get_template_and_user ); >-use C4::Biblio qw( GetFrameworkCode GetISBDView GetMarcBiblio ); >+use C4::Biblio qw( GetFrameworkCode GetISBDView ); > use C4::Output qw( output_html_with_http_headers ); > use C4::Record; > use C4::Ris qw( marc2ris ); >+use Koha::Biblios; > use Koha::CsvProfiles; > use Koha::RecordProcessor; > use Koha::Virtualshelves; >@@ -48,12 +49,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( > } > ); > >-my $borcat = q{}; >-if ( C4::Context->preference('OpacHiddenItemsExceptions') ) { >- # we need to fetch the borrower info here, so we can pass the category >- my $borrower = Koha::Patrons->find( { borrowernumber => $borrowernumber } ); >- $borcat = $borrower ? $borrower->categorycode : $borcat; >-} >+my $patron = Koha::Patrons->find( $borrowernumber ); > > my $shelfnumber = $query->param('shelfnumber'); > my $format = $query->param('format'); >@@ -93,12 +89,15 @@ if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) { > while ( my $content = $contents->next ) { > my $biblionumber = $content->biblionumber; > >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1, >- opac => 1, >- borcat => $borcat }); >- my $framework = &GetFrameworkCode( $biblionumber ); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record->( >+ { >+ embed_items => 1, >+ opac => 1, >+ patron => $patron, >+ } >+ ); >+ my $framework = $biblio->frameworkcode; > $record_processor->options({ > interface => 'opac', > frameworkcode => $framework >diff --git a/opac/opac-export.pl b/opac/opac-export.pl >index d816ded995..1b0fdad59a 100755 >--- a/opac/opac-export.pl >+++ b/opac/opac-export.pl >@@ -25,12 +25,12 @@ use C4::Output; > use C4::Biblio qw( > GetFrameworkCode > GetISBDView >- GetMarcBiblio > GetMarcControlnumber > ); > use CGI qw ( -utf8 ); > use C4::Auth; > use C4::Ris qw( marc2ris ); >+use Koha::Biblios; > use Koha::RecordProcessor; > > my $query = CGI->new; >@@ -43,23 +43,25 @@ my $error = q{}; > # Determine logged in user's patron category. > # Blank if not logged in. > my $userenv = C4::Context->userenv; >-my $borcat = q{}; >+my $patron; > if ($userenv) { > my $borrowernumber = $userenv->{'number'}; > if ($borrowernumber) { >- my $borrower = Koha::Patrons->find( { borrowernumber => $borrowernumber } ); >- $borcat = $borrower ? $borrower->categorycode : $borcat; >+ $patron = Koha::Patrons->find( $borrowernumber ); > } > } > > my $include_items = ($format =~ /bibtex/) ? 0 : 1; >-my $marc = $biblionumber >- ? GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => $include_items, >- opac => 1, >- borcat => $borcat }) >- : undef; >+my $biblio = Koha::Biblios->find($biblionumber); >+my $marc = $biblio >+ ? $biblio->metadata->record( >+ { >+ embed_items => 1, >+ opac => 1, >+ patron => $patron, >+ } >+ ) >+ : undef; > > if(!$marc) { > print $query->redirect("/cgi-bin/koha/errors/404.pl"); >@@ -77,8 +79,7 @@ if( C4::Context->preference('DefaultSaveRecordFileID') eq 'controlnumber' ){ > } > } > >-# ASSERT: There is a biblionumber, because GetMarcBiblio returned something. >-my $framework = GetFrameworkCode( $biblionumber ); >+my $framework = $biblio->frameworkcode; > my $record_processor = Koha::RecordProcessor->new({ > filters => 'ViewPolicy', > options => { >diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl >index 75ddd3dc2c..fcc49e0f7e 100755 >--- a/opac/opac-sendbasket.pl >+++ b/opac/opac-sendbasket.pl >@@ -25,13 +25,13 @@ use Carp qw( carp ); > use Try::Tiny qw( catch try ); > > use C4::Biblio qw( >- GetMarcBiblio > GetMarcSubjects > ); > use C4::Items qw( GetItemsInfo ); > use C4::Auth qw( get_template_and_user ); > use C4::Output qw( output_html_with_http_headers ); > use C4::Templates; >+use Koha::Biblios; > use Koha::Email; > use Koha::Patrons; > use Koha::Token; >@@ -57,7 +57,6 @@ if ( $email_add ) { > token => scalar $query->param('csrf_token'), > }); > my $patron = Koha::Patrons->find( $borrowernumber ); >- my $borcat = $patron ? $patron->categorycode : q{}; > my $user_email = $patron->first_valid_email_address > || C4::Context->preference('KohaAdminEmailAddress'); > >@@ -79,11 +78,13 @@ if ( $email_add ) { > > my $biblio = Koha::Biblios->find( $biblionumber ) or next; > my $dat = $biblio->unblessed; >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1, >- opac => 1, >- borcat => $borcat }); >+ my $record = $biblio->metadata->record( >+ { >+ embed_items => 1, >+ opac => 1, >+ patron => $patron, >+ } >+ ); > my $marcauthorsarray = $biblio->get_marc_authors; > my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour ); > >diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl >index 4b33d8ef97..915428111a 100755 >--- a/opac/opac-sendshelf.pl >+++ b/opac/opac-sendshelf.pl >@@ -27,12 +27,12 @@ use Try::Tiny qw( catch try ); > use C4::Auth qw( get_template_and_user ); > use C4::Biblio qw( > GetFrameworkCode >- GetMarcBiblio > GetMarcISBN > GetMarcSubjects > ); > use C4::Items qw( GetItemsInfo ); > use C4::Output qw( output_html_with_http_headers ); >+use Koha::Biblios; > use Koha::Email; > use Koha::Patrons; > use Koha::Virtualshelves; >@@ -73,7 +73,6 @@ if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) { > ); > > my $patron = Koha::Patrons->find( $borrowernumber ); >- my $borcat = $patron ? $patron->categorycode : q{}; > > my $shelf = Koha::Virtualshelves->find( $shelfid ); > my $contents = $shelf->get_contents; >@@ -85,11 +84,13 @@ if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) { > my $biblionumber = $content->biblionumber; > my $biblio = Koha::Biblios->find( $biblionumber ) or next; > my $dat = $biblio->unblessed; >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1, >- opac => 1, >- borcat => $borcat }); >+ my $record = $biblio->metadata->record( >+ { >+ embed_items => 1, >+ opac => 1, >+ patron => $patron, >+ } >+ ); > next unless $record; > my $fw = GetFrameworkCode($biblionumber); > >diff --git a/opac/opac-tags.pl b/opac/opac-tags.pl >index 4e16f8c72a..9579687f42 100755 >--- a/opac/opac-tags.pl >+++ b/opac/opac-tags.pl >@@ -40,7 +40,6 @@ use C4::Auth qw( check_cookie_auth get_template_and_user ); > use C4::Context; > use C4::Output qw( output_with_http_headers is_ajax output_html_with_http_headers ); > use C4::Scrubber; >-use C4::Biblio qw( GetMarcBiblio ); > use C4::Items qw( GetItemsInfo ); > use C4::Tags qw( > add_tag >@@ -50,6 +49,7 @@ use C4::Tags qw( > stratify_tags > ); > use C4::XSLT qw( XSLTParse4Display ); >+use Koha::Biblios; > > > use Koha::Logger; >@@ -230,7 +230,6 @@ my $my_tags = []; > > if ($loggedinuser) { > my $patron = Koha::Patrons->find( { borrowernumber => $loggedinuser } ); >- $borcat = $patron ? $patron->categorycode : $borcat; > my $rules = C4::Context->yaml_preference('OpacHiddenItems'); > my $should_hide = ( $rules ) ? 1 : 0; > $my_tags = get_tag_rows({borrowernumber=>$loggedinuser}); >@@ -252,11 +251,13 @@ if ($loggedinuser) { > foreach my $tag (@$my_tags) { > $tag->{visible} = 0; > my $biblio = Koha::Biblios->find( $tag->{biblionumber} ); >- my $record = &GetMarcBiblio({ >- biblionumber => $tag->{biblionumber}, >- embed_items => 1, >- opac => 1, >- borcat => $borcat }); >+ my $record = $biblio->metadata->record( >+ { >+ embed_items => 1, >+ opac => 1, >+ patron => $patron, >+ } >+ ); > next unless $record; > my @hidden_items; > if ($should_hide) { >diff --git a/opac/opac-user.pl b/opac/opac-user.pl >index 86960e0c84..147e7d9109 100755 >--- a/opac/opac-user.pl >+++ b/opac/opac-user.pl >@@ -32,7 +32,6 @@ use C4::External::BakerTaylor qw( image_url link_url ); > use C4::Reserves qw( GetReserveStatus ); > use C4::Members; > use C4::Output qw( output_html_with_http_headers ); >-use C4::Biblio qw( GetMarcBiblio ); > use Koha::Account::Lines; > use Koha::Biblios; > use Koha::Libraries; >@@ -98,8 +97,6 @@ if( $query->param('update_arc') && C4::Context->preference("AllowPatronToControl > } > > my $borr = $patron->unblessed; >-# unblessed is a hash vs. object/undef. Hence the use of curly braces here. >-my $borcat = $borr ? $borr->{categorycode} : q{}; > > my ( $today_year, $today_month, $today_day) = Today(); > my ($warning_year, $warning_month, $warning_day) = split /-/, $borr->{'dateexpiry'}; >@@ -279,17 +276,14 @@ if ( $pending_checkouts->count ) { # Useless test > $issue->{my_rating} = $borrowernumber ? $ratings->search({ borrowernumber => $borrowernumber })->next : undef; > } > >- $issue->{biblio_object} = Koha::Biblios->find($issue->{biblionumber}); >+ my $biblio_object = Koha::Biblios->find($issue->{biblionumber}); >+ $issue->{biblio_object} = $biblio_object; > push @issuedat, $issue; > $count++; > > my $isbn = GetNormalizedISBN($issue->{'isbn'}); > $issue->{normalized_isbn} = $isbn; >- my $marcrecord = GetMarcBiblio({ >- biblionumber => $issue->{'biblionumber'}, >- embed_items => 1, >- opac => 1, >- borcat => $borcat }); >+ my $marcrecord = $biblio_object->metadata->record({ embed_items => 1, opac => 1, patron => $patron,}); > $issue->{normalized_upc} = GetNormalizedUPC( $marcrecord, C4::Context->preference('marcflavour') ); > > # My Summary HTML >diff --git a/serials/subscription-add.pl b/serials/subscription-add.pl >index c604e4042b..c08142b897 100755 >--- a/serials/subscription-add.pl >+++ b/serials/subscription-add.pl >@@ -20,7 +20,6 @@ use Modern::Perl; > use CGI qw ( -utf8 ); > use Date::Calc qw( Add_Delta_Days Add_Delta_YM ); > use C4::Koha qw( GetAuthorisedValues ); >-use C4::Biblio qw( GetMarcBiblio ); > use C4::Auth qw( get_template_and_user ); > use C4::Output qw( output_and_exit output_html_with_http_headers ); > use C4::Context; >@@ -365,7 +364,8 @@ sub redirect_add_subscription { > } > > my @additional_fields; >- my $record = GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record({ embed_items => 1 }); > my $subscription_fields = Koha::AdditionalFields->search({ tablename => 'subscription' }); > while ( my $field = $subscription_fields->next ) { > my $value = $query->param('additional_field_' . $field->id); >@@ -484,7 +484,8 @@ sub redirect_mod_subscription { > ); > > my @additional_fields; >- my $record = GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record({ embed_items => 1 }); > my $subscription_fields = Koha::AdditionalFields->search({ tablename => 'subscription' }); > while ( my $field = $subscription_fields->next ) { > my $value = $query->param('additional_field_' . $field->id); >diff --git a/t/Biblio.t b/t/Biblio.t >index 40b22ed593..c298349e18 100755 >--- a/t/Biblio.t >+++ b/t/Biblio.t >@@ -21,10 +21,10 @@ use Test::More; > use Test::MockModule; > use Test::Warn; > >-plan tests => 37; >+plan tests => 34; > > >-use_ok('C4::Biblio', qw( AddBiblio ModBiblio BiblioAutoLink LinkBibHeadingsToAuthorities GetMarcPrice GetMarcQuantity GetMarcControlnumber GetMarcISBN GetMarcISSN GetMarcSubjects GetMarcUrls GetMarcSeries TransformMarcToKoha ModBiblioMarc RemoveAllNsb GetMarcBiblio UpdateTotalIssues )); >+use_ok('C4::Biblio', qw( AddBiblio ModBiblio BiblioAutoLink LinkBibHeadingsToAuthorities GetMarcPrice GetMarcQuantity GetMarcControlnumber GetMarcISBN GetMarcISSN GetMarcSubjects GetMarcUrls GetMarcSeries TransformMarcToKoha ModBiblioMarc RemoveAllNsb UpdateTotalIssues )); > > my $db = Test::MockModule->new('Koha::Database'); > $db->mock( _new_schema => sub { return Schema(); } ); >@@ -130,19 +130,10 @@ warning_is { $ret = RemoveAllNsb() } > > ok( !defined $ret, 'RemoveAllNsb returns undef if not passed rec'); > >-warning_is { $ret = GetMarcBiblio() } >- { carped => 'GetMarcBiblio called without parameters'}, >- "GetMarcBiblio returns carped warning on no parameters"; >- >-warning_is { $ret = GetMarcBiblio({ biblionumber => undef }) } >- { carped => 'GetMarcBiblio called with undefined biblionumber'}, >- "GetMarcBiblio returns carped warning on undef biblionumber"; >- >-ok( !defined $ret, 'GetMarcBiblio returns undef if not passed a biblionumber'); > > warnings_like { $ret = UpdateTotalIssues() } >- [ { carped => qr/GetMarcBiblio called with undefined biblionumber/ }, >- { carped => qr/UpdateTotalIssues could not get biblio record/ } ], >+ [ >+ { carped => qr/UpdateTotalIssues could not get biblio/ } ], > "UpdateTotalIssues returns carped warnings if biblio record does not exist"; > > ok( !defined $ret, 'UpdateTotalIssues returns carped warning if biblio record does not exist'); >diff --git a/t/db_dependent/Biblio.t b/t/db_dependent/Biblio.t >index 7afa3e29f4..1e14196033 100755 >--- a/t/db_dependent/Biblio.t >+++ b/t/db_dependent/Biblio.t >@@ -33,7 +33,7 @@ use Koha::MarcSubfieldStructures; > use C4::Linker::Default qw( get_link ); > > BEGIN { >- use_ok('C4::Biblio', qw( AddBiblio GetMarcFromKohaField BiblioAutoLink GetMarcSubfieldStructure GetMarcSubfieldStructureFromKohaField LinkBibHeadingsToAuthorities GetBiblioData GetMarcBiblio ModBiblio GetMarcISSN GetMarcControlnumber GetMarcISBN GetMarcPrice GetFrameworkCode GetMarcUrls IsMarcStructureInternal GetMarcStructure GetXmlBiblio DelBiblio )); >+ use_ok('C4::Biblio', qw( AddBiblio GetMarcFromKohaField BiblioAutoLink GetMarcSubfieldStructure GetMarcSubfieldStructureFromKohaField LinkBibHeadingsToAuthorities GetBiblioData ModBiblio GetMarcISSN GetMarcControlnumber GetMarcISBN GetMarcPrice GetFrameworkCode GetMarcUrls IsMarcStructureInternal GetMarcStructure GetXmlBiblio DelBiblio )); > } > > my $schema = Koha::Database->new->schema; >@@ -273,8 +273,10 @@ sub run_tests { > is( $data->{ title }, undef, > '(GetBiblioData) Title field is empty in fresh biblio.'); > >+ my $biblio = Koha::Biblios->find($biblionumber); >+ > my ( $isbn_field, $isbn_subfield ) = get_isbn_field(); >- my $marc = GetMarcBiblio({ biblionumber => $biblionumber }); >+ my $marc = $biblio->metadata->record; > is( $marc->subfield( $isbn_field, $isbn_subfield ), $isbn, ); > > # Add title >@@ -285,7 +287,7 @@ sub run_tests { > is( $data->{ title }, $title, > 'ModBiblio correctly added the title field, and GetBiblioData.'); > is( $data->{ isbn }, $isbn, '(ModBiblio) ISBN is still there after ModBiblio.'); >- $marc = GetMarcBiblio({ biblionumber => $biblionumber }); >+ $marc = $biblio->metadata->record; > my ( $title_field, $title_subfield ) = get_title_field(); > is( $marc->subfield( $title_field, $title_subfield ), $title, ); > >@@ -422,9 +424,7 @@ sub run_tests { > > is( GetMarcPrice( $record_for_isbn, $marcflavour ), 100, > "GetMarcPrice returns the correct value"); >- my $updatedrecord = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 0 }); >+ my $updatedrecord = $biblio->metadata->record; > my $frameworkcode = GetFrameworkCode($biblionumber); > my ( $biblioitem_tag, $biblioitem_subfield ) = GetMarcFromKohaField( "biblioitems.biblioitemnumber" ); > die qq{No biblioitemnumber tag for framework "$frameworkcode"} unless $biblioitem_tag; >@@ -706,7 +706,8 @@ subtest 'MarcFieldForCreatorAndModifier' => sub { > my $record = MARC::Record->new(); > my ($biblionumber) = C4::Biblio::AddBiblio($record, ''); > >- $record = GetMarcBiblio({biblionumber => $biblionumber}); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ $record = $biblio->metadata->record; > is($record->subfield('998', 'a'), 123, '998$a = 123'); > is($record->subfield('998', 'b'), 'John Doe', '998$b = John Doe'); > is($record->subfield('998', 'c'), 123, '998$c = 123'); >@@ -715,7 +716,7 @@ subtest 'MarcFieldForCreatorAndModifier' => sub { > $c4_context->mock('userenv', sub { return { number => 321, firstname => 'Jane', surname => 'Doe'}; }); > C4::Biblio::ModBiblio($record, $biblionumber, ''); > >- $record = GetMarcBiblio({biblionumber => $biblionumber}); >+ $record = $biblio->metadata->record; > is($record->subfield('998', 'a'), 123, '998$a = 123'); > is($record->subfield('998', 'b'), 'John Doe', '998$b = John Doe'); > is($record->subfield('998', 'c'), 321, '998$c = 321'); >diff --git a/t/db_dependent/Biblio/MarcOverlayRules.t b/t/db_dependent/Biblio/MarcOverlayRules.t >index 29aeeafa06..dd3c720599 100755 >--- a/t/db_dependent/Biblio/MarcOverlayRules.t >+++ b/t/db_dependent/Biblio/MarcOverlayRules.t >@@ -22,8 +22,9 @@ use POSIX qw(floor); > use MARC::Record; > > use C4::Context; >-use C4::Biblio qw( AddBiblio ModBiblio DelBiblio GetMarcBiblio ); >+use C4::Biblio qw( AddBiblio ModBiblio DelBiblio ); > use Koha::Database; >+use Koha::Biblios; > > use Test::More tests => 24; > use Test::MockModule; >@@ -755,7 +756,8 @@ subtest 'context option in ModBiblio is handled correctly' => sub { > > # Since marc merc rules are not run on save, only update > # saved record should be identical to orig_record >- my $saved_record = GetMarcBiblio({ biblionumber => $biblionumber }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $saved_record = $biblio->metadata->record; > > my @all_fields = $saved_record->fields(); > # Koha also adds 999c field, therefore 4 not 3 >@@ -783,7 +785,7 @@ subtest 'context option in ModBiblio is handled correctly' => sub { > > ModBiblio($saved_record, $biblionumber, '', { overlay_context => { 'source' => 'test' } }); > >- my $updated_record = GetMarcBiblio({ biblionumber => $biblionumber }); >+ my $updated_record = $biblio->metadata->record; > > $expected_record = build_record([ > # "250" field has been appended >diff --git a/t/db_dependent/Biblio/ModBiblioMarc.t b/t/db_dependent/Biblio/ModBiblioMarc.t >index 8f7e28b49c..ac56746d2d 100755 >--- a/t/db_dependent/Biblio/ModBiblioMarc.t >+++ b/t/db_dependent/Biblio/ModBiblioMarc.t >@@ -22,8 +22,9 @@ use t::lib::Mocks; > use t::lib::TestBuilder; > use MARC::Record; > >-use C4::Biblio qw( ModBiblio ModBiblioMarc GetMarcBiblio ); >+use C4::Biblio qw( ModBiblio ModBiblioMarc ); > use Koha::Database; >+use Koha::Biblios; > > my $schema = Koha::Database->new->schema; > $schema->storage->txn_begin; >@@ -41,7 +42,7 @@ subtest "Check MARC field length calculation" => sub { > > is( $record->leader, ' 'x24, 'No leader lengths' ); > C4::Biblio::ModBiblioMarc( $record, $biblio->biblionumber ); >- my $savedrec = C4::Biblio::GetMarcBiblio({ biblionumber => $biblio->biblionumber }); >+ my $savedrec = $biblio->metadata->record; > like( substr($savedrec->leader,0,5), qr/^\d{5}$/, 'Record length found' ); > like( substr($savedrec->leader,12,5), qr/^\d{5}$/, 'Base address found' ); > }; >diff --git a/t/db_dependent/Items.t b/t/db_dependent/Items.t >index 20fe122d1c..3659326830 100755 >--- a/t/db_dependent/Items.t >+++ b/t/db_dependent/Items.t >@@ -20,7 +20,7 @@ use Data::Dumper; > > use MARC::Record; > use C4::Items qw( ModItemTransfer GetItemsInfo SearchItems AddItemFromMarc ModItemFromMarc get_hostitemnumbers_of Item2Marc ); >-use C4::Biblio qw( GetMarcFromKohaField EmbedItemsInMarcBiblio GetMarcBiblio AddBiblio ); >+use C4::Biblio qw( GetMarcFromKohaField AddBiblio ); > use C4::Circulation qw( AddIssue ); > use Koha::Items; > use Koha::Database; >@@ -34,7 +34,7 @@ use Koha::AuthorisedValues; > use t::lib::Mocks; > use t::lib::TestBuilder; > >-use Test::More tests => 14; >+use Test::More tests => 12; > > use Test::Warn; > >@@ -618,127 +618,6 @@ subtest 'Koha::Item(s) tests' => sub { > $schema->storage->txn_rollback; > }; > >-subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { >- plan tests => 8; >- >- $schema->storage->txn_begin(); >- >- my $builder = t::lib::TestBuilder->new; >- my $library1 = $builder->build({ >- source => 'Branch', >- }); >- my $library2 = $builder->build({ >- source => 'Branch', >- }); >- my $itemtype = $builder->build({ >- source => 'Itemtype', >- }); >- >- my $biblio = $builder->build_sample_biblio(); >- my $item_infos = [ >- { homebranch => $library1->{branchcode}, holdingbranch => $library1->{branchcode} }, >- { homebranch => $library1->{branchcode}, holdingbranch => $library1->{branchcode} }, >- { homebranch => $library1->{branchcode}, holdingbranch => $library1->{branchcode} }, >- { homebranch => $library2->{branchcode}, holdingbranch => $library2->{branchcode} }, >- { homebranch => $library2->{branchcode}, holdingbranch => $library2->{branchcode} }, >- { homebranch => $library1->{branchcode}, holdingbranch => $library2->{branchcode} }, >- { homebranch => $library1->{branchcode}, holdingbranch => $library2->{branchcode} }, >- { homebranch => $library1->{branchcode}, holdingbranch => $library2->{branchcode} }, >- ]; >- my $number_of_items = scalar @$item_infos; >- my $number_of_items_with_homebranch_is_CPL = >- grep { $_->{homebranch} eq $library1->{branchcode} } @$item_infos; >- >- my @itemnumbers; >- for my $item_info (@$item_infos) { >- my $itemnumber = $builder->build_sample_item( >- { >- biblionumber => $biblio->biblionumber, >- homebranch => $item_info->{homebranch}, >- holdingbranch => $item_info->{holdingbranch}, >- itype => $itemtype->{itemtype} >- } >- )->itemnumber; >- >- push @itemnumbers, $itemnumber; >- } >- >- # Emptied the OpacHiddenItems pref >- t::lib::Mocks::mock_preference( 'OpacHiddenItems', '' ); >- >- my ($itemfield) = >- C4::Biblio::GetMarcFromKohaField( 'items.itemnumber' ); >- my $record = C4::Biblio::GetMarcBiblio({ biblionumber => $biblio->biblionumber }); >- warning_is { C4::Biblio::EmbedItemsInMarcBiblio() } >- { carped => 'EmbedItemsInMarcBiblio: No MARC record passed' }, >- 'Should carp is no record passed.'; >- >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblio->biblionumber }); >- my @items = $record->field($itemfield); >- is( scalar @items, $number_of_items, 'Should return all items' ); >- >- my $marc_with_items = C4::Biblio::GetMarcBiblio({ >- biblionumber => $biblio->biblionumber, >- embed_items => 1 }); >- is_deeply( $record, $marc_with_items, 'A direct call to GetMarcBiblio with items matches'); >- >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblio->biblionumber, >- item_numbers => [ $itemnumbers[1], $itemnumbers[3] ] }); >- @items = $record->field($itemfield); >- is( scalar @items, 2, 'Should return all items present in the list' ); >- >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblio->biblionumber, >- opac => 1 }); >- @items = $record->field($itemfield); >- is( scalar @items, $number_of_items, 'Should return all items for opac' ); >- >- my $opachiddenitems = " >- homebranch: ['$library1->{branchcode}']"; >- t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems ); >- >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblio->biblionumber }); >- @items = $record->field($itemfield); >- is( scalar @items, >- $number_of_items, >- 'Even with OpacHiddenItems set, all items should have been embedded' ); >- >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblio->biblionumber, >- opac => 1 }); >- @items = $record->field($itemfield); >- is( >- scalar @items, >- $number_of_items - $number_of_items_with_homebranch_is_CPL, >-'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded' >- ); >- >- $opachiddenitems = " >- homebranch: ['$library1->{branchcode}', '$library2->{branchcode}']"; >- t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems ); >- C4::Biblio::EmbedItemsInMarcBiblio({ >- marc_record => $record, >- biblionumber => $biblio->biblionumber, >- opac => 1 }); >- @items = $record->field($itemfield); >- is( >- scalar @items, >- 0, >-'For OPAC, If all items are hidden, no item should have been embedded' >- ); >- >- $schema->storage->txn_rollback; >-}; >- >- > subtest 'get_hostitemnumbers_of' => sub { > plan tests => 3; > >diff --git a/t/db_dependent/Koha/Biblio/Metadata.t b/t/db_dependent/Koha/Biblio/Metadata.t >index 7bd22e269a..6adc4e75d4 100755 >--- a/t/db_dependent/Koha/Biblio/Metadata.t >+++ b/t/db_dependent/Koha/Biblio/Metadata.t >@@ -17,10 +17,11 @@ > > use Modern::Perl; > >-use Test::More tests => 2; >+use Test::More tests => 3; > use Test::Exception; > > use t::lib::TestBuilder; >+use t::lib::Mocks; > > use C4::Biblio qw( AddBiblio ); > use Koha::Database; >@@ -83,3 +84,111 @@ subtest 'record() tests' => sub { > > $schema->storage->txn_rollback; > }; >+ >+subtest '_embed_items' => sub { >+ plan tests => 8; >+ >+ $schema->storage->txn_begin(); >+ >+ my $builder = t::lib::TestBuilder->new; >+ my $library1 = $builder->build({ >+ source => 'Branch', >+ }); >+ my $library2 = $builder->build({ >+ source => 'Branch', >+ }); >+ my $itemtype = $builder->build({ >+ source => 'Itemtype', >+ }); >+ >+ my $biblio = $builder->build_sample_biblio(); >+ my $item_infos = [ >+ { homebranch => $library1->{branchcode}, holdingbranch => $library1->{branchcode} }, >+ { homebranch => $library1->{branchcode}, holdingbranch => $library1->{branchcode} }, >+ { homebranch => $library1->{branchcode}, holdingbranch => $library1->{branchcode} }, >+ { homebranch => $library2->{branchcode}, holdingbranch => $library2->{branchcode} }, >+ { homebranch => $library2->{branchcode}, holdingbranch => $library2->{branchcode} }, >+ { homebranch => $library1->{branchcode}, holdingbranch => $library2->{branchcode} }, >+ { homebranch => $library1->{branchcode}, holdingbranch => $library2->{branchcode} }, >+ { homebranch => $library1->{branchcode}, holdingbranch => $library2->{branchcode} }, >+ ]; >+ my $number_of_items = scalar @$item_infos; >+ my $number_of_items_with_homebranch_is_CPL = >+ grep { $_->{homebranch} eq $library1->{branchcode} } @$item_infos; >+ >+ my @itemnumbers; >+ for my $item_info (@$item_infos) { >+ my $itemnumber = $builder->build_sample_item( >+ { >+ biblionumber => $biblio->biblionumber, >+ homebranch => $item_info->{homebranch}, >+ holdingbranch => $item_info->{holdingbranch}, >+ itype => $itemtype->{itemtype} >+ } >+ )->itemnumber; >+ >+ push @itemnumbers, $itemnumber; >+ } >+ >+ # Emptied the OpacHiddenItems pref >+ t::lib::Mocks::mock_preference( 'OpacHiddenItems', '' ); >+ >+ throws_ok { Koha::Biblio::Metadata->record() } >+ 'Koha::Exceptions::Metadata', >+'Koha::Biblio::Metadata->record must be called on an instantiated object or like a class method with a record passed in parameter'; >+ >+ my ($itemfield) = >+ C4::Biblio::GetMarcFromKohaField( 'items.itemnumber' ); >+ my $record = $biblio->metadata->record; >+ Koha::Biblio::Metadata->record( >+ { >+ record => $record, >+ embed_items => 1, >+ biblionumber => $biblio->biblionumber >+ } >+ ); >+ my @items = $record->field($itemfield); >+ is( scalar @items, $number_of_items, 'Should return all items' ); >+ >+ my $marc_with_items = $biblio->metadata->record({ embed_items => 1 }); >+ is_deeply( $record, $marc_with_items, 'A direct call to GetMarcBiblio with items matches'); >+ >+ $record = $biblio->metadata->record({ embed_items => 1, itemnumbers => [ $itemnumbers[1], $itemnumbers[3] ] }); >+ @items = $record->field($itemfield); >+ is( scalar @items, 2, 'Should return all items present in the list' ); >+ >+ $record = $biblio->metadata->record({ embed_items => 1, opac => 1 }); >+ @items = $record->field($itemfield); >+ is( scalar @items, $number_of_items, 'Should return all items for opac' ); >+ >+ my $opachiddenitems = " >+ homebranch: ['$library1->{branchcode}']"; >+ t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems ); >+ >+ $record = $biblio->metadata->record({ embed_items => 1 }); >+ @items = $record->field($itemfield); >+ is( scalar @items, >+ $number_of_items, >+ 'Even with OpacHiddenItems set, all items should have been embedded' ); >+ >+ $record = $biblio->metadata->record({ embed_items => 1, opac => 1 }); >+ @items = $record->field($itemfield); >+ is( >+ scalar @items, >+ $number_of_items - $number_of_items_with_homebranch_is_CPL, >+'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded' >+ ); >+ >+ $opachiddenitems = " >+ homebranch: ['$library1->{branchcode}', '$library2->{branchcode}']"; >+ t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems ); >+ $record = $biblio->metadata->record({ embed_items => 1, opac => 1 }); >+ @items = $record->field($itemfield); >+ is( >+ scalar @items, >+ 0, >+'For OPAC, If all items are hidden, no item should have been embedded' >+ ); >+ >+ $schema->storage->txn_rollback; >+}; >diff --git a/t/db_dependent/Koha/Filter/EmbedItemsAvailability.t b/t/db_dependent/Koha/Filter/EmbedItemsAvailability.t >index ca81af1188..ef1249eec6 100755 >--- a/t/db_dependent/Koha/Filter/EmbedItemsAvailability.t >+++ b/t/db_dependent/Koha/Filter/EmbedItemsAvailability.t >@@ -25,7 +25,8 @@ use t::lib::TestBuilder; > > use MARC::Record; > >-use C4::Biblio qw( GetMarcFromKohaField AddBiblio GetMarcBiblio ); >+use C4::Biblio qw( GetMarcFromKohaField AddBiblio ); >+use Koha::Biblios; > use Koha::Database; > use Koha::RecordProcessor; > >@@ -84,7 +85,8 @@ subtest 'EmbedItemsAvailability tests' => sub { > my $processor = Koha::RecordProcessor->new( { filters => ('EmbedItemsAvailability') } ); > is( ref($processor), 'Koha::RecordProcessor', 'Created record processor' ); > >- my $record = GetMarcBiblio({ biblionumber => $biblionumber }); >+ my $biblio_object = Koha::Biblios->find($biblionumber); >+ my $record = $biblio_object->metadata->record; > ok( !defined $record->field('999')->subfield('x'), q{The record doesn't originally contain 999$x} ); > # Apply filter > $processor->process($record); >@@ -123,7 +125,8 @@ subtest 'EmbedItemsAvailability tests' => sub { > $processor = Koha::RecordProcessor->new( { filters => ('EmbedItemsAvailability') } ); > is( ref($processor), 'Koha::RecordProcessor', 'Created record processor' ); > >- $record = GetMarcBiblio({ biblionumber => $biblionumber }); >+ $biblio_object = Koha::Biblios->find($biblionumber); >+ $record = $biblio_object->metadata->record; > ok( !defined $record->subfield('999', 'x'), q{The record doesn't originally contain 999$x} ); > # Apply filter > $processor->process($record); >diff --git a/t/db_dependent/Koha/SearchEngine/Elasticsearch/Indexer.t b/t/db_dependent/Koha/SearchEngine/Elasticsearch/Indexer.t >index 2b84a24f39..fa60948ec8 100755 >--- a/t/db_dependent/Koha/SearchEngine/Elasticsearch/Indexer.t >+++ b/t/db_dependent/Koha/SearchEngine/Elasticsearch/Indexer.t >@@ -28,6 +28,7 @@ use t::lib::TestBuilder; > use MARC::Record; > > use Koha::Database; >+use Koha::Biblios; > > my $schema = Koha::Database->schema(); > >@@ -113,7 +114,7 @@ subtest 'index_records() tests' => sub { > "When passing record and ids to index_records they are correctly passed through to update_index"; > > $indexer = Koha::SearchEngine::Elasticsearch::Indexer->new({ 'index' => 'biblios' }); >- $marc_record = C4::Biblio::GetMarcBiblio({ biblionumber => $biblio->biblionumber, embed_items => 1 }); >+ $marc_record = $biblio->metadata->record({ embed_items => 1 }); > warning_is { > $indexer->index_records( [ $biblio->biblionumber ], > 'specialUpdate', 'biblioserver' ); >diff --git a/t/db_dependent/OAI/AndSets.t b/t/db_dependent/OAI/AndSets.t >index 0d6bd9049f..0489de6457 100755 >--- a/t/db_dependent/OAI/AndSets.t >+++ b/t/db_dependent/OAI/AndSets.t >@@ -25,8 +25,8 @@ use MARC::Record; > use Data::Dumper; > > use Koha::Database; >-use C4::Biblio qw( GetMarcBiblio ); > use C4::OAI::Sets qw( AddOAISet ModOAISet ModOAISetMappings CalcOAISetsBiblio ); >+use Koha::Biblios; > > use t::lib::TestBuilder; > >@@ -98,11 +98,11 @@ my $biblionumber1 = $biblio_1->biblionumber; > my $biblionumber2 = $biblio_2->biblionumber; > > >-my $record = GetMarcBiblio({ biblionumber => $biblionumber1 }); >+my $record = $biblio_1->metadata->record; > my @setsEq = CalcOAISetsBiblio($record); > ok(!@setsEq, 'If only one condition is true, the record does not belong to the set'); > >-$record = GetMarcBiblio({ biblionumber => $biblionumber2 }); >+$record = $biblio_2->metadata->record; > @setsEq = CalcOAISetsBiblio($record); > is_deeply(@setsEq, $set1_id, 'If all conditions are true, the record belongs to the set'); > >@@ -169,12 +169,12 @@ $biblio_2 = $builder->build_sample_biblio({ author => 'myAuthor', itemtype => 'm > $biblionumber1 = $biblio_1->biblionumber; > $biblionumber2 = $biblio_2->biblionumber; > >-$record = GetMarcBiblio({ biblionumber => $biblionumber1 }); >+$record = $biblio_1->metadata->record; > @setsEq = CalcOAISetsBiblio($record); > > is_deeply(@setsEq, $set1_id, 'Boolean operators precedence is respected, the record with only the title belongs to the set'); > >-$record = GetMarcBiblio({ biblionumber => $biblionumber2 }); >+$record = $biblio_2->metadata->record; > @setsEq = CalcOAISetsBiblio($record); > is_deeply(@setsEq, $set1_id, 'Boolean operators precedence is respected, the record with author and itemtype belongs to the set'); > >diff --git a/t/db_dependent/OAI/Server.t b/t/db_dependent/OAI/Server.t >index c9ae0ec994..0b58f8aeaf 100755 >--- a/t/db_dependent/OAI/Server.t >+++ b/t/db_dependent/OAI/Server.t >@@ -33,10 +33,11 @@ use YAML::XS; > use t::lib::Mocks; > use t::lib::TestBuilder; > >-use C4::Biblio qw( AddBiblio GetMarcBiblio ModBiblio DelBiblio ); >+use C4::Biblio qw( AddBiblio ModBiblio DelBiblio ); > use C4::Context; > use C4::OAI::Sets qw(AddOAISet); > >+use Koha::Biblios; > use Koha::Biblio::Metadatas; > use Koha::Database; > use Koha::DateUtils qw( dt_from_string ); >@@ -104,7 +105,8 @@ foreach my $index ( 0 .. NUMBER_OF_MARC_RECORDS - 1 ) { > $sth2->execute($timestamp,$biblionumber); > $timestamp .= 'Z'; > $timestamp =~ s/ /T/; >- $record = GetMarcBiblio({ biblionumber => $biblionumber }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ $record = $biblio->metadata->record; > my $record_transformed = $record->clone; > $record_transformed->delete_fields( $record_transformed->field('952')); > $record_transformed = XMLin($record_transformed->as_xml_record); >@@ -391,7 +393,8 @@ subtest 'Bug 19725: OAI-PMH ListRecords and ListIdentifiers should use biblio_me > > # Modify record to trigger auto update of timestamp > (my $biblionumber = $marcxml[0]->{header}->{identifier}) =~ s/^.*:(.*)/$1/; >- my $record = GetMarcBiblio({biblionumber => $biblionumber}); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record; > $record->append_fields(MARC::Field->new(999, '', '', z => '_')); > ModBiblio( $record, $biblionumber ); > my $from_dt = dt_from_string( >@@ -577,7 +580,7 @@ subtest 'Tests for timestamp handling' => sub { > }, > metadata => { > record => XMLin( >- GetMarcBiblio({ biblionumber => $biblio1->biblionumber, embed_items => 1, opac => 1 })->as_xml_record() >+ $biblio1->metadata->record({ embed_items => 1, opac => 1})->as_xml_record() > ) > } > } >@@ -590,7 +593,7 @@ subtest 'Tests for timestamp handling' => sub { > }, > metadata => { > record => XMLin( >- GetMarcBiblio({ biblionumber => $biblio1->biblionumber, embed_items => 0, opac => 1 })->as_xml_record() >+ $biblio1->metadata->record({opac => 1})->as_xml_record() > ) > } > } >@@ -649,7 +652,7 @@ subtest 'Tests for timestamp handling' => sub { > > $expected->{record}{header}{datestamp} = $utc_timestamp; > $expected->{record}{metadata}{record} = XMLin( >- GetMarcBiblio({ biblionumber => $biblio1->biblionumber, embed_items => 1, opac => 1 })->as_xml_record() >+ $biblio1->metadata->record({ embed_items => 1, opac => 1})->as_xml_record() > ); > > test_query( >@@ -715,7 +718,7 @@ subtest 'Tests for timestamp handling' => sub { > > $expected->{record}{header}{datestamp} = $utc_timestamp; > $expected->{record}{metadata}{record} = XMLin( >- GetMarcBiblio({ biblionumber => $biblio1->biblionumber, embed_items => 1, opac => 1 })->as_xml_record() >+ $biblio1->metadata->record({ embed_items => 1, opac => 1})->as_xml_record() > ); > > test_query( >@@ -744,7 +747,7 @@ subtest 'Tests for timestamp handling' => sub { > $sth_del_item->execute($timestamp, $item2->itemnumber); > > $expected->{record}{metadata}{record} = XMLin( >- GetMarcBiblio({ biblionumber => $biblio1->biblionumber, embed_items => 1, opac => 1 })->as_xml_record() >+ $biblio1->metadata->record({ embed_items => 1, opac => 1})->as_xml_record() > ); > > test_query( >@@ -827,7 +830,7 @@ subtest 'Tests for timestamp handling' => sub { > }, > metadata => { > record => XMLin( >- GetMarcBiblio({ biblionumber => $biblio2->biblionumber, embed_items => 1, opac => 1 })->as_xml_record() >+ $biblio2->metadata->record({ embed_items => 1, opac => 1})->as_xml_record() > ) > } > } >@@ -843,7 +846,7 @@ subtest 'Tests for timestamp handling' => sub { > }, > metadata => { > record => XMLin( >- GetMarcBiblio({ biblionumber => $biblio2->biblionumber, embed_items => 0, opac => 1 })->as_xml_record() >+ $biblio2->metadata->record->as_xml_record() > ) > } > } >diff --git a/t/db_dependent/Record/marcrecord2csv.t b/t/db_dependent/Record/marcrecord2csv.t >index 53fa0bdb9f..ab4d5e75a7 100755 >--- a/t/db_dependent/Record/marcrecord2csv.t >+++ b/t/db_dependent/Record/marcrecord2csv.t >@@ -7,10 +7,11 @@ use MARC::Record; > use MARC::Field; > use Text::CSV::Encoded; > >-use C4::Biblio qw( AddBiblio GetMarcBiblio ); >+use C4::Biblio qw( AddBiblio ); > use C4::Context; > use C4::Record qw( marcrecord2csv ); > use Koha::Database; >+use Koha::Biblios; > > use C4::Items qw( AddItemFromMarc ); > >@@ -26,7 +27,6 @@ my $module_biblio = Test::MockModule->new('C4::Biblio'); > my $record = new_record(); > my $frameworkcode = q||; > my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $record, $frameworkcode ); >-$module_biblio->mock( 'GetMarcBiblio', sub{ $record } ); > > my $csv_content = q(Title=245$a|Author=245$c|Subject=650$a); > my $csv_profile_id_1 = insert_csv_profile({ csv_content => $csv_content }); >diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t >index 3636c1b082..7042db18ac 100755 >--- a/t/db_dependent/Reserves.t >+++ b/t/db_dependent/Reserves.t >@@ -29,10 +29,11 @@ use DateTime::Duration; > > use C4::Circulation qw( AddReturn AddIssue ); > use C4::Items; >-use C4::Biblio qw( GetMarcBiblio GetMarcFromKohaField ModBiblio ); >+use C4::Biblio qw( GetMarcFromKohaField ModBiblio ); > use C4::Members; > use C4::Reserves qw( AddReserve AlterPriority CheckReserves GetReservesControlBranch ModReserve ModReserveAffect ReserveSlip CalculatePriority CanReserveBeCanceledFromOpac CanBookBeReserved IsAvailableForItemLevelRequest MoveReserve ChargeReserveFee RevertWaitingStatus CanItemBeReserved MergeHolds ); > use Koha::ActionLogs; >+use Koha::Biblios; > use Koha::Caches; > use Koha::DateUtils qw( dt_from_string output_pref ); > use Koha::Holds; >@@ -583,7 +584,8 @@ t::lib::Mocks::mock_preference( 'AgeRestrictionMarker', 'FSK|PEGI|Age|K' ); > #Reserving an not-agerestricted Biblio by a Borrower with no dateofbirth is tested previously. > > #Set the ageRestriction for the Biblio >-my $record = GetMarcBiblio({ biblionumber => $bibnum }); >+$biblio = Koha::Biblios->find($bibnum); >+my $record = $biblio->metadata->record; > my ( $ageres_tagid, $ageres_subfieldid ) = GetMarcFromKohaField( "biblioitems.agerestriction" ); > $record->append_fields( MARC::Field->new($ageres_tagid, '', '', $ageres_subfieldid => 'PEGI 16') ); > C4::Biblio::ModBiblio( $record, $bibnum, $frameworkcode ); >diff --git a/tools/showdiffmarc.pl b/tools/showdiffmarc.pl >index 6864d7219d..add909a39c 100755 >--- a/tools/showdiffmarc.pl >+++ b/tools/showdiffmarc.pl >@@ -28,7 +28,6 @@ use CGI qw(:standard -utf8); > use C4::Context; > use C4::Output qw( output_html_with_http_headers ); > use C4::Auth qw( get_template_and_user ); >-use C4::Biblio qw( GetMarcBiblio ); > use C4::Auth qw( get_template_and_user ); > use C4::ImportBatch qw( GetRecordFromImportBiblio GetImportBiblios ); > use C4::AuthoritiesMarc qw( GetAuthority ); >@@ -61,11 +60,8 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > ); > > if ( $type eq 'biblio' ) { >- $record = GetMarcBiblio({ >- biblionumber => $recordid, >- embed_items => 1, >- }); > my $biblio = Koha::Biblios->find( $recordid ); >+ $record = $biblio->metadata->record->({ embed_items => 1 }); > $recordTitle = $biblio->title; > } > elsif ( $type eq 'auth' ) { >diff --git a/virtualshelves/downloadshelf.pl b/virtualshelves/downloadshelf.pl >index e922e9b4e2..1138b530ce 100755 >--- a/virtualshelves/downloadshelf.pl >+++ b/virtualshelves/downloadshelf.pl >@@ -22,11 +22,11 @@ use Modern::Perl; > use CGI qw ( -utf8 ); > > use C4::Auth qw( get_template_and_user ); >-use C4::Biblio qw( GetMarcBiblio ); > use C4::Output qw( output_html_with_http_headers ); > use C4::Record; > use C4::Ris qw( marc2ris ); > >+use Koha::Biblios; > use Koha::CsvProfiles; > use Koha::Virtualshelves; > >@@ -68,9 +68,8 @@ if ($shelfid && $format) { > else { #Other formats > while ( my $content = $contents->next ) { > my $biblionumber = $content->biblionumber; >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1 }); >+ my $biblio = Koha::Biblios->find($biblionumber); >+ my $record = $biblio->metadata->record({ embed_items => 1 }); > if ($format eq 'iso2709') { > $output .= $record->as_usmarc(); > } >diff --git a/virtualshelves/sendshelf.pl b/virtualshelves/sendshelf.pl >index 504481b6ca..0bcb43cea1 100755 >--- a/virtualshelves/sendshelf.pl >+++ b/virtualshelves/sendshelf.pl >@@ -26,7 +26,6 @@ use Try::Tiny qw( catch try ); > > use C4::Auth qw( get_template_and_user ); > use C4::Biblio qw( >- GetMarcBiblio > GetMarcISBN > GetMarcSubjects > ); >@@ -35,6 +34,8 @@ use C4::Output qw( > output_html_with_http_headers > output_and_exit > ); >+ >+use Koha::Biblios; > use Koha::Email; > use Koha::Virtualshelves; > >@@ -78,9 +79,7 @@ if ($to_address) { > my $biblionumber = $content->biblionumber; > my $biblio = Koha::Biblios->find( $biblionumber ) or next; > my $dat = $biblio->unblessed; >- my $record = GetMarcBiblio({ >- biblionumber => $biblionumber, >- embed_items => 1 }); >+ my $record = $biblio->metadata->record({ embed_items => 1 }); > my $marcauthorsarray = $biblio->get_marc_authors; > my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour ); > >-- >2.20.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 29697
:
129757
|
129758
|
129759
|
129760
|
129761
|
131868
|
131869
|
131870
|
131871
|
131872
|
131873
|
134066
|
134067
|
134068
|
134069
|
134070
|
134071
|
135574
|
135575
|
135576
|
135577
|
135578
|
135579
|
135580
|
135662
|
135663
|
135664
|
135665
|
135666
|
135667
|
135668
|
135669
|
135670
|
135671
|
135672
|
135673
|
135797
|
135798
|
135799
|
135800
|
135801
|
135802
|
135978
|
135979
|
135980
|
135981
|
135982
|
137835
|
137836
|
137837
|
137838
|
137839
|
137840
|
137894
|
137918
|
137919
|
137920
|
137921
|
137922
|
137923
|
137924
|
137948
|
138057
|
138076
|
138077
|
138078
|
138079
|
138080
|
138081
|
138089
|
138090
|
138804
|
139127
|
140007
|
140008