-=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 };
- }
- my @items2pass = map { $_->{item} } @items;
- my @hiddenitems =
- $opachiddenitems
- ? C4::Items::GetHiddenItemnumbers({
- items => \@items2pass,
- borcat => $borcat })
- : ();
- # Convert to a hash for quick searching
- my %hiddenitems = map { $_ => 1 } @hiddenitems;
- 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);
-}
-