diff --git a/Koha/Quote.pm b/Koha/Quote.pm index ecfc086022..f79cf79c3f 100644 --- a/Koha/Quote.pm +++ b/Koha/Quote.pm @@ -22,6 +22,7 @@ use DBI qw(:sql_types); use Koha::Database; use Koha::DateUtils qw(dt_from_string); +use Koha::Exceptions::UnknownProgramState; use base qw(Koha::Object); @@ -106,6 +107,31 @@ sub get_daily_quote { return $quote; } +=head2 get_daily_quote_for_interface + + my $quote = Koha::Quote->get_daily_quote_for_interface(); + +Is a wrapper for get_daily_quote(), with an extra check for using the correct +interface defined in the syspref 'QuoteOfTheDay'. +If the current interface is not allowed to display quotes, then returns undef. + +=cut + +sub get_daily_quote_for_interface { + my ($self, %opts) = @_; + my $qotdPref = C4::Context->preference('QuoteOfTheDay'); + my $interface = C4::Context->interface(); + unless ($interface) { + my @cc = caller(3); + Koha::Exceptions::UnknownProgramState->throw(error => $cc[3]."()> C4::Context->interface() is not set! Don't know are you in OPAC or staff client?"); + } + unless ($qotdPref =~ /$interface/) { + return undef; + } + + return $self->get_daily_quote(%opts); +} + =head3 _type =cut diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 6805e6f94c..c47e7cd026 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -492,11 +492,12 @@ OPAC: - browsing and paging search results from the OPAC detail page. - - pref: QuoteOfTheDay - default: 0 - choices: - yes: Enable - no: Disable - - Quote of the Day display on OPAC home page + default: + class: short + - Quote of the Day display in Koha. + - Add 'opac' to show in OPAC home page. + - Add 'intranet' to show in the staff client main page. + - Example 'opac intranet', displays QOTD in OPAC and the staff client. - - pref: OPACPopupAuthorsSearch default: 0 diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt index 569af7ac82..24d8aa499c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt @@ -34,6 +34,14 @@ [% END %] [% END %] + [% IF ( daily_quote ) %] +
+

Quote of the Day

+
+ [% daily_quote.text %] ~ [% daily_quote.source %] +
+
+ [% END %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/quotes.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/quotes.tt index bf910d229c..6b3e9c15e3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/quotes.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/quotes.tt @@ -122,7 +122,6 @@ "action" : "edit", }; }, - "height" : "14px", "placeholder" : "Saving data...", }); }, @@ -190,8 +189,8 @@ var aRow = oTable.fnAddData( [ 'NA', // this is hackish to fool the datatable sort routine into placing this row at the end of the list... - '', - '', + '', + '', '0000-00-00 00:00:00', ], false diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-main.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-main.tt index af3e8e4af7..2288fc6b9f 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-main.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-main.tt @@ -143,7 +143,7 @@ [% END # IF koha_news %] [% UNLESS news_item # Don't show under single news item %] - [% IF ( display_daily_quote && daily_quote ) %] + [% IF ( daily_quote ) %]

Quote of the day

diff --git a/mainpage.pl b/mainpage.pl index ff234f6baa..090d431350 100755 --- a/mainpage.pl +++ b/mainpage.pl @@ -32,6 +32,7 @@ use Koha::Patron::Discharge; use Koha::Reviews; use Koha::ArticleRequests; use Koha::ProblemReports; +use Koha::Quote; my $query = new CGI; @@ -54,7 +55,8 @@ my $koha_news_count = scalar @$all_koha_news; $template->param( koha_news => $all_koha_news, - koha_news_count => $koha_news_count + koha_news_count => $koha_news_count, + daily_quote => Koha::Quote->get_daily_quote_for_interface(), ); my $branch = diff --git a/opac/opac-main.pl b/opac/opac-main.pl index 6104d606b1..feaf327772 100755 --- a/opac/opac-main.pl +++ b/opac/opac-main.pl @@ -73,8 +73,6 @@ if (defined $news_id){ @all_koha_news = &GetNewsToDisplay( $template->lang, $homebranch); } -my $quote = Koha::Quote->get_daily_quote(); # other options are to pass in an exact quote id or select a random quote each pass... see perldoc C4::Koha - # For dashboard my $patron = Koha::Patrons->find( $borrowernumber ); @@ -101,8 +99,7 @@ if ( $patron ) { $template->param( koha_news => @all_koha_news, branchcode => $homebranch, - display_daily_quote => C4::Context->preference('QuoteOfTheDay'), - daily_quote => $quote, + daily_quote => Koha::Quote->get_daily_quote_for_interface(), ); output_html_with_http_headers $input, $cookie, $template->output; diff --git a/t/db_dependent/Koha/Quotes.t b/t/db_dependent/Koha/Quotes.t index d4c979b5c3..dd1477ec6b 100644 --- a/t/db_dependent/Koha/Quotes.t +++ b/t/db_dependent/Koha/Quotes.t @@ -17,13 +17,16 @@ use Modern::Perl; use DateTime::Format::MySQL; -use Test::More tests => 12; +use Test::More tests => 13; use Koha::Database; use Koha::DateUtils qw(dt_from_string); use Koha::Quote; use Koha::Quotes; +use t::lib::TestBuilder; +use t::lib::Mocks; + BEGIN { use_ok('Koha::Quote'); } @@ -76,3 +79,41 @@ my $quote_6 = Koha::Quote->new({ id => 6, source => 'George Washington', text => $quote = Koha::Quote->get_daily_quote(); is( $quote->{id}, 6, ' get_daily_quote returns the only existing quote' ); + +$schema->storage->txn_rollback; + +subtest "get_daily_quote_for_interface" => sub { + + plan tests => 3; + + $schema->storage->txn_begin; + + my ($quote); + my $quote_1 = Koha::Quote->new({ id => 10, source => 'Dusk And Her Embrace', text => 'Unfurl thy limbs breathless succubus
How the full embosomed fog
Imparts the night to us....', timestamp => dt_from_string })->store; + + my $expected_quote = { + id => 10, + source => 'Dusk And Her Embrace', + text => 'Unfurl thy limbs breathless succubus
How the full embosomed fog
Imparts the night to us....', + timestamp => DateTime::Format::MySQL->format_datetime(dt_from_string), + }; + + t::lib::Mocks::mock_preference('QuoteOfTheDay', ''); + + ##Set interface and get nothing because syspref is not set. + C4::Context->interface('opac'); + $quote = Koha::Quote->get_daily_quote_for_interface(id => $quote_1->id); + ok(not($quote), "'QuoteOfTheDay'-syspref not set so nothing returned"); + + ##Set 'QuoteOfTheDay'-syspref to not include current interface 'opac' + t::lib::Mocks::mock_preference('QuoteOfTheDay', 'intra commandline sip2 api yo-mama'); + $quote = Koha::Quote->get_daily_quote_for_interface(id => $quote_1->id); + ok(not($quote), "'QuoteOfTheDay'-syspref doesn't include 'opac'"); + + ##Set 'QuoteOfTheDay'-syspref to include current interface 'opac' + t::lib::Mocks::mock_preference('QuoteOfTheDay', 'intraopaccommandline'); + $quote = Koha::Quote->get_daily_quote_for_interface(id => $quote_1->id); + is_deeply($quote, $expected_quote, "Got the expected quote"); + + $schema->storage->txn_rollback; +};