[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week]
From: |
Tumer Garip |
Subject: |
[Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week] |
Date: |
Wed, 07 Jun 2006 16:52:06 +0000 |
CVSROOT: /sources/koha
Module name: koha
Branch: dev_week
Changes by: Tumer Garip <tgarip1957> 06/06/07 16:52:06
Modified files:
opac : opac-zoomsearch.pl
Log message:
Now shows the results on opac-results.tmpl
Page navigation works but nothing else yet
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/opac/opac-zoomsearch.pl?cvsroot=koha&only_with_tag=dev_week&r1=1.1.2.1&r2=1.1.2.2
Patches:
Index: opac-zoomsearch.pl
===================================================================
RCS file: /sources/koha/koha/opac/Attic/opac-zoomsearch.pl,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -b -r1.1.2.1 -r1.1.2.2
--- opac-zoomsearch.pl 5 Jun 2006 13:11:01 -0000 1.1.2.1
+++ opac-zoomsearch.pl 7 Jun 2006 16:52:06 -0000 1.1.2.2
@@ -1,18 +1,20 @@
#!/usr/bin/perl
-use strict; use warnings;
+use strict;
# load our Koha modules
use C4::Context;
use C4::Interface::CGI::Output;
use C4::Auth;
-
+use POSIX qw(ceil floor);
# load other modules
use HTML::Template;
use CGI;
my $query=new CGI;
my $op = $query->param('op'); #show the search form or execute the search
my $query_form = $query->param('query_form'); # which query form was submitted
+my @newresults;
my ($template,$borrowernumber,$cookie);
-
+my @forminputs; #this is for the links to navigate among the
results when they are more than the maximum number of results per page
+my @searchdesc;
## Check if we're searching
if ($op eq 'get_results') { # Yea, we're searching, load the results template
($template, $borrowernumber, $cookie)
@@ -23,58 +25,113 @@
my $number_of_results = $query->param('results_per_page');
$number_of_results = 20 unless ($number_of_results); #this could be a
parameter with 20 50 or 100 results per page
-my $offset=$query->param('offset');
-($offset) || ($offset=0);
-
+my $startfrom = $query->param('startfrom');
+ ($startfrom) || ($startfrom=0);
+# push @forminputs, {field => "results_per_page", value =>
$number_of_results};
## OK, We're searching
# STEP 1. We're a CGI script,so first thing to do is get the
# query into PQF format so we can use the Koha API properly
my $cql_query = $query->param('cql_query');
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";
+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_bool_ops' , value => $pqf_bool_ops};
+push @forminputs, { field => 'pqf_query' , value => $pqf_query };
# STEP 2. OK, now we have PQF, so we can pass off the query to
# the API
my ($count, @results);
if ($query->param('cql_query')) {
- ($count,@results) =
searchZOOM('cql',$cql_query,$number_of_results,$offset);
+ ($count,@results) = searchZOOM('cql',$cql_query);
} else {
- ($count,@results) = searchZOOM('pqf',"$pqf_sort_by $pqf_prox_ops
$pqf_bool_ops $pqf_query",$number_of_results,$offset);
-}
-if ($count =~ /^error/) {
- print $query->header();
- print $count;
- die;
-}
-
-print $query->header();
-print "Success:".$count;
-
-print "
-
-Resort by:
-<form action='/cgi-bin/koha/opac-zoomsearch.pl' method='get'>
- <input type='hidden' name='query_form' value='pqf'/>
- <input type='hidden' name='op' value='get_results'/>
- <select name='pqf_query'>
- <option value='' selected>Relevance</option>
- <option value='address@hidden address@hidden
address@hidden 7=1 address@hidden 1=4 0 address@hidden 7=2 address@hidden 1=30
1 $pqf_prox_ops $pqf_bool_ops $pqf_query'>Title Ascending, Date
Descending</option>
- <option value='address@hidden address@hidden
address@hidden 7=1 address@hidden 1=1003 0 address@hidden 7=2 address@hidden
1=30 1 $pqf_prox_ops $pqf_bool_ops $pqf_query'>Author Ascending, Date
Descending</option>
- <option value='address@hidden address@hidden
address@hidden 7=2 address@hidden 1=32 0 address@hidden 7=2 address@hidden 1=30
1 $pqf_prox_ops $pqf_bool_ops $pqf_query'>Date of Acquisition,
Relevance</option>
- <option value='address@hidden address@hidden
address@hidden 7=2 address@hidden 1=30 0 address@hidden 7=2 address@hidden 1=4
1 $pqf_prox_ops $pqf_bool_ops $pqf_query'>Date of Publication,
Relevance</option>
-
- </select>
-
- <input type='submit' value='resort'/>
-</form>
-
-";
-my $c;
-foreach my $res (@results) {
- $c++;
- my $marc = MARC::Record->new_from_usmarc($res);
- print "$c. ".$marc->title()."<br/><br/>";
+ ($count,@results) = searchZOOM('pqf',"$pqf_sort_by $pqf_prox_ops
$pqf_bool_ops $pqf_query");
}
+
+
+
address@hidden( $number_of_results,$count,$startfrom,@results) ;
+ my $num = scalar(@newresults);
+ # sorting out which results to display.
+ # the result number to start to show
+ $template->param(starting => $startfrom+1);
+ $template->param(ending => $startfrom+$number_of_results);
+ # the result number to end to show
+ ($startfrom+$num<=$count) ? ($template->param(endat =>
$startfrom+$num)) : ($template->param(endat => $count));
+ # the total results searched
+ $template->param(total => $count);
+ $template->param(FORMINPUTS => address@hidden);
+# $template->param(searchdesc => address@hidden );
+
+ $template->param(results_per_page => $number_of_results );
+ $template->param(SEARCH_RESULTS => address@hidden);
+
+ #this is to show the page numbers to navigate among the results,
whether it has to show the number highlighted or not
+ my $numbers;
+ @$numbers = ();
+ my $pg = 1;
+ if (defined($query->param('pg'))) {
+ $pg = $query->param('pg');
+ }
+ my $start = 0;
+
+ $start = ($pg - 1) * $number_of_results;
+ my $pages = ceil($count / $number_of_results);
+ my $total_pages = ceil($count / $number_of_results);
+ my $url;
+ if ($pg > 1) {
+ $url = $pg - 1;
+ push @$numbers, { number => "<<",
+ highlight => 0 ,
+ startfrom => 0,
+ pg => '1' };
+ push @$numbers, { number => "<",
+ highlight => 0 ,
+ startfrom =>
($url-1)*$number_of_results,
+ pg => $url };
+ }
+ my $current_ten = $pg / 10;
+ if ($current_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;
+ my $to;
+ if ($pages > $end_ten) {
+ $to = $end_ten;
+ } else {
+ $to = $pages;
+ }
+ for (my $i =$from; $i <= $to ; $i++) {
+ if ($i == $pg) {
+ if ($count > $number_of_results) {
+ push @$numbers, { number => $i,
+ highlight =>
1 ,
+ startfrom =>
($i-1)*$number_of_results ,
+ pg => $i };
+ }
+ } else {
+ push @$numbers, { number => $i,
+ highlight => 0 ,
+ startfrom =>
($i-1)*$number_of_results ,
+ pg => $i };
+ }
+ }
+ if ($pg < $pages) {
+ $url = $pg + 1;
+ push @$numbers, { number => ">",
+ highlight => 0 ,
+ startfrom =>
($url-1)*$number_of_results,
+ pg => $url };
+ push @$numbers, { number => ">>",
+ highlight => 0 ,
+ startfrom =>
($total_pages-1)*$number_of_results,
+ pg => $total_pages};
+ }
+
+ $template->param(numbers => $numbers);
+
} else {
($template, $borrowernumber, $cookie)
@@ -84,26 +141,26 @@
authnotrequired => 1,
});
-output_html_with_http_headers $query, $cookie, $template->output;
+
}
+output_html_with_http_headers $query, $cookie, $template->output;
+###Move these subs to a proper Search.pm
sub searchZOOM {
use C4::Biblio;
- my ($type,$query,$num,$offset) = @_;
+ my ($type,$query) = @_;
my $dbh = C4::Context->dbh;
my $zconn=C4::Context->Zconn("biblioserver");
if ($zconn eq "error") {
return("error with connection",undef); #FIXME: better error
handling
}
- my $limit = $num + $offset;
- my $startfrom = $offset;
- my $zoom_query_obj;
+ my $zoom_query_obj;
eval {
if ($type eq 'cql') {
- $zoom_query_obj = new ZOOM::Query::CQL2RPN($query,$zconn);
+ $zoom_query_obj = new ZOOM::Query::CQL($query,$zconn);
} else {
$zoom_query_obj = new ZOOM::Query::PQF($query);
}
@@ -122,7 +179,7 @@
}
my $numresults = $result->size() if ($result);
my @results;
- for (my $i=$startfrom; $i<=$limit;$i++) {
+ for (my $i=0; $i<$numresults;$i++) {
my $rec = $result->record($i);
push(@results,$rec->raw()) if $rec;
}
@@ -132,7 +189,7 @@
# build a valid PQF query from the CGI form
sub cgi2pqf {
my ($query) = @_;
-
+warn "CGI 2 PQF conversion";
my @default_attributes = ('sort_by');
# attributes specific to the advanced search - a search_point is
actually a combination of
# several bib1 attributes
@@ -221,3 +278,151 @@
warn "Full PQF: $pqf_sort_by $pqf_prox_ops $pqf_bool_ops $pqf_query";
return ('',$pqf_sort_by, $pqf_prox_ops, $pqf_bool_ops, $pqf_query);
}
+
+
+
+sub searchResults {
+my ($num,$numresults,$startfrom,@marcresults)address@hidden;
+use C4::Date;
+
+my $dbh= C4::Context->dbh;
+my $toggle;
+my $even=1;
+my @newresults;
+#Build brancnames hash
+#find branchname
+#get branch information.....
+my %branches;
+ my $bsth=$dbh->prepare("SELECT branchcode,branchname FROM
branches");
+ $bsth->execute();
+ while (my $bdata=$bsth->fetchrow_hashref){
+ $branches{$bdata->{'branchcode'}}=
$bdata->{'branchname'};
+
+ }
+
+
+
+#search item field code
+ my $sth =
+ $dbh->prepare(
+"select tagfield from marc_subfield_structure where kohafield like
'items.itemnumber'"
+ );
+ $sth->execute;
+ my ($itemtag) = $sth->fetchrow;
+## find column names of items related to MARC
+my $sth2=$dbh->prepare("SHOW COLUMNS from items");
+ $sth2->execute;
+my %subfieldstosearch;
+while ((my $column)=$sth2->fetchrow){
+my ($tagfield,$tagsubfield) =
&MARCfind_marc_from_kohafield($dbh,"items.".$column,"");
+$subfieldstosearch{$column}=$tagsubfield;
+}
+
+ for ( my $i=$startfrom; $i<(($startfrom+$num<=$numresults) ?
($startfrom+$num):$numresults) ; $i++){
+
+ my $marcrecord;
+ $marcrecord = MARC::File::USMARC::decode($marcresults[$i]);
+ my $oldbiblio = MARCmarc2koha($dbh,$marcrecord,'');
+ if ($i % 2) {
+ $toggle="#ffffcc";
+ } else {
+ $toggle="white";
+ }
+ $oldbiblio->{'toggle'}=$toggle;
+
+
+
+ my @fields = $marcrecord->field($itemtag);
+my @items;
+ my $item;
+my %counts;
+$counts{'total'}=0;
+
+#
+##Loop for each item field
+ foreach my $field (@fields) {
+ foreach my $code ( keys %subfieldstosearch ) {
+
+$item->{$code}=$field->subfield($subfieldstosearch{$code});
+}
+
+my $status;
+
+$item->{'branchname'}=$branches{$item->{'holdingbranch'}};
+
+$item->{'date_due'}=$item->{onloan};
+$status="Lost" if ($item->{itemlost});
+$status="Withdrawn" if ($item->{wthdrawn});
+
+ $status="Due:".format_date($item->{onloan}) if ($item->{onloan}>0 );
+
+# $status="On Loan" if ($item->{onloan} );
+if ($item->{'location'}){
+ $status = $item->{'branchname'}."[".$item->{'location'}."]" unless defined
$status;
+}else{
+ $status = $item->{'branchname'} unless defined $status;
+}
+ $counts{$status}++;
+$counts{'total'}++;
+push @items,$item;
+ }
+
+ my $norequests = 1;
+ my $noitems = 1;
+ if (@items) {
+ $noitems = 0;
+ foreach my $itm (@items) {
+ $norequests = 0 unless $itm->{'itemnotforloan'};
+ }
+ }
+ $oldbiblio->{'noitems'} = $noitems;
+ $oldbiblio->{'norequests'} = $norequests;
+ $oldbiblio->{'even'} = $even = not $even;
+ $oldbiblio->{'itemcount'} = $counts{'total'};
+
+ my $totalitemcounts = 0;
+ foreach my $key (keys %counts){
+ if ($key ne 'total'){
+ $totalitemcounts+= $counts{$key};
+
$oldbiblio->{'locationhash'}->{$key}=$counts{$key};
+ }
+ }
+ my ($locationtext, $locationtextonly, $notavailabletext) =
('','','');
+ foreach (sort keys %{$oldbiblio->{'locationhash'}}) {
+ if ($_ eq 'notavailable') {
+ $notavailabletext="Not available";
+ my $c=$oldbiblio->{'locationhash'}->{$_};
+ $oldbiblio->{'not-available-p'}=$c;
+ } else {
+ $locationtext.="$_";
+ my $c=$oldbiblio->{'locationhash'}->{$_};
+ if ($_ eq 'Item Lost') {
+ $oldbiblio->{'lost-p'} = $c;
+ } elsif ($_ eq 'Withdrawn') {
+ $oldbiblio->{'withdrawn-p'} = $c;
+ } elsif ($_ eq 'On Loan') {
+ $oldbiblio->{'on-loan-p'} = $c;
+ } else {
+ $locationtextonly.= $_;
+ $locationtextonly.= " ($c)<br> " if
$totalitemcounts > 1;
+ }
+ if ($totalitemcounts>1) {
+ $locationtext.=" ($c)<br> ";
+ }
+ }
+ }
+ if ($notavailabletext) {
+ $locationtext.= $notavailabletext;
+ } else {
+ $locationtext=~s/, $//;
+ }
+ $oldbiblio->{'location'} = $locationtext;
+ $oldbiblio->{'location-only'} = $locationtextonly;
+ $oldbiblio->{'use-location-flags-p'} = 1;
+
+
+ push (@newresults, $oldbiblio);
+
+ }
+return @newresults;
+ }
\ No newline at end of file
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week], Joshua Ferraro, 2006/06/05
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week],
Tumer Garip <=
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week], Tumer Garip, 2006/06/07
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week], Joshua Ferraro, 2006/06/07
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week], Joshua Ferraro, 2006/06/07
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week], Joshua Ferraro, 2006/06/07
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week], Joshua Ferraro, 2006/06/08
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week], Chris Cormack, 2006/06/09
- [Koha-cvs] koha/opac opac-zoomsearch.pl [dev_week], Joshua Ferraro, 2006/06/10