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

(-)a/C4/Biblio.pm (-2 / +8 lines)
Lines 1197-1202 sub GetMarcBiblio { Link Here
1197
1197
1198
    my $biblionumber = $params->{biblionumber};
1198
    my $biblionumber = $params->{biblionumber};
1199
    my $embeditems   = $params->{embed_items} || 0;
1199
    my $embeditems   = $params->{embed_items} || 0;
1200
    my $embedhostitems  = $params->{embed_host_items} // 0;
1200
    my $opac         = $params->{opac} || 0;
1201
    my $opac         = $params->{opac} || 0;
1201
    my $borcat       = $params->{borcat} // q{};
1202
    my $borcat       = $params->{borcat} // q{};
1202
1203
Lines 1230-1236 sub GetMarcBiblio { Link Here
1230
            marc_record  => $record,
1231
            marc_record  => $record,
1231
            biblionumber => $biblionumber,
1232
            biblionumber => $biblionumber,
1232
            opac         => $opac,
1233
            opac         => $opac,
1233
            borcat       => $borcat })
1234
            borcat       => $borcat,
1235
            embed_host_items => $embedhostitems,
1236
        })
1234
          if ($embeditems);
1237
          if ($embeditems);
1235
1238
1236
        return $record;
1239
        return $record;
Lines 2636-2641 sub EmbedItemsInMarcBiblio { Link Here
2636
    my $dbh = C4::Context->dbh;
2639
    my $dbh = C4::Context->dbh;
2637
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2640
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2638
    $sth->execute($biblionumber);
2641
    $sth->execute($biblionumber);
2642
    my $all_itemnumbers = $sth->fetchall_arrayref();
2643
    @$all_itemnumbers = map { $_->[0] } @$all_itemnumbers;
2644
    push @$all_itemnumbers, C4::Items::get_hostitemnumbers_of( $biblionumber ) if $params->{embed_host_items};
2639
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
2645
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
2640
2646
2641
    my @item_fields; # Array holding the actual MARC data for items to be included.
2647
    my @item_fields; # Array holding the actual MARC data for items to be included.
Lines 2647-2653 sub EmbedItemsInMarcBiblio { Link Here
2647
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2653
      && ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ );
2648
2654
2649
    require C4::Items;
2655
    require C4::Items;
2650
    while ( my ($itemnumber) = $sth->fetchrow_array ) {
2656
    foreach my $itemnumber ( @$all_itemnumbers ) {
2651
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2657
        next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers;
2652
        my $item;
2658
        my $item;
2653
        if ( $opachiddenitems ) {
2659
        if ( $opachiddenitems ) {
(-)a/C4/Search.pm (-23 lines)
Lines 1846-1874 sub searchResults { Link Here
1846
        my @fields = $marcrecord->field($itemtag);
1846
        my @fields = $marcrecord->field($itemtag);
1847
        my $marcflavor = C4::Context->preference("marcflavour");
1847
        my $marcflavor = C4::Context->preference("marcflavour");
1848
1848
1849
        # adding linked items that belong to host records
1850
        if ( C4::Context->preference('EasyAnalyticalRecords') ) {
1851
            my $analyticsfield = '773';
1852
            if ($marcflavor eq 'MARC21' || $marcflavor eq 'NORMARC') {
1853
                $analyticsfield = '773';
1854
            } elsif ($marcflavor eq 'UNIMARC') {
1855
                $analyticsfield = '461';
1856
            }
1857
            foreach my $hostfield ( $marcrecord->field($analyticsfield)) {
1858
                my $hostbiblionumber = $hostfield->subfield("0");
1859
                my $linkeditemnumber = $hostfield->subfield("9");
1860
                if( $hostbiblionumber ) {
1861
                    my $linkeditemmarc = C4::Items::GetMarcItem( $hostbiblionumber, $linkeditemnumber );
1862
                    if ($linkeditemmarc) {
1863
                        my $linkeditemfield = $linkeditemmarc->field($itemtag);
1864
                        if ($linkeditemfield) {
1865
                            push( @fields, $linkeditemfield );
1866
                        }
1867
                    }
1868
                }
1869
            }
1870
        }
1871
1872
        # Setting item statuses for display
1849
        # Setting item statuses for display
1873
        my @available_items_loop;
1850
        my @available_items_loop;
1874
        my @onloan_items_loop;
1851
        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