[Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week]
Joshua Ferraro
jmf at kados.org
Thu Jun 8 03:38:30 CEST 2006
CVSROOT: /sources/koha
Module name: koha
Branch: dev_week
Changes by: Joshua Ferraro <kados> 06/06/08 01:38:30
Modified files:
opac : opac-zoomsearch.pl
Log message:
fixing several bugs ... still a few more to
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/opac/opac-zoomsearch.pl?cvsroot=koha&only_with_tag=dev_week&r1=1.1.2.5&r2=1.1.2.6
Patches:
Index: opac-zoomsearch.pl
===================================================================
RCS file: /sources/koha/koha/opac/Attic/opac-zoomsearch.pl,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -b -r1.1.2.5 -r1.1.2.6
--- opac-zoomsearch.pl 7 Jun 2006 21:17:27 -0000 1.1.2.5
+++ opac-zoomsearch.pl 8 Jun 2006 01:38:30 -0000 1.1.2.6
@@ -36,20 +36,24 @@
# query into PQF format so we can use the Koha API properly
my ($error,$pqf_sort_by, $pqf_prox_ops, $pqf_bool_ops, $pqf_query) = cgi2pqf($query);
warn "AFTER CGI: $pqf_sort_by $pqf_prox_ops $pqf_bool_ops $pqf_query";
+
+ # lets store the query details in an array for later
push @forminputs, { field => "cql_query" , value => $cql_query} ;
- push @forminputs, {field => 'pqf_sort_by', value => $pqf_sort_by} ;
- push @forminputs, {field => 'pqf_prox_ops', value => $pqf_prox_ops};
+ push @forminputs, { field => 'pqf_sort_by', value => $pqf_sort_by} ;
+ push @forminputs, { field => 'pqf_prox_ops', value => $pqf_prox_ops};
push @forminputs, { field => 'pqf_bool_ops' , value => $pqf_bool_ops};
push @forminputs, { field => 'pqf_query' , value => $pqf_query };
- $searchdesc=$cql_query.$pqf_query;
+ $searchdesc=$cql_query.$pqf_query; # FIXME: this should be a more use-friendly string
+
# STEP 2. OK, now we have PQF, so we can pass off the query to
# the API
- my $reorder=$query->param('reorder_query');
my ($count, @results);
+
+ # CQL queries are handled differently, so alert our API and pass in the variables
if ($query->param('cql_query')) {
- ($count, at results) = searchZOOM('cql',$cql_query,$reorder,$number_of_results,$startfrom);
+ ($count, at results) = searchZOOM('cql',$cql_query,$number_of_results,$startfrom);
} else {
- ($count, at results) = searchZOOM('pqf',"$pqf_sort_by $pqf_prox_ops $pqf_bool_ops $pqf_query",$reorder,$number_of_results,$startfrom);
+ ($count, at results) = searchZOOM('pqf',"$pqf_sort_by $pqf_prox_ops $pqf_bool_ops $pqf_query",$number_of_results,$startfrom);
}
@newresults=searchResults( $number_of_results, at results) ;
my $num = scalar(@newresults);
@@ -63,7 +67,6 @@
$template->param(total => $count);
$template->param(FORMINPUTS => \@forminputs);
$template->param(searchdesc => $searchdesc );
- $template->param(reorder => $reorder );
$template->param(results_per_page => $number_of_results );
$template->param(SEARCH_RESULTS => \@newresults);
@@ -93,7 +96,7 @@
}
my $current_ten = $pg / 10;
if ($current_ten == 0) {
- $current_ten = 0.1; # In case it´s in ten = 0
+ $current_ten = 0.1; # In case it's in ten = 0
}
my $from = $current_ten * 10; # Calculate the initial page
my $end_ten = $from + 9;
@@ -199,11 +202,11 @@
###Move these subs to a proper Search.pm
sub searchZOOM {
use C4::Biblio;
- my ($type,$query,$reorder,$num,$startfrom) = @_;
+ my ($type,$query,$num,$startfrom) = @_;
my $dbh = C4::Context->dbh;
my $zconn=C4::Context->Zconn("biblioserver");
- warn ($type,$query,$reorder,$num,$startfrom) ;
+ warn ($type,$query,$num,$startfrom) ;
if ($zconn eq "error") {
return("error with connection",undef); #FIXME: better error handling
}
@@ -229,13 +232,6 @@
if ($@) {
return("error with search: $@",undef); #FIXME: better error handling
}
-
-# if ($reorder){
-# warn $reorder;
-# if($result->sort("yaz","$reorder")<0){
-# warn "sort did not work";
-# }
-# }
my $i;
my $numresults = $result->size() if ($result);
my @results;
@@ -266,10 +262,18 @@
# bunch of places to store the various queries we're working with
my $cql_query = $query->param('cql_query');
+
my $pqf_query = $query->param('pqf_query');
- my $pqf_sort_by = $query->param('pqf_sort_by');
+ my @pqf_query_array;
+ my @counting_pqf_query_array;
+
my $pqf_prox_ops = $query->param('pqf_prox_ops');
+ my @pqf_prox_ops_array;
+
my $pqf_bool_ops = $query->param('pqf_bool_ops');
+ my @pqf_bool_ops_array;
+
+ my $pqf_sort_by = $query->param('pqf_sort_by');
# operators:
@@ -293,18 +297,18 @@
# First, process the 'operators' and put them in a separate variable
# proximity and boolean
foreach my $spec_attr (@specific_attributes) {
- for (my $i=1;$i<10;$i++) {
+ for (my $i=1;$i<15;$i++) {
if ($query->param("query$i")) { # make sure this set should be used
if ($spec_attr =~ /^op/) { # process the operators separately
- $pqf_bool_ops .= " ".$query->param("$spec_attr$i");
+ push @pqf_bool_ops_array, $query->param("$spec_attr$i");
} elsif ($spec_attr =~ /^prox/) { # process the proximity operators separately
if ($query->param("$spec_attr$i")) {
warn "PQF:".$query->param("$spec_attr$i");
- $pqf_prox_ops .= " ".$query->param("$spec_attr$i");
+ push @pqf_prox_ops_array,$query->param("$spec_attr$i");
} else {
if (($spec_attr =~ /^prox_exclusion/) || ($spec_attr =~ /^prox_ordered/)) { # this is an exception, sloppy way to handle it
if ($i==2) {
- $pqf_prox_ops .=" 0";
+ push @pqf_prox_ops_array,0;
}
}
}
@@ -315,22 +319,41 @@
# by now, we have two variables: $pqf_bool_ops (boolean) and $pqf_prox_ops (proximity)
# Now, process the attributes
- for (my $i=1;$i<10;$i++) {
+ for (my $i=1;$i<15;$i++) {
foreach my $spec_attr (@specific_attributes) {
if ($query->param("query$i")) {
if ($spec_attr =~ /^query/) {
- if ($query->param("$spec_attr$i") =~ /@/) { # don't wrap in quotes if the query is PQF
- $pqf_query .= " ".$query->param("$spec_attr$i");
- } else {
- $pqf_query .= " \"".$query->param("$spec_attr$i")."\"";
- }
+ push @counting_pqf_query_array,$query->param("$spec_attr$i") if $query->param("$spec_attr$i");
+ push @pqf_query_array,$query->param("$spec_attr$i") if $query->param("$spec_attr$i")
} elsif ($spec_attr =~ /^op/) { # don't process the operators again
} elsif ($spec_attr =~ /^prox/) {
} else {
- $pqf_query .= " ".$query->param("$spec_attr$i");
+ push @pqf_query_array,$query->param("$spec_attr$i") if $query->param("$spec_attr$i");
+ }
+ }
}
}
+
+ my $count_pqf_query = @counting_pqf_query_array;
+ my $count_pqf_bool_ops = @pqf_bool_ops_array;
+
+ if ($count_pqf_bool_ops == $count_pqf_query-1) {
+ for (my $i=$count_pqf_query;$i>=0;$i--) {
+ $pqf_bool_ops.=" ".$pqf_bool_ops_array[$i];
+ }
+ foreach my $que(@pqf_query_array) {
+ $pqf_query .=" ".$que;
}
+ } else {
+ warn "problem example:".$count_pqf_bool_ops." ".$count_pqf_query;
+
+ for (my $i=$count_pqf_query;$i>=1;$i--) {
+ $pqf_bool_ops.=" ".$pqf_bool_ops_array[$i];
+ }
+ foreach my $que(@pqf_query_array) {
+ $pqf_query .=" ".$que;
+ }
+
}
warn "Boolean Operators: ".$pqf_bool_ops if $pqf_bool_ops;
warn "Proximigy Operators: ".$pqf_prox_ops if $pqf_prox_ops;
More information about the Koha-cvs
mailing list