From 7c7a8e98c446c2529bce788dfa79ca0668ce790f Mon Sep 17 00:00:00 2001 From: Ivan Dziuba Date: Thu, 14 Jan 2021 08:25:05 -0500 Subject: [PATCH] Bug 27428: Show the number of records in the bibliographic record detail page with ElasticSearch. Tests: 1. Apply this patch; 2. In the Preference system - OPACDisplayRecordCount -> Show; 3. We can see the number of records next to search links in the bibliographic record detail page in the OPAC. --- Koha/SearchEngine/Elasticsearch/Browse.pm | 42 +++++++++ ...ber_records_next_to_search_links_opac.perl | 8 ++ installer/data/mysql/mandatory/sysprefs.sql | 3 +- .../prog/en/includes/doc-head-close.inc | 3 + .../modules/admin/preferences/searching.pref | 9 ++ .../bootstrap/en/modules/opac-detail.tt | 4 +- .../bootstrap/js/opac-display-record-count.js | 91 +++++++++++++++++++ opac/svc/elasticsearch/opac-autocomplete.pl | 53 +++++++++++ 8 files changed, 211 insertions(+), 2 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_27428-number_records_next_to_search_links_opac.perl create mode 100644 koha-tmpl/opac-tmpl/bootstrap/js/opac-display-record-count.js create mode 100755 opac/svc/elasticsearch/opac-autocomplete.pl diff --git a/Koha/SearchEngine/Elasticsearch/Browse.pm b/Koha/SearchEngine/Elasticsearch/Browse.pm index 85070730a7..7ca6b27255 100644 --- a/Koha/SearchEngine/Elasticsearch/Browse.pm +++ b/Koha/SearchEngine/Elasticsearch/Browse.pm @@ -48,6 +48,7 @@ as "suggestible" in the database when indexing takes place. use base qw(Koha::SearchEngine::Elasticsearch); use Modern::Perl; +use JSON; =head2 browse @@ -162,6 +163,47 @@ sub _build_query { return $query; } +sub _build_query_count_record { + my ($self, $cgi_q, $key, $item) = @_; + my $query = { + query => { + match_phrase => { + $key => $item + } + } + }; + return $query; +} + +sub count_record { + my ($self, $cgi_q) = @_; + my @results_return; + my $decoded; + $cgi_q =~ s/\{\'/\{\"/g; + $cgi_q =~ s/\'\}/\"\}/g; + #$cgi_q =~ s/\'\:\'/\"\:\"}/g; + eval { + $decoded = JSON::XS::decode_json($cgi_q); + }; + if ($@) { + warn "Caught JSON::XS decode error: $_"; + } + + foreach my $item (@$decoded) + { + for my $key ( keys %$item ){ + my $elasticsearch = $self->get_elasticsearch(); + my $query = $self->_build_query_count_record($cgi_q, $key, $$item{$key}); + my $res = $elasticsearch->search( + index => $self->index_name, + body => $query + ); + push(@results_return, $res->{'hits'}->{'total'}); + } + } + return \@results_return; +} + 1; __END__ diff --git a/installer/data/mysql/atomicupdate/bug_27428-number_records_next_to_search_links_opac.perl b/installer/data/mysql/atomicupdate/bug_27428-number_records_next_to_search_links_opac.perl new file mode 100644 index 0000000000..1a63dbb788 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_27428-number_records_next_to_search_links_opac.perl @@ -0,0 +1,8 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if( CheckVersion( $DBversion ) ) { + # you can use $dbh here like: + $dbh->do(q{INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('OPACDisplayRecordCount', '0', NULL, NULL, 'YesNo')}); + + # Always end with this (adjust the bug info) + NewVersion( $DBversion, 27428, "Show the number of records in the detail page in the OPAC"); +} diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql index 7f0afaa594..1d7fdd8a4b 100644 --- a/installer/data/mysql/mandatory/sysprefs.sql +++ b/installer/data/mysql/mandatory/sysprefs.sql @@ -722,5 +722,6 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('XSLTListsDisplay','default','','Enable XSLT stylesheet control over lists pages display on intranet','Free'), ('XSLTResultsDisplay','default','','Enable XSL stylesheet control over results page display on intranet','Free'), ('z3950AuthorAuthFields','701,702,700',NULL,'Define the MARC biblio fields for Personal Name Authorities to fill biblio.author','free'), -('z3950NormalizeAuthor','0','','If ON, Personal Name Authorities will replace authors in biblio.author','YesNo') +('z3950NormalizeAuthor','0','','If ON, Personal Name Authorities will replace authors in biblio.author','YesNo'), +('OPACDisplayRecordCount','0',NULL,NULL,'YesNo') ; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc index c2833e3009..8ca24b247e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc @@ -26,6 +26,9 @@ var Koha = {}; +[% IF ( Koha.Preference('OPACDisplayRecordCount') ) %] + [% Asset.js("js/opac-display-record-count.js") %] +[% END %] [% IF lang && lang != 'en' %] [% Asset.js(lang _ '/js/locale_data.js') | $raw %] [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref index 71bcbfaa1c..2cd0d1f16f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref @@ -283,3 +283,12 @@ Searching: - LIBRIS base URL - pref: LibrisURL - "Please only change this if you are sure it needs changing." + - + - pref: OPACDisplayRecordCount + type: boolean + default: no + choices: + yes: Show + no: "Don't show" + - the number of records next to search links in the bibliographic record detail page in the OPAC. + - \ No newline at end of file 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 1f0d336a73..c66fde8e0e 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt @@ -1446,7 +1446,9 @@ [% IF ( Koha.Preference('OPACDetailQRCode') ) %] [% Asset.js("lib/kjua/kjua.min.js") | $raw %] [% END %] - + [% IF ( Koha.Preference('OPACDisplayRecordCount') ) %] + NumberResultsRecord(); + [% END %] [% IF ( Koha.Preference('OPACShowMusicalInscripts') ) %]