[Koha-cvs] koha/opac opac-search.pl [rel_3_0]

Antoine Farnault antoine at koha-fr.org
Fri Dec 8 16:21:06 CET 2006


CVSROOT:	/sources/koha
Module name:	koha
Branch:		rel_3_0
Changes by:	Antoine Farnault <toins>	06/12/08 15:21:06

Modified files:
	opac           : opac-search.pl 

Log message:
	advanced search from opac is now displayed properly.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/opac/opac-search.pl?cvsroot=koha&only_with_tag=rel_3_0&r1=1.38.2.7&r2=1.38.2.8

Patches:
Index: opac-search.pl
===================================================================
RCS file: /sources/koha/koha/opac/opac-search.pl,v
retrieving revision 1.38.2.7
retrieving revision 1.38.2.8
diff -u -b -r1.38.2.7 -r1.38.2.8
--- opac-search.pl	7 Dec 2006 16:34:20 -0000	1.38.2.7
+++ opac-search.pl	8 Dec 2006 15:21:06 -0000	1.38.2.8
@@ -3,7 +3,7 @@
 # Script to perform searching
 # For documentation try 'perldoc /path/to/search'
 #
-# $Header: /sources/koha/koha/opac/opac-search.pl,v 1.38.2.7 2006/12/07 16:34:20 toins Exp $
+# $Header: /sources/koha/koha/opac/opac-search.pl,v 1.38.2.8 2006/12/08 15:21:06 toins Exp $
 #
 # Copyright 2006 LibLime
 #
@@ -140,6 +140,7 @@
 =cut
 
 use strict;            # always use
+
 #use warnings;        # use only for development
 
 ## STEP 1. Load things that are used in both search page and
@@ -152,12 +153,13 @@
 use C4::Search;
 use C4::Koha;
 use POSIX qw(ceil floor);
+
 # create a new CGI object
 # not sure undef_params option is working, need to test
 use CGI qw('-no_undef_params');
 my $cgi = new CGI;
 
-my ($template,$borrowernumber,$cookie);
+my ( $template, $borrowernumber, $cookie );
 
 # decide which template to use
 my $template_name;
@@ -216,16 +218,20 @@
 # load the branches
 my $branches = GetBranches();
 my @branch_loop;
