View | Details | Raw Unified | Return to bug 27138
Collapse All | Expand All

(-)a/C4/Biblio.pm (-2 / +8 lines)
Lines 1211-1216 sub GetMarcBiblio { Link Here
1211
1211
1212
    my $biblionumber = $params->{biblionumber};
1212
    my $biblionumber = $params->{biblionumber};
1213
    my $embeditems   = $params->{embed_items} || 0;
1213
    my $embeditems   = $params->{embed_items} || 0;
1214
    my $embedhostitems  = $params->{embed_host_items} // 0;
1214
    my $opac         = $params->{opac} || 0;
1215
    my $opac         = $params->{opac} || 0;
1215
    my $borcat       = $params->{borcat} // q{};
1216
    my $borcat       = $params->{borcat} // q{};
1216
1217
Lines 1244-1250 sub GetMarcBiblio { Link Here
1244
            marc_record  => $record,
1245
            marc_record  => $record,
1245
            biblionumber => $biblionumber,
1246
            biblionumber => $biblionumber,
1246
            opac         => $opac,
1247
            opac         => $opac,
1247
            borcat       => $borcat })
1248
            borcat       => $borcat,
1249
            embed_host_items => $embedhostitems,
1250
        })
1248
          if ($embeditems);
1251
          if ($embeditems);
1249
1252
1250
        return $record;
1253
        return $record;
