|
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 |
|