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

(-)a/C4/Biblio.pm (-2 / +9 lines)
Lines 1210-1215 sub GetMarcBiblio { Link Here
1210
1210
1211
    my $biblionumber = $params->{biblionumber};
1211
    my $biblionumber = $params->{biblionumber};
1212
    my $embeditems   = $params->{embed_items} || 0;
1212
    my $embeditems   = $params->{embed_items} || 0;
1213
    my $embedhostitems  = $params->{embed_host_items} // 0;
1213
    my $opac         = $params->{opac} || 0;
1214
    my $opac         = $params->{opac} || 0;
1214
    my $borcat       = $params->{borcat} // q{};
1215
    my $borcat       = $params->{borcat} // q{};
1215
1216
Lines 1243-1249 sub GetMarcBiblio { Link Here
1243
            marc_record  => $record,
1244
            marc_record  => $record,
1244
            biblionumber => $biblionumber,
1245
            biblionumber => $biblionumber,
1245
            opac         => $opac,
1246
            opac         => $opac,
1246
            borcat       => $borcat })
1247
            borcat       => $borcat,
1248
            embed_host_items => $embedhostitems,
1249
        })
1247
          if ($embeditems);
1250
          if ($embeditems);
1248
1251
1249
        return $record;
1252
        return $record;
Lines 2604-2609 sub EmbedItemsInMarcBiblio { Link Here
2604
    my $dbh = C4::Context->dbh;
2607
    my $dbh = C4::Context->dbh;
2605
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2608
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2606
    $sth->execute($biblionumber);
2609
    $sth->execute($biblionumber);
2610
    my $all_itemnumbers = $sth->fetchall_arrayref();
2611
    @$all_itemnumbers = map { $_->[0] } @$all_itemnumbers;
2612
    push @$all_itemnumbers, C4::Items::get_hostitemnumbers_of( $biblionumber ) if $params->{embed_host_items};
2607
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
2613
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
2608
2614
2609
    my @item_fields; # Array holding the actual MARC data for items to be included.
2615
    my @item_fields; # Array holding the actual MARC data for items to be included.
Lines 2614-2620 sub EmbedItemsInMarcBiblio { Link Here
2614
    my $opachiddenitems = $opac
2620
    my $opachiddenitems = $opac
2615
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2621
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2616
2622
2617
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2623
    require C4::Items;
2624
    foreach my $itemnumber ( @$all_itemnumbers ) {
2618
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2625
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2619
        my $item;
2626
        my $item;
2620
        if ( $opachiddenitems ) {
2627
        if ( $opachiddenitems ) {
(-)a/C4/XSLT.pm (-1 / +5 lines)
Lines 321-326 Is only used in this module currently. Link Here
321
sub buildKohaItemsNamespace {
321
sub buildKohaItemsNamespace {
322
    my ($biblionumber, $hidden_items, $items_rs) = @_;
322
    my ($biblionumber, $hidden_items, $items_rs) = @_;
323
323
324
    my @host_itemnumbers = C4::Items::get_hostitemnumbers_of( $biblionumber );
324
    $hidden_items ||= [];
325
    $hidden_items ||= [];
325
326
326
    my $query = {};
327
    my $query = {};
Lines 328-334 sub buildKohaItemsNamespace { Link Here
328
      if $hidden_items;
329
      if $hidden_items;
329
330
330
    unless ( $items_rs && ref($items_rs) eq 'Koha::Items' ) {
331
    unless ( $items_rs && ref($items_rs) eq 'Koha::Items' ) {
331
        $query->{'me.biblionumber'} = $biblionumber;
332
        $query->{ '-or' } = [
333
            'me.biblionumber' => $biblionumber,
334
            'me.itemnumber' => { -in => \@host_itemnumbers }
335
        ];
332
        $items_rs = Koha::Items->new;
336
        $items_rs = Koha::Items->new;
333
    }
337
    }
334
338
(-)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