-push @branch_loop, {value => "", branchname => "All Branches", };
-for my $branch_hash (keys %$branches) {
-    push @branch_loop, {value => "branch: $branch_hash", branchname => $branches->{$branch_hash}->{'branchname'}, };
+push @branch_loop, { value => "", branchname => "All Branches", };
+for my $branch_hash ( keys %$branches ) {
+    push @branch_loop,
+      {
+        value      => "branch: $branch_hash",
+        branchname => $branches->{$branch_hash}->{'branchname'},
+      };
 }
-$template->param(branchloop => \@branch_loop,);
+$template->param( branchloop => \@branch_loop, );
 
 # load the itemtypes (Called Collection Codes in the template -- used for circ rules )
 my $itemtypes = GetItemTypes;
 my @itemtypesloop;
-my $selected=1;
+my $selected = 1;
 my $cnt;
 my $imgdir = getitemtypeimagesrc();
 foreach my $thisitemtype ( sort keys %$itemtypes ) {
@@ -240,7 +246,7 @@
     $selected = 0 if ($selected);
     push @itemtypesloop, \%row;
 }
-$template->param(itemtypeloop => \@itemtypesloop);
+$template->param( itemtypeloop => \@itemtypesloop );
 
 # # load the itypes (Called item types in the template -- just authorized values for searching)
 # my ($itypecount, at itype_loop) = GetCcodes();
@@ -254,17 +260,18 @@
 # }
 
 # The following should only be loaded if we're bringing up the advanced search template
-if ( $template_name eq "catalogue/advsearch.tmpl" ) {
+if ( $template_name eq "opac-advsearch.tmpl" ) {
+
     # load the servers (used for searching -- to do federated searching, etc.)
-    my $primary_servers_loop;# = displayPrimaryServers();
-    $template->param(outer_servers_loop =>  $primary_servers_loop,);
+    my $primary_servers_loop;    # = displayPrimaryServers();
+    $template->param( outer_servers_loop => $primary_servers_loop, );
     
-    my $secondary_servers_loop;# = displaySecondaryServers();
-    $template->param(outer_sup_servers_loop => $secondary_servers_loop,);
+    my $secondary_servers_loop;    # = displaySecondaryServers();
+    $template->param( outer_sup_servers_loop => $secondary_servers_loop, );
     
     # load the limit types (icon-based limits in advanced search page)
     my $outer_limit_types_loop = displayLimitTypes();
-    $template->param(outer_limit_types_loop =>  $outer_limit_types_loop,);
+    $template->param( outer_limit_types_loop => $outer_limit_types_loop, );
     
     # load the search indexes (what a user can choose to search by)
     my $indexes = displayIndexes();
@@ -276,54 +283,65 @@
     # into flags for the template -- I'll work on that soon -- JF
     my @search_boxes_array;
     my $search_boxes_count = 1; # should be a syspref
-    for (my $i=0;$i<=$search_boxes_count;$i++) {
-        my $this_index =[@$indexes]; # clone the data, not just the reference
+    for ( my $i = 0 ; $i <= $search_boxes_count ; $i++ ) {
+        my $this_index = [@$indexes];   # clone the data, not just the reference
         #@$this_index[$i]->{selected} = "selected";
-        if ($i==0) {
+        if ( $i == 0 ) {
             push @search_boxes_array,
-                {indexes => $this_index,
+              {
+                indexes            => $this_index,
                 search_boxes_label => "<span class='labels'>Search for:</span>",
-                scan_index => "<input type='checkbox' name='scan' id='scan' value='1'/><label for='scan'>Scan Indexes</label>",
+                scan_index         =>
+"<input type='checkbox' name='scan' id='scan' value='1'/><label for='scan'>Scan Indexes</label>",
                 };
         
         }
-        elsif ($i==$search_boxes_count) {
+        elsif ( $i == $search_boxes_count ) {
             push @search_boxes_array,
-                {indexes => $indexes,
-                left_content => " <select name='op'><option value='and' selected='selected'>and</option><option value='or'>or</option><option value='not'>not</option></select>",
-                add_field => "1"};
+              {
+                indexes      => $indexes,
+                left_content =>
+" <select name='op'><option value='and' selected='selected'>and</option><option value='or'>or</option><option value='not'>not</option></select>",
+                add_field => "1"
+              };
         }
         else {
             push @search_boxes_array,
-                {indexes => $indexes,
-                left_content => " <select name='op'><option value='and' selected='selected'>and</option><option value='or'>or</option><option value='not'>not</option></select>",};
+              {
+                indexes      => $indexes,
+                left_content =>
+" <select name='op'><option value='and' selected='selected'>and</option><option value='or'>or</option><option value='not'>not</option></select>",
+              };
         }
     }
-    $template->param(uc(C4::Context->preference("marcflavour")) => 1,
-                      search_boxes_loop => \@search_boxes_array);
+    $template->param(
+        uc( C4::Context->preference("marcflavour") ) => 1,
+        search_boxes_loop                            => \@search_boxes_array
+    );
 
     # load the language limits (for search)
     my $languages_limit_loop = displayLanguagesLimit();
-    $template->param(search_languages_loop => $languages_limit_loop,);
+    $template->param( search_languages_loop => $languages_limit_loop, );
     
     # load the subtype limits
     my $outer_subtype_limits_loop = displaySubtypesLimit();
-    $template->param(outer_subtype_limits_loop => $outer_subtype_limits_loop,);
+    $template->param( outer_subtype_limits_loop => $outer_subtype_limits_loop,
+    );
     
     my $expanded_options;
-    if (C4::Context->preference("expandedSearchOption")){
+    if ( C4::Context->preference("expandedSearchOption") ) {
         $expanded_options = C4::Context->preference("expandedSearchOption");
     }
-    else{
+    else {
         $expanded_options = $cgi->param('expanded_options');
     }
     
-    $template->param(expanded_options => $expanded_options);
+    $template->param( expanded_options => $expanded_options );
 
     # load the sort_by options for the template
     my $sort_by = $cgi->param('sort_by');
     my $sort_by_loop = displaySortby($sort_by);
-    $template->param(sort_by_loop => $sort_by_loop);
+    $template->param( sort_by_loop => $sort_by_loop );
 
     #warn "loading the template";
     output_html_with_http_headers $cgi, $cookie, $template->output;
@@ -341,47 +359,52 @@
 # Params that can have more than one value
 # sort by is used to sort the query
 my @sort_by;
- at sort_by = split("\0",$params->{'sort_by'}) if $params->{'sort_by'};
+ at sort_by = split( "\0", $params->{'sort_by'} ) if $params->{'sort_by'};
+
 # load the sort_by options for the template
 my $sort_by = $params->{'sort_by'};
 my $sort_by_loop = displaySortby($sort_by);
-$template->param(sort_by_loop => $sort_by_loop);
+$template->param( sort_by_loop => $sort_by_loop );
+
 #
 # Use the servers defined, or just search our local catalog(default)
 my @servers;
- at servers = split("\0",$params->{'server'}) if $params->{'server'};
+ at servers = split( "\0", $params->{'server'} ) if $params->{'server'};
 unless (@servers) {
+
     #FIXME: this should be handled using Context.pm
     @servers = ("biblioserver");
+
     # @servers = C4::Context->config("biblioserver");
 }
 
 # operators include boolean and proximity operators and are used
 # to evaluate multiple operands
 my @operators;
- at operators = split("\0",$params->{'op'}) if $params->{'op'};
+ at operators = split( "\0", $params->{'op'} ) if $params->{'op'};
 
 # indexes are query qualifiers, like 'title', 'author', etc. They
 # can be simple or complex
 my @indexes;
- at indexes = split("\0",$params->{'idx'}) if $params->{'idx'};
+ at indexes = split( "\0", $params->{'idx'} ) if $params->{'idx'};
 
 # an operand can be a single term, a phrase, or a complete ccl query
 my @operands;
- at operands = split("\0",$params->{'q'}) if $params->{'q'};
+ at operands = split( "\0", $params->{'q'} ) if $params->{'q'};
 
 # limits are use to limit to results to a pre-defined category such as branch or language
 my @limits;
- at limits = split("\0",$params->{'limit'}) if $params->{'limit'};
+ at limits = split( "\0", $params->{'limit'} ) if $params->{'limit'};
 
 my $available;
-foreach my $limit(@limits) {
-    if ($limit =~/available/) {
+foreach my $limit (@limits) {
+    if ( $limit =~ /available/ ) {
         $available = 1;
     }
 }
-$template->param(available => $available);
-push @limits, map "yr:".$_, split("\0",$params->{'limit-yr'}) if $params->{'limit-yr'};
+$template->param( available => $available );
+push @limits, map "yr:" . $_, split( "\0", $params->{'limit-yr'} )
+  if $params->{'limit-yr'};
 
 # Params that can only have one value
 my $query = $params->{'q'};
@@ -394,27 +417,38 @@
 # Define some global variables
 my $error; # used for error handling
 my $search_desc; # the query expressed in terms that humans understand
-my $koha_query; # the query expressed in terms that zoom understands with field weighting and stemming
+my $koha_query
+  ; # the query expressed in terms that zoom understands with field weighting and stemming
 my $federated_query;
-my $query_type; # usually not needed, but can be used to trigger ccl, cql, or pqf queries if set
+my $query_type
+  ; # usually not needed, but can be used to trigger ccl, cql, or pqf queries if set
 my @results;
 ## I. BUILD THE QUERY
-($error,$search_desc,$koha_query,$federated_query,$query_type) = buildQuery($query,\@operators,\@operands,\@indexes,\@limits);
+( $error, $search_desc, $koha_query, $federated_query, $query_type ) =
+  buildQuery( $query, \@operators, \@operands, \@indexes, \@limits );
+
 # warn "query : $koha_query";
 ## II. DO THE SEARCH AND GET THE RESULTS
 my $total; # the total results for the whole set
-my $facets; # this object stores the faceted results that display on the left-hand of the results page
+my $facets
+  ; # this object stores the faceted results that display on the left-hand of the results page
 my @results_array;
 my $results_hashref;
 
 eval {
 
-    ($error, $results_hashref, $facets) = getRecords($koha_query,$federated_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan);
+    ( $error, $results_hashref, $facets ) = getRecords(
+        $koha_query,     $federated_query,  \@sort_by,
+        \@servers,       $results_per_page, $offset,
+        $expanded_facet, $branches,         $query_type,
+        $scan
+    );
 
 };
-if ($@ || $error) {
-    $template->param(query_error => $error.$@);
-#     warn "error: ".$error.$@;
+if ( $@ || $error ) {
+    $template->param( query_error => $error . $@ );
+
+    #     warn "error: ".$error.$@;
     output_html_with_http_headers $cgi, $cookie, $template->output;
     exit;
 }
@@ -422,62 +456,91 @@
 # At this point, each server has given us a result set
 # now we build that set for template display
 my @sup_results_array;
-for (my $i=0;$i<=@servers;$i++) {
+for ( my $i = 0 ; $i <= @servers ; $i++ ) {
     my $server = $servers[$i];
-    if ($server =~/biblioserver/) { # this is the local bibliographic server
+    if ( $server =~ /biblioserver/ ) {  # this is the local bibliographic server
         $hits = $results_hashref->{$server}->{"hits"};
-        my @newresults = searchResults( $search_desc,$hits,$results_per_page,$offset,@{$results_hashref->{$server}->{"RECORDS"}});
+        my @newresults =
+          searchResults( $search_desc, $hits, $results_per_page, $offset,
+            @{ $results_hashref->{$server}->{"RECORDS"} } );
         $total = $total + $results_hashref->{$server}->{"hits"};
         if ($hits) {
-            $template->param(total => $hits);
-            $template->param(searchdesc => $search_desc );
-            $template->param(results_per_page =>  $results_per_page);
-            $template->param(SEARCH_RESULTS => \@newresults);
+            $template->param( total            => $hits );
+            $template->param( searchdesc       => $search_desc );
+            $template->param( results_per_page => $results_per_page );
+            $template->param( SEARCH_RESULTS   => \@newresults );
 
             my @page_numbers;
-            my $pages = ceil($hits / $results_per_page);
+            my $pages               = ceil( $hits / $results_per_page );
             my $current_page_number = 1;
-            $current_page_number = ($offset / $results_per_page + 1) if $offset;
-            my $previous_page_offset = $offset - $results_per_page unless ($offset - $results_per_page <0);
+            $current_page_number = ( $offset / $results_per_page + 1 )
+              if $offset;
+            my $previous_page_offset = $offset - $results_per_page
+              unless ( $offset - $results_per_page < 0 );
             my $next_page_offset = $offset + $results_per_page;
-            for ($i=1; $i<=$pages;$i++) {
-                my $this_offset = (($i*$results_per_page)-$results_per_page);
+            for ( $i = 1 ; $i <= $pages ; $i++ ) {
+                my $this_offset =
+                  ( ( $i * $results_per_page ) - $results_per_page );
                 my $this_page_number = $i;
-                my $highlight = 1 if ($this_page_number == $current_page_number);
-                push @page_numbers, { offset => $this_offset, pg => $this_page_number, highlight => $highlight, sort_by => join " ", at sort_by };
+                my $highlight        = 1
+                  if ( $this_page_number == $current_page_number );
+                push @page_numbers,
+                  {
+                    offset    => $this_offset,
+                    pg        => $this_page_number,
+                    highlight => $highlight,
+                    sort_by   => join " ",
+                    @sort_by
+                  };
             }
-            $template->param(PAGE_NUMBERS => \@page_numbers,
+            $template->param(
+                PAGE_NUMBERS         => \@page_numbers,
                             previous_page_offset => $previous_page_offset,
-                            next_page_offset => $next_page_offset) unless $pages < 2;
+                next_page_offset     => $next_page_offset
+            ) unless $pages < 2;
         }
     } # end of the if local
     else {
+
         # check if it's a z3950 or opensearch source
         my $zed3950 = 0;  # FIXME :: Hardcoded value.
         if ($zed3950) {
             my @inner_sup_results_array;
-            for my $sup_record ( @{$results_hashref->{$server}->{"RECORDS"}} ) {
-                my $marc_record_object = MARC::Record->new_from_usmarc($sup_record);
-                my $control_number = $marc_record_object->field('010')->subfield('a') if $marc_record_object->field('010');
+            for my $sup_record ( @{ $results_hashref->{$server}->{"RECORDS"} } )
+            {
+                my $marc_record_object =
+                  MARC::Record->new_from_usmarc($sup_record);
+                my $control_number =
+                  $marc_record_object->field('010')->subfield('a')
+                  if $marc_record_object->field('010');
                 $control_number =~ s/^ //g;
-                my $link = "http://catalog.loc.gov/cgi-bin/Pwebrecon.cgi?SAB1=".$control_number."&BOOL1=all+of+these&FLD1=LC+Control+Number+LCCN+%28K010%29+%28K010%29&GRP1=AND+with+next+set&SAB2=&BOOL2=all+of+these&FLD2=Keyword+Anywhere+%28GKEY%29+%28GKEY%29&PID=6211&SEQ=20060816121838&CNT=25&HIST=1";
+                my $link =
+                    "http://catalog.loc.gov/cgi-bin/Pwebrecon.cgi?SAB1="
+                  . $control_number
+                  . "&BOOL1=all+of+these&FLD1=LC+Control+Number+LCCN+%28K010%29+%28K010%29&GRP1=AND+with+next+set&SAB2=&BOOL2=all+of+these&FLD2=Keyword+Anywhere+%28GKEY%29+%28GKEY%29&PID=6211&SEQ=20060816121838&CNT=25&HIST=1";
                 my $title = $marc_record_object->title();
-                push @inner_sup_results_array, {
+                push @inner_sup_results_array,
+                  {
                     'title' => $title,
                     'link' => $link,
                 };
             }
             my $servername = $server;
-            push @sup_results_array, { servername => $servername, inner_sup_results_loop => \@inner_sup_results_array};
-            $template->param(outer_sup_results_loop => \@sup_results_array);
+            push @sup_results_array,
+              {
+                servername             => $servername,
+                inner_sup_results_loop => \@inner_sup_results_array
+              };
+            $template->param( outer_sup_results_loop => \@sup_results_array );
         }
     }
 
 } #/end of the for loop
-#$template->param(FEDERATED_RESULTS => \@results_array);
 
+#$template->param(FEDERATED_RESULTS => \@results_array);
 
 $template->param(
+
             #classlist => $classlist,
             total => $total,
             searchdesc => $search_desc,
@@ -492,49 +555,60 @@
             opacsmallimage => C4::Context->preference("opacsmallimage"),
             opaclayoutstylesheet => C4::Context->preference("opaclayoutstylesheet"),
             opaccolorstylesheet => C4::Context->preference("opaccolorstylesheet"),
-            "BiblioDefaultView".C4::Context->preference("IntranetBiblioDefaultView") => 1,
+    "BiblioDefaultView"
+      . C4::Context->preference("IntranetBiblioDefaultView") => 1,
             scan_use => $scan,
             search_error => $error,
 );
 ## Now let's find out if we have any supplemental data to show the user
 #  and in the meantime, save the current query for statistical purposes, etc.
 my $koha_spsuggest; # a flag to tell if we've got suggestions coming from Koha
-my @koha_spsuggest; # place we store the suggestions to be returned to the template as LOOP
+my @koha_spsuggest
+  ;    # place we store the suggestions to be returned to the template as LOOP
 my $phrases = $search_desc;
 my $ipaddress;
 
 if ( C4::Context->preference("kohaspsuggest") ) {
         eval {
             my $koha_spsuggest_dbh;
+
             # FIXME: this needs to be moved to Context.pm
             eval {
-                $koha_spsuggest_dbh=DBI->connect("DBI:mysql:suggest:66.213.78.76","auth","Free2cirC");
+            $koha_spsuggest_dbh =
+              DBI->connect( "DBI:mysql:suggest:66.213.78.76",
+                "auth", "Free2cirC" );
             };
-            if ($@) { warn "can't connect to spsuggest db";
+        if ($@) {
+            warn "can't connect to spsuggest db";
             }
             else {
-                my $koha_spsuggest_insert = "INSERT INTO phrase_log(phr_phrase,phr_resultcount,phr_ip) VALUES(?,?,?)";
-                my $koha_spsuggest_query = "SELECT display FROM distincts WHERE strcmp(soundex(suggestion), soundex(?)) = 0 order by soundex(suggestion) limit 0,5";
-                my $koha_spsuggest_sth = $koha_spsuggest_dbh->prepare($koha_spsuggest_query);
+            my $koha_spsuggest_insert =
+"INSERT INTO phrase_log(phr_phrase,phr_resultcount,phr_ip) VALUES(?,?,?)";
+            my $koha_spsuggest_query =
+"SELECT display FROM distincts WHERE strcmp(soundex(suggestion), soundex(?)) = 0 order by soundex(suggestion) limit 0,5";
+            my $koha_spsuggest_sth =
+              $koha_spsuggest_dbh->prepare($koha_spsuggest_query);
                 $koha_spsuggest_sth->execute($phrases);
-                while (my $spsuggestion = $koha_spsuggest_sth->fetchrow_array) {
+            while ( my $spsuggestion = $koha_spsuggest_sth->fetchrow_array ) {
                     $spsuggestion =~ s/(:|\/)//g;
                     my %line;
                     $line{spsuggestion} = $spsuggestion;
-                    push @koha_spsuggest,\%line;
+                push @koha_spsuggest, \%line;
                     $koha_spsuggest = 1;
                 }
+
                 # Now save the current query
-                $koha_spsuggest_sth=$koha_spsuggest_dbh->prepare($koha_spsuggest_insert);
+            $koha_spsuggest_sth =
+              $koha_spsuggest_dbh->prepare($koha_spsuggest_insert);
+
                 #$koha_spsuggest_sth->execute($phrases,$results_per_page,$ipaddress);
                 $koha_spsuggest_sth->finish;
                 $template->param( koha_spsuggest => $koha_spsuggest ) unless $hits;
-                $template->param( SPELL_SUGGEST => \@koha_spsuggest,
-                );
+            $template->param( SPELL_SUGGEST => \@koha_spsuggest, );
             }
     };
     if ($@) {
-            warn "Kohaspsuggest failure:".$@;
+        warn "Kohaspsuggest failure:" . $@;
     }
 }
 





More information about the Koha-cvs mailing list