Lines 1582-1587
sub normalized_oclc {
Link Here
|
1582 |
return $self->metadata_extractor->get_normalized_oclc; |
1582 |
return $self->metadata_extractor->get_normalized_oclc; |
1583 |
} |
1583 |
} |
1584 |
|
1584 |
|
|
|
1585 |
=head3 get_marc_subjects |
1586 |
|
1587 |
$marcsubjcts = $biblio->get_marc_subjects; |
1588 |
|
1589 |
Get all subjects from the MARC record and returns them in an array. |
1590 |
The subjects are stored in different fields depending on MARC flavour |
1591 |
|
1592 |
=cut |
1593 |
|
1594 |
sub get_marc_subjects { |
1595 |
my ( $self, $params ) = @_; |
1596 |
my ( $mintag, $maxtag, $fields_filter ); |
1597 |
|
1598 |
my $marcflavour = C4::Context->preference('marcflavour'); |
1599 |
if ( $marcflavour eq "UNIMARC" ) { |
1600 |
$mintag = "600"; |
1601 |
$maxtag = "611"; |
1602 |
$fields_filter = '6..'; |
1603 |
} else { # marc21/normarc |
1604 |
$mintag = "600"; |
1605 |
$maxtag = "699"; |
1606 |
$fields_filter = '6..'; |
1607 |
} |
1608 |
|
1609 |
my @marcsubjects; |
1610 |
|
1611 |
my $subject_limit = C4::Context->preference("TraceCompleteSubfields") ? 'su,complete-subfield' : 'su'; |
1612 |
my $AuthoritySeparator = C4::Context->preference('AuthoritySeparator'); |
1613 |
|
1614 |
foreach my $field ( $self->metadata->record->field($fields_filter) ) { |
1615 |
next unless ($field->tag() >= $mintag && $field->tag() <= $maxtag); |
1616 |
my @subfields_loop; |
1617 |
my @subfields = $field->subfields(); |
1618 |
my @link_loop; |
1619 |
|
1620 |
# if there is an authority link, build the links with an= subfield9 |
1621 |
my $subfield9 = $field->subfield('9'); |
1622 |
my $authoritylink; |
1623 |
if ($subfield9) { |
1624 |
my $linkvalue = $subfield9; |
1625 |
$linkvalue =~ s/(\(|\))//g; |
1626 |
@link_loop = ( { limit => 'an', 'link' => $linkvalue } ); |
1627 |
$authoritylink = $linkvalue |
1628 |
} |
1629 |
|
1630 |
# other subfields |
1631 |
for my $subject_subfield (@subfields) { |
1632 |
next if ( $subject_subfield->[0] eq '9' ); |
1633 |
|
1634 |
# don't load unimarc subfields 3,4,5 |
1635 |
next if ( ( $marcflavour eq "UNIMARC" ) and ( $subject_subfield->[0] =~ /2|3|4|5/ ) ); |
1636 |
# don't load MARC21 subfields 2 (FIXME: any more subfields??) |
1637 |
next if ( ( $marcflavour eq "MARC21" ) and ( $subject_subfield->[0] =~ /2/ ) ); |
1638 |
|
1639 |
my $code = $subject_subfield->[0]; |
1640 |
my $value = $subject_subfield->[1]; |
1641 |
my $linkvalue = $value; |
1642 |
$linkvalue =~ s/(\(|\))//g; |
1643 |
# if no authority link, build a search query |
1644 |
unless ($subfield9) { |
1645 |
push @link_loop, { |
1646 |
limit => $subject_limit, |
1647 |
'link' => $linkvalue, |
1648 |
operator => (scalar @link_loop) ? ' and ' : undef |
1649 |
}; |
1650 |
} |
1651 |
my @this_link_loop = @link_loop; |
1652 |
# do not display $0 |
1653 |
unless ( $code eq '0') { |
1654 |
push @subfields_loop, { |
1655 |
tag => $field->tag(), |
1656 |
code => $code, |
1657 |
value => $value, |
1658 |
link_loop => \@this_link_loop, |
1659 |
separator => (scalar @subfields_loop) ? $AuthoritySeparator : '' |
1660 |
}; |
1661 |
} |
1662 |
} |
1663 |
|
1664 |
push @marcsubjects, { |
1665 |
MARCSUBJECT_SUBFIELDS_LOOP => \@subfields_loop, |
1666 |
authoritylink => $authoritylink, |
1667 |
} if $authoritylink || @subfields_loop; |
1668 |
|
1669 |
} |
1670 |
return \@marcsubjects; |
1671 |
} |
1672 |
|
1585 |
=head3 to_api |
1673 |
=head3 to_api |
1586 |
|
1674 |
|
1587 |
my $json = $biblio->to_api; |
1675 |
my $json = $biblio->to_api; |