Lines 1249-1266
sub GetMarcSubfieldStructureFromKohaField {
Link Here
|
1249 |
|
1249 |
|
1250 |
=head2 GetMarcBiblio |
1250 |
=head2 GetMarcBiblio |
1251 |
|
1251 |
|
1252 |
my $record = GetMarcBiblio($biblionumber, [$embeditems]); |
1252 |
my $record = GetMarcBiblio($biblionumber, [$embeditems], [$opac]); |
1253 |
|
1253 |
|
1254 |
Returns MARC::Record representing bib identified by |
1254 |
Returns MARC::Record representing a biblio record, or C<undef> if the |
1255 |
C<$biblionumber>. If no bib exists, returns undef. |
1255 |
biblionumber doesn't exist. |
1256 |
C<$embeditems>. If set to true, items data are included. |
1256 |
|
1257 |
The MARC record contains biblio data, and items data if $embeditems is set to true. |
1257 |
=over 4 |
|
|
1258 |
|
1259 |
=item C<$biblionumber> |
1260 |
|
1261 |
the biblionumber |
1262 |
|
1263 |
=item C<$embeditems> |
1264 |
|
1265 |
set to true to include item information. |
1266 |
|
1267 |
=item C<$opac> |
1268 |
|
1269 |
set to true to make the result suited for OPAC view. This causes things like |
1270 |
OpacHiddenItems to be applied. |
1271 |
|
1272 |
=back |
1258 |
|
1273 |
|
1259 |
=cut |
1274 |
=cut |
1260 |
|
1275 |
|
1261 |
sub GetMarcBiblio { |
1276 |
sub GetMarcBiblio { |
1262 |
my $biblionumber = shift; |
1277 |
my $biblionumber = shift; |
1263 |
my $embeditems = shift || 0; |
1278 |
my $embeditems = shift || 0; |
|
|
1279 |
my $opac = shift || 0; |
1264 |
my $dbh = C4::Context->dbh; |
1280 |
my $dbh = C4::Context->dbh; |
1265 |
my $sth = $dbh->prepare("SELECT marcxml FROM biblioitems WHERE biblionumber=? "); |
1281 |
my $sth = $dbh->prepare("SELECT marcxml FROM biblioitems WHERE biblionumber=? "); |
1266 |
$sth->execute($biblionumber); |
1282 |
$sth->execute($biblionumber); |
Lines 1270-1284
sub GetMarcBiblio {
Link Here
|
1270 |
my $record = MARC::Record->new(); |
1286 |
my $record = MARC::Record->new(); |
1271 |
|
1287 |
|
1272 |
if ($marcxml) { |
1288 |
if ($marcxml) { |
1273 |
$record = eval { MARC::Record::new_from_xml( $marcxml, "utf8", C4::Context->preference('marcflavour') ) }; |
1289 |
$record = eval { |
|
|
1290 |
MARC::Record::new_from_xml( $marcxml, "utf8", |
1291 |
C4::Context->preference('marcflavour') ); |
1292 |
}; |
1274 |
if ($@) { warn " problem with :$biblionumber : $@ \n$marcxml"; } |
1293 |
if ($@) { warn " problem with :$biblionumber : $@ \n$marcxml"; } |
1275 |
return unless $record; |
1294 |
return unless $record; |
1276 |
|
1295 |
|
1277 |
C4::Biblio::_koha_marc_update_bib_ids($record, '', $biblionumber, $biblionumber); |
1296 |
C4::Biblio::_koha_marc_update_bib_ids( $record, '', $biblionumber, |
1278 |
C4::Biblio::EmbedItemsInMarcBiblio($record, $biblionumber) if ($embeditems); |
1297 |
$biblionumber ); |
|
|
1298 |
C4::Biblio::EmbedItemsInMarcBiblio( $record, $biblionumber, undef, $opac ) |
1299 |
if ($embeditems); |
1279 |
|
1300 |
|
1280 |
return $record; |
1301 |
return $record; |
1281 |
} else { |
1302 |
} |
|
|
1303 |
else { |
1282 |
return; |
1304 |
return; |
1283 |
} |
1305 |
} |
1284 |
} |
1306 |
} |
Lines 2876-2892
sub ModZebra {
Link Here
|
2876 |
|
2898 |
|
2877 |
=head2 EmbedItemsInMarcBiblio |
2899 |
=head2 EmbedItemsInMarcBiblio |
2878 |
|
2900 |
|
2879 |
EmbedItemsInMarcBiblio($marc, $biblionumber, $itemnumbers); |
2901 |
EmbedItemsInMarcBiblio($marc, $biblionumber, $itemnumbers, $opac); |
2880 |
|
2902 |
|
2881 |
Given a MARC::Record object containing a bib record, |
2903 |
Given a MARC::Record object containing a bib record, |
2882 |
modify it to include the items attached to it as 9XX |
2904 |
modify it to include the items attached to it as 9XX |
2883 |
per the bib's MARC framework. |
2905 |
per the bib's MARC framework. |
2884 |
if $itemnumbers is defined, only specified itemnumbers are embedded |
2906 |
if $itemnumbers is defined, only specified itemnumbers are embedded. |
|
|
2907 |
|
2908 |
If $opac is true, then opac-relevant suppressions are included. |
2885 |
|
2909 |
|
2886 |
=cut |
2910 |
=cut |
2887 |
|
2911 |
|
2888 |
sub EmbedItemsInMarcBiblio { |
2912 |
sub EmbedItemsInMarcBiblio { |
2889 |
my ($marc, $biblionumber, $itemnumbers) = @_; |
2913 |
my ($marc, $biblionumber, $itemnumbers, $opac) = @_; |
2890 |
if ( !$marc ) { |
2914 |
if ( !$marc ) { |
2891 |
carp 'EmbedItemsInMarcBiblio: No MARC record passed'; |
2915 |
carp 'EmbedItemsInMarcBiblio: No MARC record passed'; |
2892 |
return; |
2916 |
return; |
Lines 2903-2912
sub EmbedItemsInMarcBiblio {
Link Here
|
2903 |
$sth->execute($biblionumber); |
2927 |
$sth->execute($biblionumber); |
2904 |
my @item_fields; |
2928 |
my @item_fields; |
2905 |
my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode ); |
2929 |
my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode ); |
2906 |
while (my ($itemnumber) = $sth->fetchrow_array) { |
2930 |
my @items; |
|
|
2931 |
my $opachiddenitems = $opac |
2932 |
&& ( C4::Context->preference('OpacHiddenItems') !~ /^\s*$/ ); |
2933 |
require C4::Items; |
2934 |
while ( my ($itemnumber) = $sth->fetchrow_array ) { |
2907 |
next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers; |
2935 |
next if @$itemnumbers and not grep { $_ == $itemnumber } @$itemnumbers; |
2908 |
require C4::Items; |
2936 |
my $i = C4::Items::GetItem($itemnumber) if $opachiddenitems; |
2909 |
my $item_marc = C4::Items::GetMarcItem($biblionumber, $itemnumber); |
2937 |
push @items, { itemnumber => $itemnumber, item => $i }; |
|
|
2938 |
} |
2939 |
my @hiddenitems = |
2940 |
C4::Items::GetHiddenItemnumbers( map { $_->{item} } @items ) |
2941 |
if $opachiddenitems; |
2942 |
# Convert to a hash for quick searching |
2943 |
my %hiddenitems = map { $_ => 1 } @hiddenitems; |
2944 |
foreach my $itemnumber ( map { $_->{itemnumber} } @items ) { |
2945 |
next if $hiddenitems{$itemnumber}; |
2946 |
my $item_marc = C4::Items::GetMarcItem( $biblionumber, $itemnumber ); |
2910 |
push @item_fields, $item_marc->field($itemtag); |
2947 |
push @item_fields, $item_marc->field($itemtag); |
2911 |
} |
2948 |
} |
2912 |
$marc->append_fields(@item_fields); |
2949 |
$marc->append_fields(@item_fields); |