[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" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&amp;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" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&amp;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" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&amp;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" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&amp;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" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&amp;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" -->&amp;sort_by=<!-- TMPL_VAR NAME="sort_by" --><!-- /TMPL_IF -->&amp;offset=<!-- TMPL_VAR NAME="offset" -->&amp;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