koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Antoine Farnault
Subject: [Koha-cvs] koha/opac opac-search.pl [rel_3_0]
Date: Fri, 08 Dec 2006 15:21:06 +0000

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 => address@hidden,);
+$template->param( branchloop => address@hidden, );
 
 # 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 => address@hidden);
+$template->param( itemtypeloop => address@hidden );
 
 # # load the itypes (Called item types in the template -- just authorized 
values for searching)
 # my ($itypecount,@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 address@hidden; # clone the data, not just the reference
+    for ( my $i = 0 ; $i <= $search_boxes_count ; $i++ ) {
+        my $this_index = address@hidden;   # clone the data, not just the 
reference
         address@hidden>{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 => address@hidden);
+    $template->param(
+        uc( C4::Context->preference("marcflavour") ) => 1,
+        search_boxes_loop                            => address@hidden
+    );
 
     # 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;
address@hidden = split("\0",$params->{'sort_by'}) if $params->{'sort_by'};
address@hidden = 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;
address@hidden = split("\0",$params->{'server'}) if $params->{'server'};
address@hidden = 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;
address@hidden = split("\0",$params->{'op'}) if $params->{'op'};
address@hidden = split( "\0", $params->{'op'} ) if $params->{'op'};
 
 # indexes are query qualifiers, like 'title', 'author', etc. They
 # can be simple or complex
 my @indexes;
address@hidden = split("\0",$params->{'idx'}) if $params->{'idx'};
address@hidden = split( "\0", $params->{'idx'} ) if $params->{'idx'};
 
 # an operand can be a single term, a phrase, or a complete ccl query
 my @operands;
address@hidden = split("\0",$params->{'q'}) if $params->{'q'};
address@hidden = 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;
address@hidden = split("\0",$params->{'limit'}) if $params->{'limit'};
address@hidden = 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,address@hidden,address@hidden,address@hidden,address@hidden);
+( $error, $search_desc, $koha_query, $federated_query, $query_type ) =
+  buildQuery( $query, address@hidden, address@hidden, address@hidden, 
address@hidden );
+
 # 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,address@hidden,address@hidden,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan);
+    ( $error, $results_hashref, $facets ) = getRecords(
+        $koha_query,     $federated_query,  address@hidden,
+        address@hidden,       $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<address@hidden;$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 => address@hidden);
+            $template->param( total            => $hits );
+            $template->param( searchdesc       => $search_desc );
+            $template->param( results_per_page => $results_per_page );
+            $template->param( SEARCH_RESULTS   => address@hidden );
 
             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 " ",@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 => address@hidden,
+            $template->param(
+                PAGE_NUMBERS         => address@hidden,
                             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 => address@hidden;
-            $template->param(outer_sup_results_loop => address@hidden);
+            push @sup_results_array,
+              {
+                servername             => $servername,
+                inner_sup_results_loop => address@hidden
+              };
+            $template->param( outer_sup_results_loop => address@hidden );
         }
     }
 
 } #/end of the for loop
-#$template->param(FEDERATED_RESULTS => address@hidden);
 
+#$template->param(FEDERATED_RESULTS => address@hidden);
 
 $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 => address@hidden,
-                );
+            $template->param( SPELL_SUGGEST => address@hidden, );
             }
     };
     if ($@) {
-            warn "Kohaspsuggest failure:".$@;
+        warn "Kohaspsuggest failure:" . $@;
     }
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]