[Koha-patches] [PATCH] [UPDATED] 3154 Preferences for building facets (functionality)
Chris Nighswonger
cnighswonger at foundations.edu
Tue Mar 22 22:43:20 CET 2011
Neither of the two patches submitted for bug 3154 apply 3.2.x. If they
should, please fixup and resubmit with [3.2.x] in the subject line.
The patches present merge conflicts in multiple places/files.
Kind Regards,
Chris
On Thu, Mar 17, 2011 at 5:33 AM, Marcel de Rooy
<M.de.Rooy at rijksmuseum.nl> wrote:
> Based on patch from Fridolyn Somers with input of Frederic Demians.
> Added new Searching preference maxRecordsForFacets.
> This pref contains number of result records used in facet building.
> Also added pref displayFacetCount (with thanks to Frederic).
> Follow up patch takes care of install issues; functionality can already be tested with this patch only.
>
> Updated on March 17 for changes in include files.
> ---
> C4/Search.pm | 72 +++++++++++++-------
> catalogue/search.pl | 1 +
> .../intranet-tmpl/prog/en/includes/facets.inc | 2 +-
> .../en/modules/admin/preferences/searching.pref | 14 ++++
> .../opac-tmpl/prog/en/includes/opac-facets.inc | 2 +-
> opac/opac-search.pl | 1 +
> 6 files changed, 65 insertions(+), 27 deletions(-)
>
> diff --git a/C4/Search.pm b/C4/Search.pm
> index c486df9..2034327 100644
> --- a/C4/Search.pm
> +++ b/C4/Search.pm
> @@ -309,6 +309,7 @@ sub getRecords {
> my $facets_counter = ();
> my $facets_info = ();
> my $facets = getFacets();
> + my $facets_maxrecs = C4::Context->preference('maxRecordsForFacets')||20;
>
> my @facets_loop; # stores the ref to array of hashes for template facets loop
>
> @@ -418,7 +419,6 @@ sub getRecords {
> for ( my $j = $offset ; $j < $times ; $j++ ) {
> my $records_hash;
> my $record;
> - my $facet_record;
>
> ## Check if it's an index scan
> if ($scan) {
> @@ -451,33 +451,55 @@ sub getRecords {
>
> # warn "RECORD $j:".$record;
> $results_hash->{'RECORDS'}[$j] = $record;
> -
> - # Fill the facets while we're looping, but only for the biblioserver
> - $facet_record = MARC::Record->new_from_usmarc($record)
> - if $servers[ $i - 1 ] =~ /biblioserver/;
> -
> - #warn $servers[$i-1]."\n".$record; #.$facet_record->title();
> - if ($facet_record) {
> - for ( my $k = 0 ; $k <= @$facets ; $k++ ) {
> - ($facets->[$k]) or next;
> - my @fields = map {$facet_record->field($_)} @{$facets->[$k]->{'tags'}} ;
> - for my $field (@fields) {
> - my @subfields = $field->subfields();
> - for my $subfield (@subfields) {
> - my ( $code, $data ) = @$subfield;
> - ($code eq $facets->[$k]->{'subfield'}) or next;
> - $facets_counter->{ $facets->[$k]->{'link_value'} }->{$data}++;
> - }
> - }
> - $facets_info->{ $facets->[$k]->{'link_value'} }->{'label_value'} =
> - $facets->[$k]->{'label_value'};
> - $facets_info->{ $facets->[$k]->{'link_value'} }->{'expanded'} =
> - $facets->[$k]->{'expanded'};
> - }
> - }
> }
> +
> }
> $results_hashref->{ $servers[ $i - 1 ] } = $results_hash;
> +
> + # Fill the facets while we're looping, but only for the biblioserver and not for a scan
> + if ( !$scan && $servers[ $i - 1 ] =~ /biblioserver/ ) {
> +
> + my $jmax = $size>$facets_maxrecs? $facets_maxrecs: $size;
> +
> + for ( my $k = 0 ; $k <= @$facets ; $k++ ) {
> + ($facets->[$k]) or next;
> + my @fcodes = @{$facets->[$k]->{'tags'}};
> + my $sfcode = $facets->[$k]->{'subfield'};
> +
> + for ( my $j = 0 ; $j < $jmax ; $j++ ) {
> + my $render_record = $results[ $i - 1 ]->record($j)->render();
> + my @used_datas = ();
> +
> + foreach my $fcode (@fcodes) {
> +
> + # avoid first line
> + my $field_pattern = '\n'.$fcode.' ([^\n]+)';
> + my @field_tokens = ( $render_record =~ /$field_pattern/g ) ;
> +
> + foreach my $field_token (@field_tokens) {
> + my $subfield_pattern = '\$'.$sfcode.' ([^\$]+)';
> + my @subfield_values = ( $field_token =~ /$subfield_pattern/g );
> +
> + foreach my $subfield_value (@subfield_values) {
> +
> + my $data = $subfield_value;
> + $data =~ s/^\s+//; # trim left
> + $data =~ s/\s+$//; # trim right
> +
> + unless ( $data ~~ @used_datas ) {
> + $facets_counter->{ $facets->[$k]->{'link_value'} }->{$data}++;
> + push @used_datas, $data;
> + }
> + } # subfields
> + } # fields
> + } # field codes
> + } # records
> +
> + $facets_info->{ $facets->[$k]->{'link_value'} }->{'label_value'} = $facets->[$k]->{'label_value'};
> + $facets_info->{ $facets->[$k]->{'link_value'} }->{'expanded'} = $facets->[$k]->{'expanded'};
> + } # facets
> + }
> + # End PROGILONE
> }
>
> # warn "connection ", $i-1, ": $size hits";
> diff --git a/catalogue/search.pl b/catalogue/search.pl
> index f3f6008..7f1f0ea 100755
> --- a/catalogue/search.pl
> +++ b/catalogue/search.pl
> @@ -656,6 +656,7 @@ $template->param(
> total => $total,
> opacfacets => 1,
> facets_loop => $facets,
> + displayFacetCount=> C4::Context->preference('displayFacetCount')||0,
> scan => $scan,
> search_error => $error,
> );
> diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc
> index b53bfb7..710dc23 100644
> --- a/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc
> +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc
> @@ -17,7 +17,7 @@
> <!-- TMPL_IF NAME="type_label_Series" -->Series<!-- /TMPL_IF -->
> <!-- TMPL_IF NAME="type_label_Libraries" -->Libraries<!-- /TMPL_IF -->
> <ul>
> - <!-- TMPL_LOOP NAME="facets" --><li><a href="/cgi-bin/koha/catalogue/search.pl?<!-- TMPL_VAR NAME="query_cgi" ESCAPE="HTML" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML"--><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&limit=<!-- TMPL_VAR NAME="type_link_value" -->:<!-- TMPL_VAR NAME="facet_link_value" -->" title="<!-- TMPL_VAR NAME="facet_title_value" -->"><!-- TMPL_VAR NAME="facet_label_value" --></a> <!-- (<!-- TMPL_VAR NAME="facet_count" -->) --></li><!-- /TMPL_LOOP --><!-- TMPL_IF NAME="expandable" -->
> + <!-- TMPL_LOOP NAME="facets" --><li><a href="/cgi-bin/koha/catalogue/search.pl?<!-- TMPL_VAR NAME="query_cgi" ESCAPE="HTML" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML"--><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&limit=<!-- TMPL_VAR NAME="type_link_value" -->:<!-- TMPL_VAR NAME="facet_link_value" -->" title="<!-- TMPL_VAR NAME="facet_title_value" -->"><!-- TMPL_VAR NAME="facet_label_value" --></a> <!-- TMPL_IF NAME="displayFacetCount" -->(<!-- TMPL_VAR NAME="facet_count" -->)<!-- /TMPL_IF --></li><!-- /TMPL_LOOP --><!-- TMPL_IF NAME="expandable" -->
> <li class="showmore"><a href="/cgi-bin/koha/catalogue/search.pl?<!-- TMPL_VAR NAME="query_cgi" ESCAPE="HTML" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML" --><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&expand=<!-- TMPL_VAR NAME="expand" -->#<!-- TMPL_VAR NAME="type_id" -->">Show More</a></li>
> <!-- /TMPL_IF -->
> </ul></li>
> 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 5ff267f..d0a58e0 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
> @@ -99,6 +99,14 @@ Searching:
> az: from A to Z.
> za: from Z to A.
> -
> + - pref: displayFacetCount
> + type: boolean
> + default: no
> + choices:
> + yes: Show
> + no: "Don't show"
> + - facet counts. The relevance of these numbers highly depends on the value of the maxRecordsForFacets preference. Applies to OPAC and staff interface.
> + -
> - By default, show
> - pref: numSearchResults
> class: integer
> @@ -129,6 +137,12 @@ Searching:
> class: integer
> - items per biblio in the search results
> -
> + - Build facets based on
> + - pref: maxRecordsForFacets
> + class: integer
> + default: 20
> + - records from the search results.
> + -
> - By default, show
> - pref: OPACnumSearchResults
> class: integer
> diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc b/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc
> index cc6d235..57f0518 100644
> --- a/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc
> +++ b/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc
> @@ -18,7 +18,7 @@
> <!-- TMPL_IF NAME="type_label_Libraries" -->Libraries<!-- /TMPL_IF -->
> <!-- /TMPL_UNLESS -->
> <ul>
> - <!-- TMPL_LOOP NAME="facets" --><li><a href="/cgi-bin/koha/opac-search.pl?<!-- TMPL_VAR NAME="query_cgi" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML" --><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&limit=<!-- TMPL_VAR NAME="type_link_value" -->:<!-- TMPL_VAR NAME="facet_link_value" -->" title="<!-- TMPL_VAR NAME="facet_title_value" ESCAPE="HTML" -->"><!-- TMPL_VAR NAME="facet_label_value" --></a> <!-- (<!-- TMPL_VAR NAME="facet_count" -->) --></li><!-- /TMPL_LOOP --><!-- TMPL_IF NAME="expandable" -->
> + <!-- TMPL_LOOP NAME="facets" --><li><a href="/cgi-bin/koha/opac-search.pl?<!-- TMPL_VAR NAME="query_cgi" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML" --><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&limit=<!-- TMPL_VAR NAME="type_link_value" -->:<!-- TMPL_VAR NAME="facet_link_value" -->" title="<!-- TMPL_VAR NAME="facet_title_value" ESCAPE="HTML" -->"><!-- TMPL_VAR NAME="facet_label_value" --></a> <!-- TMPL_IF NAME="displayFacetCount">(<!-- TMPL_VAR NAME="facet_count" -->)<!-- /TMPL_IF --></li><!-- /TMPL_LOOP --><!-- TMPL_IF NAME="expandable" -->
> <li class="showmore"><a href="/cgi-bin/koha/opac-search.pl?<!-- TMPL_VAR NAME="query_cgi" --><!-- TMPL_VAR NAME="limit_cgi" ESCAPE="HTML" --><!-- TMPL_IF NAME="sort_by" -->&sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&offset=<!-- TMPL_VAR NAME="offset" -->&expand=<!-- TMPL_VAR NAME="expand" -->#<!-- TMPL_VAR NAME="type_id" -->">Show More</a></li>
> <!-- /TMPL_IF -->
> </ul></li>
> diff --git a/opac/opac-search.pl b/opac/opac-search.pl
> index 0f52650..271f501 100755
> --- a/opac/opac-search.pl
> +++ b/opac/opac-search.pl
> @@ -628,6 +628,7 @@ $template->param(
> total => $total,
> opacfacets => 1,
> facets_loop => $facets,
> + displayFacetCount=> C4::Context->preference('displayFacetCount')||0,
> scan => $scan,
> search_error => $error,
> );
> --
> 1.6.0.6
>
> _______________________________________________
> Koha-patches mailing list
> Koha-patches at lists.koha-community.org
> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches
> website : http://www.koha-community.org/
> git : http://git.koha-community.org/
> bugs : http://bugs.koha-community.org/
>
More information about the Koha-patches
mailing list