From 106efa076cc63381e6678f568c6a380e8b05fdf4 Mon Sep 17 00:00:00 2001 From: Olli-Antti Kivilahti Date: Mon, 25 Apr 2016 11:22:04 +0300 Subject: [PATCH 5/6] Bug 16371: Quote of the Day (QOTD) - Display in different interfaces Set 'QuoteOfTheDay'-syspref to 'opac intranet' to allow displaying news in the opac and the staff client. Add 'commandline' to allow news in the commandline (where applicable) Accepts all values accepted by the C4::Context->interface() Test plan: 1. Set 'QuoteOfTheDay' syspref as 'intranet' or 'opac' or both 2. Check that quote is visible on both mainpages Prove t/db_dependent/Koha/Quotes.t Sponsored-by: Koha-Suomi Oy --- Koha/Quote.pm | 26 +++++++++++ .../en/modules/admin/preferences/opac.pref | 11 ++--- .../prog/en/modules/intranet-main.tt | 8 ++++ .../prog/en/modules/tools/quotes.tt | 5 +-- .../bootstrap/en/modules/opac-main.tt | 2 +- mainpage.pl | 4 +- opac/opac-main.pl | 5 +-- t/db_dependent/Koha/Quotes.t | 43 ++++++++++++++++++- 8 files changed, 89 insertions(+), 15 deletions(-) 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 339395a5a2..65ebc5d05a 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 @@ -528,11 +528,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 1ec2e3d852..2b9769065e 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 e113357cca..7a8699a8b2 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-main.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-main.tt @@ -141,7 +141,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 bd11fc0830..64cd85afd4 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(), ); # If GoogleIndicTransliteration system preference is On Set parameter to load Google's javascript in OPAC search screens diff --git a/t/db_dependent/Koha/Quotes.t b/t/db_dependent/Koha/Quotes.t index d4c979b5c3..d88c96f8e9 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; +}; -- 2.17.1