From 68e5e404ca6874caffda05ebe9240b3cf31832bf Mon Sep 17 00:00:00 2001 From: Olli-Antti Kivilahti Date: Mon, 25 Apr 2016 11:22:04 +0300 Subject: [PATCH] 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 Signed-off-by: David Nind Signed-off-by: David Nind Signed-off-by: Katrin Fischer --- Koha/Quote.pm | 26 +++++++++++++ .../prog/en/modules/admin/preferences/opac.pref | 11 +++--- .../intranet-tmpl/prog/en/modules/intranet-main.tt | 8 ++++ .../intranet-tmpl/prog/en/modules/tools/quotes.tt | 5 +-- .../opac-tmpl/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 a0c0672223..55076c7837 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 @@ -516,11 +516,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 70ac981762..bf919f081f 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-main.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-main.tt @@ -142,7 +142,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..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; +}; -- 2.11.0