From 978e38dd4ef063067f2398cd5991080c968b6ee1 Mon Sep 17 00:00:00 2001 From: Andreas Jonsson Date: Wed, 17 Apr 2024 08:10:46 +0000 Subject: [PATCH] Bug 14007: Hide hidden itemtypes in opac facets. Test plan: * Start koha-testing-docker with elasticsearch or opensearch (e.g., ku-es7) * Make sure there is a built index for Elastic/OpenSearch: > koha-elasticsearch --reset --rebuild kohadev * Search for "book" in opac and note the facet values for itemtype * Change systempreference SearchEngine to ElasticSearch * Search for "book" in opac and note the facet values for itemtype * Go to the adminstration view of one of the itemtypes (for instance Visual Materials) and check "Hide in OPAC". * Search for "book" in opac and make sure the hidden itemtype do not appear as facet. * Search for "book" in staff interface and make sure the hidden itemtype still does appear as a facet. * Change back the systemprefence to Zebra * Search for "book" in opac and make sure the hidden itemtype do not appear as facet. * Search for "book" in staff interface and make sure the hidden itemtype still does appear as a facet. --- C4/Search.pm | 14 ++++++++++++++ Koha/SearchEngine/Elasticsearch/Search.pm | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/C4/Search.pm b/C4/Search.pm index 248856e42b..4ce25412d4 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -619,6 +619,20 @@ sub GetFacets { $facets = _get_facets_from_records( $rs ); } + if ( C4::Context->interface eq 'opac' ) { + for my $k ( keys %$facets ) { + if ( $k eq 'itype' ) { + my $itemtypes = Koha::ItemTypes->new; + for my $fv ( keys %{ $facets->{$k} } ) { + my $itemtype = $itemtypes->find($fv); + if ( defined $itemtype && $itemtype->hideinopac ) { + delete $facets->{$k}->{$fv}; + } + } + } + } + } + return $facets; } diff --git a/Koha/SearchEngine/Elasticsearch/Search.pm b/Koha/SearchEngine/Elasticsearch/Search.pm index 933b52f79d..1b263560cd 100644 --- a/Koha/SearchEngine/Elasticsearch/Search.pm +++ b/Koha/SearchEngine/Elasticsearch/Search.pm @@ -476,6 +476,9 @@ sub _convert_facets { holdingbranch => $library_names, homebranch => $library_names ); + + my @hidden_itemtypes = map { $_->itemtype } ( grep { $opac && $_->hideinopac } @itypes ); + my @facets; $exp_facet //= ''; while ( my ( $type, $data ) = each %$es ) { @@ -495,6 +498,7 @@ sub _convert_facets { next unless length($t); # FIXME Currently we cannot search for an empty faceted field i.e. ln:"" to find records missing languages, though ES does count them correctly my $c = $term->{doc_count}; my $label; + next if $type eq 'itype' && grep { $_ eq $t } @hidden_itemtypes; if ( exists( $special{$type} ) ) { $label = $special{$type}->{$t} // $t; } -- 2.39.2