From 51372c7a3d075605e3fed76eae191dff0c7fe134 Mon Sep 17 00:00:00 2001 From: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com> Date: Thu, 19 Jan 2023 14:21:38 +0000 Subject: [PATCH] Bug 32680: Add hooks to allow cover art to come from plugins This patch adds hooks to Koha core that allow a plugin for cover art to inject the images into the OPAC and staff client. These hooks could be re-used for other providers. As an example, a plugin has been created for BDS covers, the link is in another comment Test plan: 1) Apply patch 2) Go to https://github.com/PTFS-Europe/koha-plugin-addBDSCovers 3) In the releases section, download the .kpz file 4) Upload this in the plugins section and enable the plugin 5) In either the OPAC or staff client, search the catalog 6) The results should have cover art from BDS covers 7) Click on a result and the detail page should also have the cover art --- catalogue/detail.pl | 5 +++++ catalogue/search.pl | 5 +++++ .../prog/en/modules/catalogue/detail.tt | 11 ++++++++--- .../prog/en/modules/catalogue/results.tt | 18 +++++++++++++++--- .../bootstrap/en/modules/opac-detail.tt | 8 +++++++- .../bootstrap/en/modules/opac-results.tt | 18 ++++++++++++++++-- opac/opac-detail.pl | 5 +++++ opac/opac-search.pl | 5 +++++ 8 files changed, 66 insertions(+), 9 deletions(-) diff --git a/catalogue/detail.pl b/catalogue/detail.pl index c7908bc9693..99bfc5779c6 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -684,4 +684,9 @@ $template->param(found1 => scalar $query->param('found1') ); $template->param(biblio => $biblio); +my $intranet_js_plugins = Koha::Template::Plugin::KohaPlugins->get_plugins_intranet_js; +if(index($intranet_js_plugins, "Cover Image Plugin") != -1){ + $template->param( Cover_Images_Required => 1 ) +} + output_html_with_http_headers $query, $cookie, $template->output; diff --git a/catalogue/search.pl b/catalogue/search.pl index bf225911ef9..68e75eba490 100755 --- a/catalogue/search.pl +++ b/catalogue/search.pl @@ -779,6 +779,11 @@ my $some_public_shelves = Koha::Virtualshelves->get_some_shelves( } ); +my $intranet_js_plugins = Koha::Template::Plugin::KohaPlugins->get_plugins_intranet_js; +if(index($intranet_js_plugins, "Cover Image Plugin") != -1){ + $template->param( Cover_Images_Required => 1 ) +} + $template->param( add_to_some_private_shelves => $some_private_shelves, diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt index ace46656c9b..d11de103af4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt @@ -114,7 +114,7 @@ <span class="Z3988" title="[% ocoins | html %]"></span> [% END %] - [% IF ( AmazonCoverImages || LocalCoverImages || IntranetCoce || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] + [% IF ( Cover_Images_Required || AmazonCoverImages || LocalCoverImages || IntranetCoce || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] <div id="catalogue_detail_biblio" class="col-xs-9"> [% ELSE %] <div id="catalogue_detail_biblio" class="col-xs-12"> @@ -204,10 +204,10 @@ [% END %] </div> [%# .page-section %] - [% IF ( AmazonCoverImages || LocalCoverImages || IntranetCoce || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] + [% IF ( Cover_Images_Required || AmazonCoverImages || LocalCoverImages || IntranetCoce || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] </div> <div class="col-xs-3 bookcoverimg"> - <div id="biblio-cover-slider" class="cover-slider"> + <div id="biblio-cover-slider" class="cover-slider cover_images_required"> [% IF ( LocalCoverImages ) %] [% IF localimages.count %] [% FOREACH image IN localimages %] @@ -1310,6 +1310,11 @@ Note that permanent location is a code, and location may be an authval. [% Asset.js("js/recalls.js") | $raw %] [% Asset.js("js/coce.js") | $raw %] [% Asset.js("lib/Chocolat/js/chocolat.js") | $raw %] + [% IF ( Cover_Images_Required ) %] + <script> + var normalized_isbn = "[% normalized_isbn %]"; + </script> + [% END %] <script> var interface = "[% interface | html %]"; var theme = "[% theme | html %]"; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt index 82735d4be81..eb61a12dcd1 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tt @@ -449,7 +449,7 @@ <table> <thead> <tr> - [% IF ( AmazonCoverImages || LocalCoverImages || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] + [% IF ( Cover_Images_Required || AmazonCoverImages || LocalCoverImages || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] <th> </th> [% END %] <th colspan="2">Results</th> @@ -461,9 +461,9 @@ <tbody> [% FOREACH SEARCH_RESULT IN SEARCH_RESULTS %] <tr id="row[% SEARCH_RESULT.biblionumber | html %]"> - [% IF ( AmazonCoverImages || LocalCoverImages || IntranetCoce || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] + [% IF ( Cover_Images_Required || AmazonCoverImages || LocalCoverImages || IntranetCoce || ( SyndeticsCovers ) || (Koha.Preference('CustomCoverImages') && Koha.Preference('CustomCoverImagesURL')) ) %] <td class="bookcoverimg"> - <div id="cover-slides-[% SEARCH_RESULT.biblionumber | html %]" class="cover-slides" data-biblionumber="[% SEARCH_RESULT.biblionumber | html %]"> + <div id="cover-slides-[% SEARCH_RESULT.biblionumber | html %]" class="cover-slides search_cover_images_required" data-biblionumber="[% SEARCH_RESULT.biblionumber | html %]"> [% IF ( LocalCoverImages ) %][% SEARCH_RESULT.localimage | html %] <div id="local-coverimg-[% SEARCH_RESULT.biblionumber | html %]" class="cover-image local-coverimg"> <a href="[% PROCESS biblio_a_href biblionumber => SEARCH_RESULT.biblionumber %]"> @@ -781,6 +781,18 @@ [% Asset.css("css/humanmsg.css") | $raw %] [% Asset.js("lib/jquery/plugins/humanmsg.js") | $raw %] [% INCLUDE 'select2.inc' %] + [% IF ( Cover_Images_Required ) %] + <script> + const search_results = {}; + [% FOREACH SEARCH_RESULT IN SEARCH_RESULTS %] + var cover_index = "[% loop.count %]"; + search_results[cover_index] = {}; + search_results[cover_index].isbn = "[% SEARCH_RESULT.normalized_isbn | html %]"; + search_results[cover_index].biblionumber = "[% SEARCH_RESULT.biblionumber | html %]"; + search_results[cover_index].processedBiblio = "[% PROCESS biblio_a_href biblionumber => SEARCH_RESULT.biblionumber | html %]" + [% END %] + </script> + [% END %] <script> var PREF_AmazonCoverImages = parseInt( "[% Koha.Preference('AmazonCoverImages') | html %]", 10); var q_array = new Array(); // will hold search terms, if present diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt index e97198aed4a..49df70e0914 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt @@ -59,7 +59,7 @@ <div class="bookcover"> - <div id="biblio-cover-slider" class="cover-slider"> + <div id="biblio-cover-slider" class="cover-slider cover_images_required"> [% IF ( OPACLocalCoverImages ) %] [% IF localimages.count %] [% FOREACH image IN localimages %] @@ -1447,6 +1447,12 @@ [% Asset.js("js/ratings.js") | $raw %] [% END %] + [% IF ( Cover_Images_Required ) %] + <script> + var normalized_isbn = "[% normalized_isbn %]"; + </script> + [% END %] + [% IF ( OpacHighlightedWords ) %][% Asset.js("lib/jquery/plugins/jquery.highlight-3.js") | $raw %][% END %] [% IF ( Koha.Preference('OPACDetailQRCode') ) %] [% Asset.js("lib/kjua/kjua.min.js") | $raw %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt index 95fa8d63046..da5284f5ccb 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt @@ -341,7 +341,7 @@ [% # Cell 4: Search result details and controls %] <td class="bibliocol"> - <div class="coverimages itemtype_[% SEARCH_RESULT.itemtype | html %]"> + <div class="coverimages search_cover_images_required itemtype_[% SEARCH_RESULT.itemtype | html %]"> <a class="p1" href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% SEARCH_RESULT.biblionumber | uri %]"> [% IF ( SEARCH_RESULT.title ) %] [% img_title = SEARCH_RESULT.title %] @@ -587,7 +587,21 @@ [% IF OpenLibraryCovers || OpenLibrarySearch %] [% Asset.js("js/openlibrary.js") | $raw %] [% END %] - + [% IF ( Cover_Images_Required ) %] + <script> + const search_results = {}; + [% FOREACH SEARCH_RESULT IN SEARCH_RESULTS %] + var cover_index = "[% loop.count %]"; + search_results[cover_index] = {}; + search_results[cover_index].isbn = "[% SEARCH_RESULT.normalized_isbn | html %]"; + [% IF SEARCH_RESULT.img_title %] + search_results[cover_index].img_title = "[% SEARCH_RESULT.img_title | html %]"; + [% ELSE %] + search_results[cover_index].img_title = "[% SEARCH_RESULT.biblionumber | html %]"; + [% END %] + [% END %] + </script> + [% END %] <script> [% IF ( Koha.Preference( 'opacuserlogin' ) == 1 ) && ( Koha.Preference( 'OPACHoldRequests' ) == 1 ) %] function holdMultiple() { diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 961be881435..c2317c43ef6 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -1246,4 +1246,9 @@ if ( C4::Context->preference('OPACAuthorIdentifiers') ) { $template->param( author_identifiers => \@author_identifiers ); } +my $opac_js_plugins = Koha::Template::Plugin::KohaPlugins->get_plugins_opac_js; +if(index($opac_js_plugins, "Cover Image Plugin") != -1){ + $template->param( Cover_Images_Required => 1 ) +} + output_html_with_http_headers $query, $cookie, $template->output; diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 10dc707a3e2..4feba0ad496 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -915,5 +915,10 @@ if ($offset == 0) { $template->param(firstPage => 1); } +my $opac_js_plugins = Koha::Template::Plugin::KohaPlugins->get_plugins_opac_js; +if(index($opac_js_plugins, "Cover Image Plugin") != -1){ + $template->param( Cover_Images_Required => 1 ) +} + $template->param( borrowernumber => $borrowernumber); output_with_http_headers $cgi, $cookie, $template->output, $content_type; -- 2.37.1 (Apple Git-137.1)