X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FKoha.pm;h=26106cf4181a08982d11d6b675fd6edd53e5062d;hb=37f3807442ce1136a57e6fec76648994ada7a5cb;hp=789f674efbf2169ced000d3bd80ba81ff6e17774;hpb=d831a03fdefc56b5462df08cbe626887291c01c8;p=koha.git diff --git a/C4/Koha.pm b/C4/Koha.pm index 789f674efb..26106cf418 100644 --- a/C4/Koha.pm +++ b/C4/Koha.pm @@ -22,16 +22,18 @@ package C4::Koha; use strict; #use warnings; FIXME - Bug 2505 + use C4::Context; -use C4::Output; -use URI::Split qw(uri_split); + use Memoize; -use Business::ISBN; +use DateTime; +use DateTime::Format::MySQL; +use autouse 'Data::Dumper' => qw(Dumper); -use vars qw($VERSION @ISA @EXPORT $DEBUG); +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $DEBUG); BEGIN { - $VERSION = 3.01; + $VERSION = 3.07.00.049; require Exporter; @ISA = qw(Exporter); @EXPORT = qw( @@ -70,6 +72,7 @@ BEGIN { $DEBUG ); $DEBUG = 0; +@EXPORT_OK = qw( GetDailyQuote ); } # expensive functions @@ -455,7 +458,7 @@ sub getitemtypeimagedir { if ($src eq 'intranet') { return C4::Context->config('intrahtdocs') . '/' .C4::Context->preference('template') . '/img/itemtypeimg'; } else { - return C4::Context->config('opachtdocs') . '/' . C4::Context->preference('template') . '/itemtypeimg'; + return C4::Context->config('opachtdocs') . '/' . C4::Context->preference('opacthemes') . '/itemtypeimg'; } } @@ -464,7 +467,7 @@ sub getitemtypeimagesrc { if ($src eq 'intranet') { return '/intranet-tmpl' . '/' . C4::Context->preference('template') . '/img/itemtypeimg'; } else { - return '/opac-tmpl' . '/' . C4::Context->preference('template') . '/itemtypeimg'; + return '/opac-tmpl' . '/' . C4::Context->preference('opacthemes') . '/itemtypeimg'; } } @@ -472,8 +475,9 @@ sub getitemtypeimagelocation($$) { my ( $src, $image ) = @_; return '' if ( !$image ); + require URI::Split; - my $scheme = ( uri_split( $image ) )[0]; + my $scheme = ( URI::Split::uri_split( $image ) )[0]; return $image if ( $scheme ); @@ -670,6 +674,7 @@ sub getallthemes { opendir D, "$htdocs"; my @dirlist = readdir D; foreach my $directory (@dirlist) { + next if $directory eq 'lib'; -d "$htdocs/$directory/en" and push @themes, $directory; } return @themes; @@ -680,95 +685,95 @@ sub getFacets { if ( C4::Context->preference("marcflavour") eq "UNIMARC" ) { $facets = [ { - link_value => 'su-to', - label_value => 'Topics', - tags => - [ '600', '601', '602', '603', '604', '605', '606', '610' ], - subfield => 'a', + idx => 'su-to', + label => 'Topics', + tags => [ qw/ 600a 601a 602a 603a 604a 605a 606ax 610a/ ], + sep => ' - ', }, { - link_value => 'su-geo', - label_value => 'Places', - tags => ['651'], - subfield => 'a', + idx => 'su-geo', + label => 'Places', + tags => [ qw/ 651a / ], + sep => ' - ', }, { - link_value => 'su-ut', - label_value => 'Titles', - tags => [ '500', '501', '502', '503', '504', ], - subfield => 'a', + idx => 'su-ut', + label => 'Titles', + tags => [ qw/ 500a 501a 502a 503a 504a / ], + sep => ', ', }, { - link_value => 'au', - label_value => 'Authors', - tags => [ '700', '701', '702', ], - subfield => 'a', + idx => 'au', + label => 'Authors', + tags => [ qw/ 700ab 701ab 702ab / ], + sep => ', ', }, { - link_value => 'se', - label_value => 'Series', - tags => ['225'], - subfield => 'a', + idx => 'se', + label => 'Series', + tags => [ qw/ 225a / ], + sep => ', ', }, - ]; - - my $library_facet; - - $library_facet = { - link_value => 'branch', - label_value => 'Libraries', - tags => [ '995', ], - subfield => 'b', - expanded => '1', - }; - push @$facets, $library_facet unless C4::Context->preference("singleBranchMode"); + ]; + my $library_facet = { + idx => 'branch', + label => 'Libraries', + tags => [ qw/ 995b / ], + expanded => '1', + }; + push @$facets, $library_facet unless C4::Context->preference("singleBranchMode"); } else { $facets = [ { - link_value => 'su-to', - label_value => 'Topics', - tags => ['650'], - subfield => 'a', + idx => 'su-to', + label => 'Topics', + tags => [ qw/ 650a / ], + sep => '--', }, - # { - # link_value => 'su-na', - # label_value => 'People and Organizations', - # tags => ['600', '610', '611'], - # subfield => 'a', + # idx => 'su-na', + # label => 'People and Organizations', + # tags => [ qw/ 600a 610a 611a / ], + # sep => 'a', # }, { - link_value => 'su-geo', - label_value => 'Places', - tags => ['651'], - subfield => 'a', + idx => 'su-geo', + label => 'Places', + tags => [ qw/ 651a / ], + sep => '--', + }, + { + idx => 'su-ut', + label => 'Titles', + tags => [ qw/ 630a / ], + sep => '--', }, { - link_value => 'su-ut', - label_value => 'Titles', - tags => ['630'], - subfield => 'a', + idx => 'au', + label => 'Authors', + tags => [ qw/ 100a 110a 700a / ], + sep => ', ', }, { - link_value => 'au', - label_value => 'Authors', - tags => [ '100', '110', '700', ], - subfield => 'a', + idx => 'se', + label => 'Series', + tags => [ qw/ 440a 490a / ], + sep => ', ', }, { - link_value => 'se', - label_value => 'Series', - tags => [ '440', '490', ], - subfield => 'a', + idx => 'itype', + label => 'ItemTypes', + tags => [ qw/ 952y 942c / ], + sep => ', ', }, ]; my $library_facet; $library_facet = { - link_value => 'branch', - label_value => 'Libraries', - tags => [ '952', ], - subfield => 'b', + idx => 'branch', + label => 'Libraries', + tags => [ qw/ 952b / ], + sep => ', ', expanded => '1', }; push @$facets, $library_facet unless C4::Context->preference("singleBranchMode"); @@ -1016,22 +1021,25 @@ C<$opac> If set to a true value, displays OPAC descriptions rather than normal o sub GetAuthorisedValues { my ($category,$selected,$opac) = @_; - my @results; + my @results; my $dbh = C4::Context->dbh; my $query = "SELECT * FROM authorised_values"; $query .= " WHERE category = '" . $category . "'" if $category; $query .= " ORDER BY category, lib, lib_opac"; my $sth = $dbh->prepare($query); $sth->execute; - while (my $data=$sth->fetchrow_hashref) { - if ($selected && $selected eq $data->{'authorised_value'} ) { - $data->{'selected'} = 1; - } - if ($opac && $data->{'lib_opac'}) { - $data->{'lib'} = $data->{'lib_opac'}; - } - push @results, $data; - } + while (my $data=$sth->fetchrow_hashref) { + if ( (defined($selected)) && ($selected eq $data->{'authorised_value'}) ) { + $data->{'selected'} = 1; + } + else { + $data->{'selected'} = 0; + } + if ($opac && $data->{'lib_opac'}) { + $data->{'lib'} = $data->{'lib_opac'}; + } + push @results, $data; + } #my $data = $sth->fetchall_arrayref({}); return \@results; #$data; } @@ -1225,7 +1233,7 @@ sub GetNormalizedUPC { } # Normalizes and returns the first valid ISBN found in the record -# ISBN13 are converted into ISBN10. This is required to get Amazon cover book. +# ISBN13 are converted into ISBN10. This is required to get some book cover images. sub GetNormalizedISBN { my ($isbn,$record,$marcflavour) = @_; my @fields; @@ -1306,6 +1314,78 @@ sub GetNormalizedOCLCNumber { } } +=head2 GetDailyQuote($opts) + +Takes a hashref of options + +Currently supported options are: + +'id' An exact quote id +'random' Select a random quote +noop When no option is passed in, this sub will return the quote timestamped for the current day + +The function returns an anonymous hash following this format: + + { + 'source' => 'source-of-quote', + 'timestamp' => 'timestamp-value', + 'text' => 'text-of-quote', + 'id' => 'quote-id' + }; + +=cut + +# This is definitely a candidate for some sort of caching once we finally settle caching/persistence issues... +# at least for default option + +sub GetDailyQuote { + my %opts = @_; + my $dbh = C4::Context->dbh; + my $query = ''; + my $sth = undef; + my $quote = undef; + if ($opts{'id'}) { + $query = 'SELECT * FROM quotes WHERE id = ?'; + $sth = $dbh->prepare($query); + $sth->execute($opts{'id'}); + $quote = $sth->fetchrow_hashref(); + } + elsif ($opts{'random'}) { + # Fall through... we also return a random quote as a catch-all if all else fails + } + else { + $query = 'SELECT * FROM quotes WHERE timestamp LIKE CONCAT(CURRENT_DATE,\'%\') ORDER BY timestamp DESC LIMIT 0,1'; + $sth = $dbh->prepare($query); + $sth->execute(); + $quote = $sth->fetchrow_hashref(); + } + unless ($quote) { # if there are not matches, choose a random quote + # get a list of all available quote ids + $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(); + } + $quote = $sth->fetchrow_hashref(); + # update the timestamp for that quote + $query = 'UPDATE quotes SET timestamp = ? WHERE id = ?'; + $sth = C4::Context->dbh->prepare($query); + $sth->execute(DateTime::Format::MySQL->format_datetime(DateTime->now), $quote->{'id'}); + } + return $quote; +} + sub _normalize_match_point { my $match_point = shift; (my $normalized_match_point) = $match_point =~ /([\d-]*[X]*)/; @@ -1315,6 +1395,7 @@ sub _normalize_match_point { } sub _isbn_cleanup { + require Business::ISBN; my $isbn = Business::ISBN->new( $_[0] ); if ( $isbn ) { $isbn = $isbn->as_isbn10 if $isbn->type eq 'ISBN13';