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

(-)a/C4/Biblio.pm (-2 / +9 lines)
Lines 1177-1182 sub GetMarcBiblio { Link Here
1177
1177
1178
    my $biblionumber = $params->{biblionumber};
1178
    my $biblionumber = $params->{biblionumber};
1179
    my $embeditems   = $params->{embed_items} || 0;
1179
    my $embeditems   = $params->{embed_items} || 0;
1180
    my $embedhostitems  = $params->{embed_host_items} // 0;
1180
    my $opac         = $params->{opac} || 0;
1181
    my $opac         = $params->{opac} || 0;
1181
    my $borcat       = $params->{borcat} // q{};
1182
    my $borcat       = $params->{borcat} // q{};
1182
1183
Lines 1210-1216 sub GetMarcBiblio { Link Here
1210
            marc_record  => $record,
1211
            marc_record  => $record,
1211
            biblionumber => $biblionumber,
1212
            biblionumber => $biblionumber,
1212
            opac         => $opac,
1213
            opac         => $opac,
1213
            borcat       => $borcat })
1214
            borcat       => $borcat,
1215
            embed_host_items => $embedhostitems,
1216
        })
1214
          if ($embeditems);
1217
          if ($embeditems);
1215
1218
1216
        return $record;
1219
        return $record;
Lines 2571-2576 sub EmbedItemsInMarcBiblio { Link Here
2571
    my $dbh = C4::Context->dbh;
2574
    my $dbh = C4::Context->dbh;
2572
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2575
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2573
    $sth->execute($biblionumber);
2576
    $sth->execute($biblionumber);
2577
    my $all_itemnumbers = $sth->fetchall_arrayref();
2578
    @$all_itemnumbers = map { $_->[0] } @$all_itemnumbers;
2579
    push @$all_itemnumbers, C4::Items::get_hostitemnumbers_of( $biblionumber ) if $params->{embed_host_items};
2574
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
2580
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
2575
2581
2576
    my @item_fields; # Array holding the actual MARC data for items to be included.
2582
    my @item_fields; # Array holding the actual MARC data for items to be included.
Lines 2581-2587 sub EmbedItemsInMarcBiblio { Link Here
2581
    my $opachiddenitems = $opac
2587
    my $opachiddenitems = $opac
2582
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2588
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2583
2589
2584
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2590
    require C4::Items;
2591
    foreach my $itemnumber ( @$all_itemnumbers ) {
2585
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2592
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2586
        my $item;
2593
        my $item;
2587
        if ( $opachiddenitems ) {
2594
        if ( $opachiddenitems ) {
(-)a/C4/Search.pm (-23 lines)
Lines 1738-1766 sub searchResults { Link Here
1738
        $marcrecord->delete_fields( @fields ) unless C4::Context->preference('PassItemMarcToXSLT');
1738
        $marcrecord->delete_fields( @fields ) unless C4::Context->preference('PassItemMarcToXSLT');
1739
        my $marcflavor = C4::Context->preference("marcflavour");
1739
        my $marcflavor = C4::Context->preference("marcflavour");
1740
1740
1741
        # adding linked items that belong to host records
1742
        if ( C4::Context->preference('EasyAnalyticalRecords') ) {
1743
            my $analyticsfield = '773';
1744
            if ($marcflavor eq 'MARC21' || $marcflavor eq 'NORMARC') {
1745
                $analyticsfield = '773';
1746
            } elsif ($marcflavor eq 'UNIMARC') {
1747
                $analyticsfield = '461';
1748
            }
1749
            foreach my $hostfield ( $marcrecord->field($analyticsfield)) {
1750
                my $hostbiblionumber = $hostfield->subfield("0");
1751
                my $linkeditemnumber = $hostfield->subfield("9");
1752
                if( $hostbiblionumber ) {
1753
                    my $linkeditemmarc = C4::Items::GetMarcItem( $hostbiblionumber, $linkeditemnumber );
1754
                    if ($linkeditemmarc) {
1755
                        my $linkeditemfield = $linkeditemmarc->field($itemtag);
1756
                        if ($linkeditemfield) {
1757
                            push( @fields, $linkeditemfield );
1758
                        }
1759
                    }
1760
                }
1761
            }
1762
        }
1763
1764
        # Setting item statuses for display
1741
        # Setting item statuses for display
1765
        my @available_items_loop;
1742
        my @available_items_loop;
1766
        my @onloan_items_loop;
1743
        my @onloan_items_loop;
(-)a/C4/XSLT.pm (-1 / +5 lines)
Lines 322-327 Is only used in this module currently. Link Here
322
sub buildKohaItemsNamespace {
322
sub buildKohaItemsNamespace {
323
    my ($biblionumber, $hidden_items, $items_rs) = @_;
323
    my ($biblionumber, $hidden_items, $items_rs) = @_;
324
324
325
    my @host_itemnumbers = C4::Items::get_hostitemnumbers_of( $biblionumber );
325
    $hidden_items ||= [];
326
    $hidden_items ||= [];
326
327
327
    my $query = {};
328
    my $query = {};
Lines 329-335 sub buildKohaItemsNamespace { Link Here
329
      if $hidden_items;
330
      if $hidden_items;
330
331
331
    unless ( $items_rs && ref($items_rs) eq 'Koha::Items' ) {
332
    unless ( $items_rs && ref($items_rs) eq 'Koha::Items' ) {
332
        $query->{'me.biblionumber'} = $biblionumber;
333
        $query->{ '-or' } = [
334
            'me.biblionumber' => $biblionumber,
335
            'me.itemnumber' => { -in => \@host_itemnumbers }
336
        ];
333
        $items_rs = Koha::Items->new;
337
        $items_rs = Koha::Items->new;
334
    }
338
    }
335
339
(-)a/Koha/SearchEngine/Elasticsearch/Indexer.pm (-1 / +1 lines)
Lines 331-337 sub index_records { Link Here
331
sub _get_record {
331
sub _get_record {
332
    my ( $id, $server ) = @_;
332
    my ( $id, $server ) = @_;
333
    return $server eq 'biblioserver'
333
    return $server eq 'biblioserver'
334
        ? C4::Biblio::GetMarcBiblio({ biblionumber => $id, embed_items  => 1 })
334
        ? C4::Biblio::GetMarcBiblio({ biblionumber => $id, embed_items  => 1, embed_host_items => 1 })
335
        : C4::AuthoritiesMarc::GetAuthority($id);
335
        : C4::AuthoritiesMarc::GetAuthority($id);
336
}
336
}
337
337
(-)a/misc/migration_tools/rebuild_zebra.pl (-3 / +11 lines)
Lines 509-521 sub export_marc_records_from_sth { Link Here
509
                          ? GetXmlBiblio( $record_number )
509
                          ? GetXmlBiblio( $record_number )
510
                          : GetAuthorityXML( $record_number );
510
                          : GetAuthorityXML( $record_number );
511
            if ($record_type eq 'biblio'){
511
            if ($record_type eq 'biblio'){
512
                my @items = GetItemsInfo($record_number);
512
                my @host_itemnumbers = C4::Items::get_hostitemnumbers_of( $record_number );
513
                my @items = Koha::Items->search({
514
                    -or => [
515
                        biblionumber => $record_number,
516
                        itemnumber => {
517
                            -in => \@host_itemnumbers
518
                        }
519
                    ]
520
                });
513
                if (@items){
521
                if (@items){
514
                    my $record = MARC::Record->new;
522
                    my $record = MARC::Record->new;
515
                    $record->encoding('UTF-8');
523
                    $record->encoding('UTF-8');
516
                    my @itemsrecord;
524
                    my @itemsrecord;
517
                    foreach my $item (@items){
525
                    foreach my $item (@items){
518
                        my $record = Item2Marc($item, $record_number);
526
                        my $record = Item2Marc($item->unblessed, $record_number);
519
                        push @itemsrecord, $record->field($itemtag);
527
                        push @itemsrecord, $record->field($itemtag);
520
                    }
528
                    }
521
                    $record->insert_fields_ordered(@itemsrecord);
529
                    $record->insert_fields_ordered(@itemsrecord);
Lines 678-684 sub get_raw_marc_record { Link Here
678
686
679
    my $marc;
687
    my $marc;
680
    if ($record_type eq 'biblio') {
688
    if ($record_type eq 'biblio') {
681
        eval { $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $record_number, embed_items => 1 }); };
689
        eval { $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $record_number, embed_items => 1, embed_host_items => 1 }); };
682
        if ($@ || !$marc) {
690
        if ($@ || !$marc) {
683
            # here we do warn since catching an exception
691
            # here we do warn since catching an exception
684
            # means that the bib was found but failed
692
            # 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 745-750 subtest 'C4::Biblio::EmbedItemsInMarcBiblio' => sub { Link Here
745
        embed_items  => 1 });
751
        embed_items  => 1 });
746
    is_deeply( $record, $marc_with_items, 'A direct call to GetMarcBiblio with items matches');
752
    is_deeply( $record, $marc_with_items, 'A direct call to GetMarcBiblio with items matches');
747
753
754
    C4::Biblio::EmbedItemsInMarcBiblio({
755
        marc_record  => $record,
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
748
    C4::Biblio::EmbedItemsInMarcBiblio({
769
    C4::Biblio::EmbedItemsInMarcBiblio({
749
        marc_record  => $record,
770
        marc_record  => $record,
750
        biblionumber => $biblio->biblionumber,
771
        biblionumber => $biblio->biblionumber,
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