Lines 29-34
use MARC::File::USMARC;
Link Here
|
29 |
use MARC::File::XML; |
29 |
use MARC::File::XML; |
30 |
use POSIX qw(strftime); |
30 |
use POSIX qw(strftime); |
31 |
use Module::Load::Conditional qw(can_load); |
31 |
use Module::Load::Conditional qw(can_load); |
|
|
32 |
use Business::ISBN; |
32 |
|
33 |
|
33 |
use C4::Koha; |
34 |
use C4::Koha; |
34 |
use C4::Dates qw/format_date/; |
35 |
use C4::Dates qw/format_date/; |
Lines 73-78
BEGIN {
Link Here
|
73 |
&GetMarcControlnumber |
74 |
&GetMarcControlnumber |
74 |
&GetMarcNotes |
75 |
&GetMarcNotes |
75 |
&GetMarcISBN |
76 |
&GetMarcISBN |
|
|
77 |
&GetVariationsOfISBNs |
78 |
&GetVariationsOfISBN |
79 |
&GetNormalizedISBNsFromMarc |
80 |
&NormalizeISBN |
76 |
&GetMarcISSN |
81 |
&GetMarcISSN |
77 |
&GetMarcSubjects |
82 |
&GetMarcSubjects |
78 |
&GetMarcBiblio |
83 |
&GetMarcBiblio |
Lines 1663-1668
sub GetMarcISBN {
Link Here
|
1663 |
} # end GetMarcISBN |
1668 |
} # end GetMarcISBN |
1664 |
|
1669 |
|
1665 |
|
1670 |
|
|
|
1671 |
=head2 GetNormalizedISBNsFromMarc |
1672 |
|
1673 |
my @isbns = GetNormalizedISBNsFromMarc( $record ); |
1674 |
|
1675 |
Returns a list of normalized ISBNs from a given record |
1676 |
or, in a scalar context, returns a string of normalized |
1677 |
isbns separated by ' | ' |
1678 |
|
1679 |
=cut |
1680 |
|
1681 |
sub GetNormalizedISBNsFromMarc { |
1682 |
my ($record) = @_; |
1683 |
my ( $marc_field, $marc_subfield ) = |
1684 |
GetMarcFromKohaField('biblioitems.isbn'); |
1685 |
|
1686 |
my @isbns; |
1687 |
foreach my $subfield ( $record->field( $marc_field, $marc_subfield ) ) { |
1688 |
my $isbn = NormalizeISBN( { isbn => $subfield->as_string } ); |
1689 |
push( @isbns, $isbn ) if ($isbn); |
1690 |
} |
1691 |
|
1692 |
# remove duplicate isbns |
1693 |
@isbns = keys %{ { map { $_ => 1 } @isbns } }; |
1694 |
|
1695 |
return wantarray ? @isbns : join( " | ", @isbns ); |
1696 |
} |
1697 |
|
1698 |
|
1699 |
=head2 GetVariationsOfISBN |
1700 |
|
1701 |
my @isbns = GetVariationsOfISBN( $isbn ); |
1702 |
|
1703 |
Returns a list of varations of the given isbn in |
1704 |
both ISBN-10 and ISBN-13 formats, with and without |
1705 |
hyphens. |
1706 |
|
1707 |
In a scalar context, the isbns are returned as a |
1708 |
string delimited by ' | '. |
1709 |
|
1710 |
=cut |
1711 |
|
1712 |
sub GetVariationsOfISBN { |
1713 |
my ($isbn) = @_; |
1714 |
|
1715 |
my @isbns; |
1716 |
|
1717 |
push( @isbns, NormalizeISBN({ isbn => $isbn }) ); |
1718 |
push( @isbns, NormalizeISBN({ isbn => $isbn, format => 'ISBN-10' }) ); |
1719 |
push( @isbns, NormalizeISBN({ isbn => $isbn, format => 'ISBN-13' }) ); |
1720 |
push( @isbns, NormalizeISBN({ isbn => $isbn, format => 'ISBN-10', strip_hyphens => 1 }) ); |
1721 |
push( @isbns, NormalizeISBN({ isbn => $isbn, format => 'ISBN-13', strip_hyphens => 1 }) ); |
1722 |
|
1723 |
return wantarray ? @isbns : join( " | ", @isbns ); |
1724 |
} |
1725 |
|
1726 |
=head2 GetVariationsOfISBNs |
1727 |
|
1728 |
my @isbns = GetVariationsOfISBNs( @isbns ); |
1729 |
|
1730 |
Returns a list of varations of the given isbns in |
1731 |
both ISBN-10 and ISBN-13 formats, with and without |
1732 |
hyphens. |
1733 |
|
1734 |
In a scalar context, the isbns are returned as a |
1735 |
string delimited by ' | '. |
1736 |
|
1737 |
=cut |
1738 |
|
1739 |
sub GetVariationsOfISBNs { |
1740 |
my (@isbns) = @_; |
1741 |
|
1742 |
@isbns = map { GetVariationsOfISBN( $_ ) } @isbns; |
1743 |
|
1744 |
# remove duplicate isbns |
1745 |
@isbns = keys %{ { map { $_ => 1 } @isbns } }; |
1746 |
|
1747 |
return wantarray ? @isbns : join( " | ", @isbns ); |
1748 |
} |
1749 |
|
1750 |
=head2 NormalizedISBN |
1751 |
|
1752 |
my $isbns = NormalizedISBN({ |
1753 |
isbn => $isbn, |
1754 |
strip_hyphens => [0,1], |
1755 |
format => ['ISBN-10', 'ISBN-13'] |
1756 |
}); |
1757 |
|
1758 |
Returns an isbn validated by Business::ISBN. |
1759 |
Optionally strips hyphens and/or forces the isbn |
1760 |
to be of the specified format. |
1761 |
|
1762 |
If the string cannot be validated as an isbn, |
1763 |
it returns nothing. |
1764 |
|
1765 |
=cut |
1766 |
|
1767 |
sub NormalizeISBN { |
1768 |
my ($params) = @_; |
1769 |
|
1770 |
my $string = $params->{isbn}; |
1771 |
my $strip_hyphens = $params->{strip_hyphens}; |
1772 |
my $format = $params->{format}; |
1773 |
|
1774 |
my $isbn = Business::ISBN->new($string); |
1775 |
|
1776 |
if ( $isbn && $isbn->error != Business::ISBN::BAD_ISBN ) { |
1777 |
|
1778 |
if ( $format eq 'ISBN-10' ) { |
1779 |
$isbn = $isbn->as_isbn10(); |
1780 |
} |
1781 |
elsif ( $format eq 'ISBN-13' ) { |
1782 |
$isbn = $isbn->as_isbn13(); |
1783 |
} |
1784 |
|
1785 |
if ($strip_hyphens) { |
1786 |
$string = $isbn->as_string( [] ); |
1787 |
} else { |
1788 |
$string = $isbn->as_string(); |
1789 |
} |
1790 |
|
1791 |
return $string; |
1792 |
} |
1793 |
} |
1794 |
|
1666 |
=head2 GetMarcISSN |
1795 |
=head2 GetMarcISSN |
1667 |
|
1796 |
|
1668 |
$marcissnsarray = GetMarcISSN( $record, $marcflavour ); |
1797 |
$marcissnsarray = GetMarcISSN( $record, $marcflavour ); |
Lines 2569-2574
sub TransformMarcToKoha {
Link Here
|
2569 |
} |
2698 |
} |
2570 |
} |
2699 |
} |
2571 |
|
2700 |
|
|
|
2701 |
$result->{'isbn'} = GetNormalizedISBNsFromMarc( $record ); |
2702 |
|
2572 |
return $result; |
2703 |
return $result; |
2573 |
} |
2704 |
} |
2574 |
|
2705 |
|