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);
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $DEBUG);
&GetNormalizedOCLCNumber
&xml_escape
+ &GetVariationsOfISBN
+ &GetVariationsOfISBNs
+ &NormalizeISBN
+
$DEBUG
);
$DEBUG = 0;
sub GetSupportList{
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes");
- if (!$advanced_search_types or $advanced_search_types eq 'itemtypes') {
+ if (!$advanced_search_types or $advanced_search_types =~ /itemtypes/) {
my $query = qq|
SELECT *
FROM itemtypes
{
idx => 'location',
label => 'Location',
- tags => [ qw/ 995c / ],
+ tags => [ qw/ 995e / ],
}
];
- my $library_facet;
- unless ( C4::Context->preference("singleBranchMode") || GetBranchesCount() == 1 ) {
- $library_facet = {
- idx => 'branch',
- label => 'Libraries',
- tags => [ qw/ 995b / ],
- };
+ unless ( C4::Context->preference("singleBranchMode")
+ || GetBranchesCount() == 1 )
+ {
+ my $DisplayLibraryFacets = C4::Context->preference('DisplayLibraryFacets');
+ if ( $DisplayLibraryFacets eq 'both'
+ || $DisplayLibraryFacets eq 'holding' )
+ {
+ push(
+ @$facets,
+ {
+ idx => 'holdingbranch',
+ label => 'HoldingLibrary',
+ tags => [qw / 995b /],
+ }
+ );
+ }
+
+ if ( $DisplayLibraryFacets eq 'both'
+ || $DisplayLibraryFacets eq 'home' )
+ {
+ push(
+ @$facets,
+ {
+ idx => 'homebranch',
+ label => 'HomeLibrary',
+ tags => [qw / 995a /],
+ }
+ );
+ }
}
- push( @$facets, $library_facet );
}
else {
$facets = [
},
];
- my $library_facet;
- unless ( C4::Context->preference("singleBranchMode") || GetBranchesCount() == 1 ) {
- $library_facet = {
- idx => 'branch',
- label => 'Libraries',
- tags => [ qw / 952b / ],
- };
+ unless ( C4::Context->preference("singleBranchMode")
+ || GetBranchesCount() == 1 )
+ {
+ my $DisplayLibraryFacets = C4::Context->preference('DisplayLibraryFacets');
+ if ( $DisplayLibraryFacets eq 'both'
+ || $DisplayLibraryFacets eq 'holding' )
+ {
+ push(
+ @$facets,
+ {
+ idx => 'holdingbranch',
+ label => 'HoldingLibrary',
+ tags => [qw / 952b /],
+ }
+ );
+ }
+
+ if ( $DisplayLibraryFacets eq 'both'
+ || $DisplayLibraryFacets eq 'home' )
+ {
+ push(
+ @$facets,
+ {
+ idx => 'homebranch',
+ label => 'HomeLibrary',
+ tags => [qw / 952a /],
+ }
+ );
+ }
}
- push( @$facets, $library_facet );
}
return $facets;
}
}
}
+sub GetAuthvalueDropbox {
+ my ( $authcat, $default ) = @_;
+ my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
+ my $dbh = C4::Context->dbh;
+
+ my $query = qq{
+ SELECT *
+ FROM authorised_values
+ };
+ $query .= qq{
+ LEFT JOIN authorised_values_branches ON ( id = av_id )
+ } if $branch_limit;
+ $query .= qq{
+ WHERE category = ?
+ };
+ $query .= " AND ( branchcode = ? OR branchcode IS NULL )" if $branch_limit;
+ $query .= " GROUP BY lib ORDER BY category, lib, lib_opac";
+ my $sth = $dbh->prepare($query);
+ $sth->execute( $authcat, $branch_limit ? $branch_limit : () );
+
+
+ my $option_list = [];
+ my @authorised_values = ( q{} );
+ while (my $av = $sth->fetchrow_hashref) {
+ push @{$option_list}, {
+ value => $av->{authorised_value},
+ label => $av->{lib},
+ default => ($default eq $av->{authorised_value}),
+ };
+ }
+
+ if ( @{$option_list} ) {
+ return $option_list;
+ }
+ return;
+}
+
+
=head2 GetDailyQuote($opts)
Takes a hashref of options
$sth = C4::Context->dbh->prepare('SELECT count(*) FROM quotes;');
$sth->execute;
my $range = ($sth->fetchrow_array)[0];
- if ($range > 1) {
- # chose a random id within that range if there is more than one quote
- my $id = int(rand($range));
- # grab it
- $query = 'SELECT * FROM quotes WHERE id = ?;';
- $sth = C4::Context->dbh->prepare($query);
- $sth->execute($id);
- }
- else {
- $query = 'SELECT * FROM quotes;';
- $sth = C4::Context->dbh->prepare($query);
- $sth->execute();
- }
+ # chose a random id within that range if there is more than one quote
+ my $offset = int(rand($range));
+ # grab it
+ $query = 'SELECT * FROM quotes ORDER BY id LIMIT 1 OFFSET ?';
+ $sth = C4::Context->dbh->prepare($query);
+ # see http://www.perlmonks.org/?node_id=837422 for why
+ # we're being verbose and using bind_param
+ $sth->bind_param(1, $offset, SQL_INTEGER);
+ $sth->execute();
$quote = $sth->fetchrow_hashref();
# update the timestamp for that quote
$query = 'UPDATE quotes SET timestamp = ? WHERE id = ?';
}
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 Log( $message );
+=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
- Writes data to /tmp/koha.log.
+ my @isbns = GetVariationsOfISBNs( @isbns );
- This is useful for debugging forked processes
- that do not write to the apache error log
+ 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 Log {
- my ($data) = @_;
- warn $data;
- open my $fh, '>>/tmp/koha.log';
- print $fh "$data\n";
- close $fh;
+sub GetVariationsOfISBNs {
+ my (@isbns) = @_;
+
+ @isbns = map { GetVariationsOfISBN( $_ ) } @isbns;
+
+ return wantarray ? @isbns : join( " | ", @isbns );
}
+
1;
__END__