Lines 2650-2655 sub EmbedItemsInMarcBiblio { Link Here
2650
    my $dbh = C4::Context->dbh;
2653
    my $dbh = C4::Context->dbh;
2651
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2654
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2652
    $sth->execute($biblionumber);
2655
    $sth->execute($biblionumber);
2656
    my $all_itemnumbers = $sth->fetchall_arrayref();
2657
    @$all_itemnumbers = map { $_->[0] } @$all_itemnumbers;
2658
    push @$all_itemnumbers, C4::Items::get_hostitemnumbers_of( $biblionumber ) if $params->{embed_host_items};
2653
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
2659
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
2654
2660
2655
    my @item_fields; # Array holding the actual MARC data for items to be included.
2661
    my @item_fields; # Array holding the actual MARC data for items to be included.
Lines 2661-2667 sub EmbedItemsInMarcBiblio { Link Here
2661
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2667
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2662
2668
2663
    require C4::Items;
2669
    require C4::Items;
2664
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2670
    foreach my $itemnumber ( @$all_itemnumbers ) {
2665
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2671
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2666
        my $item;
2672
        my $item;
2667
        if ( $opachiddenitems ) {
2673
        if ( $opachiddenitems ) {
(-)a/C4/Search.pm (-23 lines)
Lines 1772-1800 sub searchResults { Link Here
1772
        my @fields = $marcrecord->field($itemtag);
1772
        my @fields = $marcrecord->field($itemtag);
1773
        my $marcflavor = C4::Context->preference("marcflavour");
1773
        my $marcflavor = C4::Context->preference("marcflavour");
1774
1774
1775
        # adding linked items that belong to host records
1776
        if ( C4::Context->preference('EasyAnalyticalRecords') ) {
1777
            my $analyticsfield = '773';
1778
            if ($marcflavor eq 'MARC21' || $marcflavor eq 'NORMARC') {
1779
                $analyticsfield = '773';
1780
            } elsif ($marcflavor eq 'UNIMARC') {
1781
                $analyticsfield = '461';
1782
            }
1783
            foreach my $hostfield ( $marcrecord->field($analyticsfield)) {
1784
                my $hostbiblionumber = $hostfield->subfield("0");
1785
                my $linkeditemnumber = $hostfield->subfield("9");
1786
                if( $hostbiblionumber ) {
1787
                    my $linkeditemmarc = C4::Items::GetMarcItem( $hostbiblionumber, $linkeditemnumber );
1788
                    if ($linkeditemmarc) {
1789
                        my $linkeditemfield = $linkeditemmarc->field($itemtag);
1790
                        if ($linkeditemfield) {
1791
                            push( @fields, $linkeditemfield );
1792
                        }
1793
                    }
1794
                }
1795
            }
1796
        }
1797
1798
        # Setting item statuses for display
1775
        # Setting item statuses for display
1799
        my @available_items_loop;
1776
        my @available_items_loop;
1800
        my @onloan_items_loop;
1777
        my @onloan_items_loop;
(-)a/C4/XSLT.pm (-1 / +7 lines)
Lines 297-306 Is only used in this module currently. Link Here
297
sub buildKohaItemsNamespace {
297
sub buildKohaItemsNamespace {
298
    my ($biblionumber, $hidden_items) = @_;
298
    my ($biblionumber, $hidden_items) = @_;
299
299
300
    my @host_itemnumbers = C4::Items::get_hostitemnumbers_of( $biblionumber );
300
    $hidden_items ||= [];
301
    $hidden_items ||= [];
301
    my @items = Koha::Items->search(
302
    my @items = Koha::Items->search(
302
        {
303
        {
303
            'me.biblionumber' => $biblionumber,
304
            -or => [
305
                'me.biblionumber' => $biblionumber,
306
                'me.itemnumber' => {
307
                    -in => \@host_itemnumbers
308
                }
309
            ],
304
            'me.itemnumber'   => { not_in => $hidden_items }
310
            'me.itemnumber'   => { not_in => $hidden_items }
305
        },
311
        },
306
        { prefetch => [ 'branchtransfers', 'reserves' ] }
312
        { prefetch => [ 'branchtransfers', 'reserves' ] }
(-)a/Koha/SearchEngine/Elasticsearch/Indexer.pm (-1 / +1 lines)
Lines 324-330 sub index_records { Link Here
324
sub _get_record {
324
sub _get_record {
325
    my ( $id, $server ) = @_;
325
    my ( $id, $server ) = @_;
326
    return $server eq 'biblioserver'
326
    return $server eq 'biblioserver'
327
        ? C4::Biblio::GetMarcBiblio({ biblionumber => $id, embed_items  => 1 })
327
        ? C4::Biblio::GetMarcBiblio({ biblionumber => $id, embed_items  => 1, embed_host_items => 1 })
328
        : C4::AuthoritiesMarc::GetAuthority($id);
328
        : C4::AuthoritiesMarc::GetAuthority($id);
329
}
329
}
330
330
(-)a/misc/migration_tools/rebuild_zebra.pl (-3 / +11 lines)
Lines 504-516 sub export_marc_records_from_sth { Link Here
504
                          ? GetXmlBiblio( $record_number )
504
                          ? GetXmlBiblio( $record_number )
505
                          : GetAuthorityXML( $record_number );
505
                          : GetAuthorityXML( $record_number );
506
            if ($record_type eq 'biblio'){
506
            if ($record_type eq 'biblio'){
507
                my @items = GetItemsInfo($record_number);
507
                my @host_itemnumbers = C4::Items::get_hostitemnumbers_of( $record_number );
508
                my @items = Koha::Items->search({
509
                    -or => [
510
                        biblionumber => $record_number,
511
                        itemnumber => {
512
                            -in => \@host_itemnumbers
513
                        }
514
                    ]
515
                });
508
                if (@items){
516
                if (@items){
509
                    my $record = MARC::Record->new;
517
                    my $record = MARC::Record->new;
510
                    $record->encoding('UTF-8');
518
                    $record->encoding('UTF-8');
511
                    my @itemsrecord;
519
                    my @itemsrecord;
512
                    foreach my $item (@items){
520
                    foreach my $item (@items){
513
                        my $record = Item2Marc($item, $record_number);
521
                        my $record = Item2Marc($item->unblessed, $record_number);
514
                        push @itemsrecord, $record->field($itemtag);
522
                        push @itemsrecord, $record->field($itemtag);
515
                    }
523
                    }
516
                    $record->insert_fields_ordered(@itemsrecord);
524
                    $record->insert_fields_ordered(@itemsrecord);
Lines 673-679 sub get_raw_marc_record { Link Here
673
681
674
    my $marc;
682
    my $marc;
675
    if ($record_type eq 'biblio') {
683
    if ($record_type eq 'biblio') {
676
        eval { $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $record_number, embed_items => 1 }); };
684
        eval { $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $record_number, embed_items => 1, embed_host_items => 1 }); };
677
        if ($@ || !$marc) {
685
        if ($@ || !$marc) {
678
            # here we do warn since catching an exception
686
            # here we do warn since catching an exception
679
            # means that the bib was found but failed
687
            # means that the bib was found but failed
(-)a/t/db_dependent/Items.t (-2 / +36 lines)
Lines 680-686 subtest 'Koha::Item(s) tests' => sub { Link Here
680
};
680
};
681
681
682
subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub {
682
subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub {
683
    plan tests => 8;
683
    plan tests => 11;
684
684
685
    $schema->storage->txn_begin();
685
    $schema->storage->txn_begin();
686
686
Lines 724-729 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
724
        push @itemnumbers, $itemnumber;
724
        push @itemnumbers, $itemnumber;
725
    }
725
    }
726
726
727
    my $host_item = $builder->build_sample_item({ homebranch => $library2->{branchcode} });
728
    my $child_field = PrepHostMarcField( $host_item->biblionumber, $host_item->itemnumber, 'MARC21');
729
    my $child_record = $biblio->metadata->record;
730
    $child_record->append_fields($child_field);
731
    ModBiblio( $child_record, $biblio->biblionumber, '' );
732
727
    # Emptied the OpacHiddenItems pref
733
    # Emptied the OpacHiddenItems pref
728
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', '' );
734
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', '' );
729
735
Lines 748-753 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
748
    C4::Biblio::EmbedItemsInMarcBiblio({
754
    C4::Biblio::EmbedItemsInMarcBiblio({
749
        marc_record  => $record,
755
        marc_record  => $record,
750
        biblionumber => $biblio->biblionumber,
756
        biblionumber => $biblio->biblionumber,
757
        embed_host_items => 1
758
    });
759
    @items = $record->field($itemfield);
760
    is( scalar @items, $number_of_items + 1, 'Should return all items plus host items' );
761
762
    $marc_with_items = C4::Biblio::GetMarcBiblio({
763
        biblionumber => $biblio->biblionumber,
764
        embed_items  => 1,
765
        embed_host_items => 1
766
    });
767
    is_deeply( $record, $marc_with_items, 'A direct call to GetMarcBiblio with items matches');
768
769
    C4::Biblio::EmbedItemsInMarcBiblio({
770
        marc_record  => $record,
771
        biblionumber => $biblio->biblionumber,
751
        item_numbers => [ $itemnumbers[1], $itemnumbers[3] ] });
772
        item_numbers => [ $itemnumbers[1], $itemnumbers[3] ] });
752
    @items = $record->field($itemfield);
773
    @items = $record->field($itemfield);
753
    is( scalar @items, 2, 'Should return all items present in the list' );
774
    is( scalar @items, 2, 'Should return all items present in the list' );
Lines 782-787 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
782
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
803
'For OPAC, the pref OpacHiddenItems should have been take into account. Only items with homebranch ne CPL should have been embedded'
783
    );
804
    );
784
805
806
    C4::Biblio::EmbedItemsInMarcBiblio({
807
        marc_record  => $record,
808
        biblionumber => $biblio->biblionumber,
809
        opac         => 1,
810
        embed_host_items => 1
811
    });
812
    @items = $record->field($itemfield);
813
    is(
814
        scalar @items,
815
        $number_of_items - $number_of_items_with_homebranch_is_CPL + 1,
816
'For OPAC, the pref OpacHiddenItems should have been take into account and host items embedded. Only items with homebranch ne CPL should have been embedded'
817
    );
818
819
785
    $opachiddenitems = "
820
    $opachiddenitems = "
786
        homebranch: ['$library1->{branchcode}', '$library2->{branchcode}']";
821
        homebranch: ['$library1->{branchcode}', '$library2->{branchcode}']";
787
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
822
    t::lib::Mocks::mock_preference( 'OpacHiddenItems', $opachiddenitems );
788
- 

Return to bug 27138