|
Lines 23-28
use DBI qw(:sql_types);
Link Here
|
| 23 |
use Koha::Database; |
23 |
use Koha::Database; |
| 24 |
use Koha::DateUtils qw(dt_from_string); |
24 |
use Koha::DateUtils qw(dt_from_string); |
| 25 |
use Koha::Exceptions::UnknownProgramState; |
25 |
use Koha::Exceptions::UnknownProgramState; |
|
|
26 |
use Koha::Quotes; |
| 26 |
|
27 |
|
| 27 |
use base qw(Koha::Object); |
28 |
use base qw(Koha::Object); |
| 28 |
|
29 |
|
|
Lines 46-60
Currently supported options are:
Link Here
|
| 46 |
'random' Select a random quote |
47 |
'random' Select a random quote |
| 47 |
noop When no option is passed in, this sub will return the quote timestamped for the current day |
48 |
noop When no option is passed in, this sub will return the quote timestamped for the current day |
| 48 |
|
49 |
|
| 49 |
The function returns an anonymous hash following this format: |
|
|
| 50 |
|
| 51 |
{ |
| 52 |
'source' => 'source-of-quote', |
| 53 |
'timestamp' => 'timestamp-value', |
| 54 |
'text' => 'text-of-quote', |
| 55 |
'id' => 'quote-id' |
| 56 |
}; |
| 57 |
|
| 58 |
=cut |
50 |
=cut |
| 59 |
|
51 |
|
| 60 |
# This is definitely a candidate for some sort of caching once we finally settle caching/persistence issues... |
52 |
# This is definitely a candidate for some sort of caching once we finally settle caching/persistence issues... |
|
Lines 62-108
The function returns an anonymous hash following this format:
Link Here
|
| 62 |
|
54 |
|
| 63 |
sub get_daily_quote { |
55 |
sub get_daily_quote { |
| 64 |
my ($self, %opts) = @_; |
56 |
my ($self, %opts) = @_; |
| 65 |
my $dbh = C4::Context->dbh; |
57 |
|
| 66 |
my $query = ''; |
|
|
| 67 |
my $sth = undef; |
| 68 |
my $quote = undef; |
58 |
my $quote = undef; |
|
|
59 |
my $parser = Koha::Database->new->schema->storage->datetime_parser; |
| 60 |
my $dt = $parser->format_datetime(dt_from_string); |
| 61 |
|
| 69 |
if ($opts{'id'}) { |
62 |
if ($opts{'id'}) { |
| 70 |
$query = 'SELECT * FROM quotes WHERE id = ?'; |
63 |
$quote = $self->find({ id => $opts{'id'} }); |
| 71 |
$sth = $dbh->prepare($query); |
|
|
| 72 |
$sth->execute($opts{'id'}); |
| 73 |
$quote = $sth->fetchrow_hashref(); |
| 74 |
} |
64 |
} |
| 75 |
elsif ($opts{'random'}) { |
65 |
elsif ($opts{'random'}) { |
| 76 |
# Fall through... we also return a random quote as a catch-all if all else fails |
66 |
# Fall through... we also return a random quote as a catch-all if all else fails |
| 77 |
} |
67 |
} |
| 78 |
else { |
68 |
else { |
| 79 |
$query = 'SELECT * FROM quotes WHERE timestamp LIKE CONCAT(CURRENT_DATE,\'%\') ORDER BY timestamp DESC LIMIT 0,1'; |
69 |
$quote = Koha::Quotes->search( |
| 80 |
$sth = $dbh->prepare($query); |
70 |
{ |
| 81 |
$sth->execute(); |
71 |
timestamp => { -like => "$dt%" }, |
| 82 |
$quote = $sth->fetchrow_hashref(); |
72 |
}, |
|
|
73 |
{ |
| 74 |
order_by => { -desc => 'timestamp' }, |
| 75 |
rows => 1, |
| 76 |
} |
| 77 |
)->single; |
| 83 |
} |
78 |
} |
| 84 |
unless ($quote) { # if there are not matches, choose a random quote |
79 |
unless ($quote) { # if there are not matches, choose a random quote |
| 85 |
# get a list of all available quote ids |
80 |
my $range = Koha::Quotes->search->count; |
| 86 |
$sth = C4::Context->dbh->prepare('SELECT count(*) FROM quotes;'); |
|
|
| 87 |
$sth->execute; |
| 88 |
my $range = ($sth->fetchrow_array)[0]; |
| 89 |
# chose a random id within that range if there is more than one quote |
| 90 |
my $offset = int(rand($range)); |
81 |
my $offset = int(rand($range)); |
| 91 |
# grab it |
82 |
$quote = Koha::Quotes->search( |
| 92 |
$query = 'SELECT * FROM quotes ORDER BY id LIMIT 1 OFFSET ?'; |
83 |
{}, |
| 93 |
$sth = C4::Context->dbh->prepare($query); |
84 |
{ |
| 94 |
# see http://www.perlmonks.org/?node_id=837422 for why |
85 |
order_by => 'id', |
| 95 |
# we're being verbose and using bind_param |
86 |
rows => 1, |
| 96 |
$sth->bind_param(1, $offset, SQL_INTEGER); |
87 |
offset => $offset, |
| 97 |
$sth->execute(); |
88 |
} |
| 98 |
$quote = $sth->fetchrow_hashref(); |
89 |
)->single; |
|
|
90 |
|
| 99 |
# update the timestamp for that quote |
91 |
# update the timestamp for that quote |
| 100 |
$query = 'UPDATE quotes SET timestamp = ? WHERE id = ?'; |
92 |
$quote->update({ timestamp => $dt }); |
| 101 |
$sth = C4::Context->dbh->prepare($query); |
|
|
| 102 |
$sth->execute( |
| 103 |
DateTime::Format::MySQL->format_datetime( dt_from_string() ), |
| 104 |
$quote->{'id'} |
| 105 |
); |
| 106 |
} |
93 |
} |
| 107 |
return $quote; |
94 |
return $quote; |
| 108 |
} |
95 |
} |
| 109 |
- |
|
|