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

(-)a/C4/Biblio.pm (-4 / +18 lines)
Lines 1139-1145 sub GetMarcSubfieldStructureFromKohaField { Link Here
1139
  my $record = GetMarcBiblio({
1139
  my $record = GetMarcBiblio({
1140
      biblionumber => $biblionumber,
1140
      biblionumber => $biblionumber,
1141
      embed_items  => $embeditems,
1141
      embed_items  => $embeditems,
1142
      opac         => $opac });
1142
      opac         => $opac,
1143
      hostItemsInfo         => $hostItemsInfo });
1143
1144
1144
Returns MARC::Record representing a biblio record, or C<undef> if the
1145
Returns MARC::Record representing a biblio record, or C<undef> if the
1145
biblionumber doesn't exist.
1146
biblionumber doesn't exist.
Lines 1178-1183 sub GetMarcBiblio { Link Here
1178
    my $biblionumber = $params->{biblionumber};
1179
    my $biblionumber = $params->{biblionumber};
1179
    my $embeditems   = $params->{embed_items} || 0;
1180
    my $embeditems   = $params->{embed_items} || 0;
1180
    my $opac         = $params->{opac} || 0;
1181
    my $opac         = $params->{opac} || 0;
1182
    my $hostItemsInfo = $params->{hostItemsInfo} || 0;
1181
1183
1182
    if (not defined $biblionumber) {
1184
    if (not defined $biblionumber) {
1183
        carp 'GetMarcBiblio called with undefined biblionumber';
1185
        carp 'GetMarcBiblio called with undefined biblionumber';
Lines 1205-1211 sub GetMarcBiblio { Link Here
1205
1207
1206
        C4::Biblio::_koha_marc_update_bib_ids( $record, $frameworkcode, $biblionumber,
1208
        C4::Biblio::_koha_marc_update_bib_ids( $record, $frameworkcode, $biblionumber,
1207
            $biblioitemnumber );
1209
            $biblioitemnumber );
1208
        C4::Biblio::EmbedItemsInMarcBiblio( $record, $biblionumber, undef, $opac )
1210
        C4::Biblio::EmbedItemsInMarcBiblio( $record, $biblionumber, undef, $opac, $hostItemsInfo)
1209
          if ($embeditems);
1211
          if ($embeditems);
1210
1212
1211
        return $record;
1213
        return $record;
Lines 2923-2929 sub ModZebra { Link Here
2923
2925
2924
=head2 EmbedItemsInMarcBiblio
2926
=head2 EmbedItemsInMarcBiblio
2925
2927
2926
    EmbedItemsInMarcBiblio($marc, $biblionumber, $itemnumbers, $opac);
2928
    EmbedItemsInMarcBiblio($marc, $biblionumber, $itemnumbers, $opac, $hostItemsInfo);
2927
2929
2928
Given a MARC::Record object containing a bib record,
2930
Given a MARC::Record object containing a bib record,
2929
modify it to include the items attached to it as 9XX
2931
modify it to include the items attached to it as 9XX
Lines 2935-2945 If $opac is true, then opac-relevant suppressions are included. Link Here
2935
=cut
2937
=cut
2936
2938
2937
sub EmbedItemsInMarcBiblio {
2939
sub EmbedItemsInMarcBiblio {
2938
    my ($marc, $biblionumber, $itemnumbers, $opac) = @_;
2940
    my ($marc, $biblionumber, $itemnumbers, $opac, $hostItemsInfo) = @_;
2939
    if ( !$marc ) {
2941
    if ( !$marc ) {
2940
        carp 'EmbedItemsInMarcBiblio: No MARC record passed';
2942
        carp 'EmbedItemsInMarcBiblio: No MARC record passed';
2941
        return;
2943
        return;
2942
    }
2944
    }
2945
    
2943
2946
2944
    $itemnumbers = [] unless defined $itemnumbers;
2947
    $itemnumbers = [] unless defined $itemnumbers;
2945
2948
Lines 2961-2966 sub EmbedItemsInMarcBiblio { Link Here
2961
        my $i = $opachiddenitems ? C4::Items::GetItem($itemnumber) : undef;
2964
        my $i = $opachiddenitems ? C4::Items::GetItem($itemnumber) : undef;
2962
        push @items, { itemnumber => $itemnumber, item => $i };
2965
        push @items, { itemnumber => $itemnumber, item => $i };
2963
    }
2966
    }
2967
    
2968
    if ($hostItemsInfo){
2969
        my $record       = GetMarcBiblio({ biblionumber => $biblionumber });
2970
        my @hostitems = C4::Items::GetHostItem($record);
2971
        my $itemnumber = 0;
2972
        foreach my $item (@hostitems){
2973
             $itemnumber = $item->{itemnumber} if ($item);;
2974
             push @items, { itemnumber => $itemnumber, item => $item };
2975
        }
2976
    }
2977
    
2964
    my @hiddenitems =
2978
    my @hiddenitems =
2965
      $opachiddenitems
2979
      $opachiddenitems
2966
      ? C4::Items::GetHiddenItemnumbers( map { $_->{item} } @items )
2980
      ? C4::Items::GetHiddenItemnumbers( map { $_->{item} } @items )
(-)a/C4/Items.pm (-1 / +31 lines)
Lines 73-78 BEGIN { Link Here
73
        GetItemsInfo
73
        GetItemsInfo
74
	GetItemsLocationInfo
74
	GetItemsLocationInfo
75
	GetHostItemsInfo
75
	GetHostItemsInfo
76
	GetHostItem
76
        GetItemnumbersForBiblio
77
        GetItemnumbersForBiblio
77
	get_hostitemnumbers_of
78
	get_hostitemnumbers_of
78
        GetItemnumberFromBarcode
79
        GetItemnumberFromBarcode
Lines 1235-1240 sub GetHostItemsInfo { Link Here
1235
	return @returnitemsInfo;
1236
	return @returnitemsInfo;
1236
}
1237
}
1237
1238
1239
=head2 GetHostItem
1240
 
1241
	$hostiteminfo = GetHostItem($record);
1242
	Returns the item for items linked to records via a host field
1243
1244
=cut
1245
1246
sub GetHostItem {
1247
	my ($record) = @_;
1248
	my @returnitemsInfo;
1249
1250
	if (C4::Context->preference('marcflavour') eq 'MARC21' ||
1251
        C4::Context->preference('marcflavour') eq 'NORMARC'){
1252
	    foreach my $hostfield ( $record->field('773') ) {
1253
        	my $hostbiblionumber = $hostfield->subfield("0");
1254
	        my $linkeditemnumber = $hostfield->subfield("9");
1255
        	my $hostitem = GetItem($linkeditemnumber);
1256
        	push (@returnitemsInfo,$hostitem);
1257
	    }
1258
	} elsif ( C4::Context->preference('marcflavour') eq 'UNIMARC'){
1259
	    foreach my $hostfield ( $record->field('461') ) {
1260
        	my $hostbiblionumber = $hostfield->subfield("0");
1261
	        my $linkeditemnumber = $hostfield->subfield("9");
1262
        	my $hostitem = GetItem($linkeditemnumber);
1263
        	push (@returnitemsInfo,$hostitem);
1264
	    }
1265
	}
1266
	return @returnitemsInfo;
1267
}
1238
1268
1239
=head2 GetLastAcquisitions
1269
=head2 GetLastAcquisitions
1240
1270
Lines 1321-1327 references on array of itemnumbers. Link Here
1321
1351
1322
sub get_hostitemnumbers_of {
1352
sub get_hostitemnumbers_of {
1323
    my ($biblionumber) = @_;
1353
    my ($biblionumber) = @_;
1324
    my $marcrecord = C4::Biblio::GetMarcBiblio({ biblionumber => $biblionumber });
1354
    my $marcrecord = C4::Biblio::GetMarcBiblio($biblionumber);
1325
1355
1326
    return unless $marcrecord;
1356
    return unless $marcrecord;
1327
1357
(-)a/C4/Search.pm (-28 lines)
Lines 1997-2030 sub searchResults { Link Here
1997
        # Pull out the items fields
1997
        # Pull out the items fields
1998
        my @fields = $marcrecord->field($itemtag);
1998
        my @fields = $marcrecord->field($itemtag);
1999
        my $marcflavor = C4::Context->preference("marcflavour");
1999
        my $marcflavor = C4::Context->preference("marcflavour");
2000
        # adding linked items that belong to host records
2001
        my $analyticsfield = '773';
2002
        if ($marcflavor eq 'MARC21' || $marcflavor eq 'NORMARC') {
2003
            $analyticsfield = '773';
2004
        } elsif ($marcflavor eq 'UNIMARC') {
2005
            $analyticsfield = '461';
2006
        }
2007
        foreach my $hostfield ( $marcrecord->field($analyticsfield)) {
2008
            my $hostbiblionumber = $hostfield->subfield("0");
2009
            my $linkeditemnumber = $hostfield->subfield("9");
2010
            if(!$hostbiblionumber eq undef){
2011
                my $hostbiblio = GetMarcBiblio({
2012
                    biblionumber => $hostbiblionumber,
2013
                    embed_items  => 1 });
2014
                my ($itemfield, undef) = GetMarcFromKohaField( 'items.itemnumber', GetFrameworkCode($hostbiblionumber) );
2015
                if(!$hostbiblio eq undef){
2016
                    my @hostitems = $hostbiblio->field($itemfield);
2017
                    foreach my $hostitem (@hostitems){
2018
                        if ($hostitem->subfield("9") eq $linkeditemnumber){
2019
                            my $linkeditem =$hostitem;
2020
                            # append linked items if they exist
2021
                            if (!$linkeditem eq undef){
2022
                                push (@fields, $linkeditem);}
2023
                        }
2024
                    }
2025
                }
2026
            }
2027
        }
2028
2000
2029
        # Setting item statuses for display
2001
        # Setting item statuses for display
2030
        my @available_items_loop;
2002
        my @available_items_loop;
(-)a/C4/XSLT.pm (+10 lines)
Lines 273-278 sub buildKohaItemsNamespace { Link Here
273
        my %hi = map {$_ => 1} @$hidden_items;
273
        my %hi = map {$_ => 1} @$hidden_items;
274
        @items = grep { !$hi{$_->{itemnumber}} } @items;
274
        @items = grep { !$hi{$_->{itemnumber}} } @items;
275
    }
275
    }
276
    
277
    my $record       = C4::Biblio::GetMarcBiblio({ biblionumber => $biblionumber });
278
    my @hostitems = C4::Items::GetHostItemsInfo($record);
279
    if ($hidden_items && @$hidden_items) {
280
        my %hi = map {$_ => 1} @$hidden_items;
281
        @hostitems = grep { !$hi{$_->{itemnumber}} } @hostitems;
282
        push (@items, @hostitems);
283
    } else{
284
    	push (@items, @hostitems);
285
    }
276
286
277
    my $shelflocations =
287
    my $shelflocations =
278
      { map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => GetFrameworkCode($biblionumber), kohafield => 'items.location' } ) };
288
      { map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => GetFrameworkCode($biblionumber), kohafield => 'items.location' } ) };
(-)a/misc/migration_tools/rebuild_zebra.pl (-2 / +17 lines)
Lines 521-526 sub export_marc_records_from_sth { Link Here
521
                        substr($marcxml, 0, length($marcxml)-10) .
521
                        substr($marcxml, 0, length($marcxml)-10) .
522
                        substr($itemsxml, index($itemsxml, "</leader>\n", 0) + 10);
522
                        substr($itemsxml, index($itemsxml, "</leader>\n", 0) + 10);
523
                }
523
                }
524
                my $record       = GetMarcBiblio({ biblionumber => $record_number});
525
                my @hostitems = GetHostItemsInfo($record);
526
                if (@hostitems){
527
                   my $record = MARC::Record->new;
528
                   $record->encoding('UTF-8');
529
                   my @itemsrecord;
530
                   foreach my $item (@hostitems){
531
                       my $record = Item2Marc($item, $record_number);
532
                       push @itemsrecord, $record->field($itemtag);
533
                   }
534
                  $record->insert_fields_ordered(@itemsrecord);
535
                  my $itemsxml = $record->as_xml_record();
536
                  $marcxml =
537
                       substr($marcxml, 0, length($marcxml)-10) .
538
                       substr($itemsxml, index($itemsxml, "</leader>\n", 0) + 10);
539
              }
524
            }
540
            }
525
            # extra test to ensure that result is valid XML; otherwise
541
            # extra test to ensure that result is valid XML; otherwise
526
            # Zebra won't parse it in DOM mode
542
            # Zebra won't parse it in DOM mode
Lines 675-681 sub get_raw_marc_record { Link Here
675
691
676
    my $marc;
692
    my $marc;
677
    if ($record_type eq 'biblio') {
693
    if ($record_type eq 'biblio') {
678
        eval { $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $record_number, embed_items => 1 }); };
694
        eval { $marc = C4::Biblio::GetMarcBiblio({ biblionumber => $record_number, embed_items => 1, opac => 0, hostItemsInfo => 1 }); };
679
        if ($@ || !$marc) {
695
        if ($@ || !$marc) {
680
            # here we do warn since catching an exception
696
            # here we do warn since catching an exception
681
            # means that the bib was found but failed
697
            # means that the bib was found but failed
682
- 

Return to bug 19331