From 43851e23453405ed89dbe33a11ec7898ec8a3eb1 Mon Sep 17 00:00:00 2001 From: Ivan Dziuba Date: Thu, 22 Apr 2021 18:22:41 -0400 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 +- .../modules/admin/preferences/searching.pref | 8 ++ .../bootstrap/en/includes/doc-head-close.inc | 3 + .../bootstrap/en/modules/opac-detail.tt | 5 +- .../bootstrap/js/opac-display-record-count.js | 88 +++++++++++++++++++ opac/svc/elasticsearch/opac-elasticsearch.pl | 51 +++++++++++ 8 files changed, 205 insertions(+), 3 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-elasticsearch.pl diff --git a/Koha/SearchEngine/Elasticsearch/Browse.pm b/Koha/SearchEngine/Elasticsearch/Browse.pm index 85070730a7..5d4282ed2f 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 ef7d4561fb..62e90cc27a 100644 --- a/installer/data/mysql/mandatory/sysprefs.sql +++ b/installer/data/mysql/mandatory/sysprefs.sql @@ -733,5 +733,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/modules/admin/preferences/searching.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref index 04a77f8085..4b9ea258dd 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 @@ -276,3 +276,11 @@ Searching: - LIBRIS base URL - pref: LibrisURL - "Please only change this if you are sure it needs changing." + - + - pref: OPACDisplayRecordCount + type: boolean + default: no + choices: + 1: Show + 0: "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/includes/doc-head-close.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/doc-head-close.inc index e0963ca5d3..d54bcf56fc 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/doc-head-close.inc +++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/doc-head-close.inc @@ -47,6 +47,9 @@ [% IF ( Koha.Preference('OPACUserCSS') ) %] [% END %] +[% IF ( Koha.Preference('OPACDisplayRecordCount') ) %] + [% Asset.js("js/opac-display-record-count.js") %] +[% END %] [% IF SCO_login %] [% SET SCOUserCSS = Koha.Preference('SCOUserCSS') %] [% IF SCOUserCSS %] 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 6adf406504..2360b2bb2f 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt @@ -1454,7 +1454,6 @@ [% IF ( Koha.Preference('OPACDetailQRCode') ) %] [% Asset.js("lib/kjua/kjua.min.js") | $raw %] [% END %] - [% IF ( Koha.Preference('OPACShowMusicalInscripts') ) %]