use Koha::DateUtils qw(dt_from_string);
use Memoize;
use DateTime::Format::MySQL;
+use Business::ISBN;
use autouse 'Data::Dumper' => qw(Dumper);
use DBI qw(:sql_types);
&GetNormalizedOCLCNumber
&xml_escape
+ &GetVariationsOfISBN
+ &GetVariationsOfISBNs
+ &NormalizeISBN
+
$DEBUG
);
$DEBUG = 0;
}
sub _isbn_cleanup {
- require Business::ISBN;
- my $isbn = Business::ISBN->new( $_[0] );
- if ( $isbn ) {
- $isbn = $isbn->as_isbn10 if $isbn->type eq 'ISBN13';
- if (defined $isbn) {
- return $isbn->as_string([]);
+ my ($isbn) = @_;
+ return NormalizeISBN(
+ {
+ isbn => $isbn,
+ format => 'ISBN-10',
+ strip_hyphens => 1,
+ }
+ ) if $isbn;
+}
+
+=head2 NormalizedISBN
+
+ my $isbns = NormalizedISBN({
+ isbn => $isbn,
+ strip_hyphens => [0,1],
+ format => ['ISBN-10', 'ISBN-13']
+ });
+
+ Returns an isbn validated by Business::ISBN.
+ Optionally strips hyphens and/or forces the isbn
+ to be of the specified format.
+
+ If the string cannot be validated as an isbn,
+ it returns nothing.
+
+=cut
+
+sub NormalizeISBN {
+ my ($params) = @_;
+
+ my $string = $params->{isbn};
+ my $strip_hyphens = $params->{strip_hyphens};
+ my $format = $params->{format};
+
+ return unless $string;
+
+ my $isbn = Business::ISBN->new($string);
+
+ if ( $isbn && $isbn->is_valid() ) {
+
+ if ( $format eq 'ISBN-10' ) {
+ $isbn = $isbn->as_isbn10();
+ }
+ elsif ( $format eq 'ISBN-13' ) {
+ $isbn = $isbn->as_isbn13();
}
+
+ if ($strip_hyphens) {
+ $string = $isbn->as_string( [] );
+ } else {
+ $string = $isbn->as_string();
+ }
+
+ return $string;
}
- return;
+}
+
+=head2 GetVariationsOfISBN
+
+ my @isbns = GetVariationsOfISBN( $isbn );
+
+ Returns a list of varations of the given isbn in
+ both ISBN-10 and ISBN-13 formats, with and without
+ hyphens.
+
+ In a scalar context, the isbns are returned as a
+ string delimited by ' | '.
+
+=cut
+
+sub GetVariationsOfISBN {
+ my ($isbn) = @_;
+
+ return unless $isbn;
+
+ my @isbns;
+
+ push( @isbns, NormalizeISBN({ isbn => $isbn }) );
+ push( @isbns, NormalizeISBN({ isbn => $isbn, format => 'ISBN-10' }) );
+ push( @isbns, NormalizeISBN({ isbn => $isbn, format => 'ISBN-13' }) );
+ push( @isbns, NormalizeISBN({ isbn => $isbn, format => 'ISBN-10', strip_hyphens => 1 }) );
+ push( @isbns, NormalizeISBN({ isbn => $isbn, format => 'ISBN-13', strip_hyphens => 1 }) );
+
+ # Strip out any "empty" strings from the array
+ @isbns = grep { defined($_) && $_ =~ /\S/ } @isbns;
+
+ return wantarray ? @isbns : join( " | ", @isbns );
+}
+
+=head2 GetVariationsOfISBNs
+
+ my @isbns = GetVariationsOfISBNs( @isbns );
+
+ Returns a list of varations of the given isbns in
+ both ISBN-10 and ISBN-13 formats, with and without
+ hyphens.
+
+ In a scalar context, the isbns are returned as a
+ string delimited by ' | '.
+
+=cut
+
+sub GetVariationsOfISBNs {
+ my (@isbns) = @_;
+
+ @isbns = map { GetVariationsOfISBN( $_ ) } @isbns;
+
+ return wantarray ? @isbns : join( " | ", @isbns );
}
1;