[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Koha-cvs] koha/z3950 search.pl [dev_week]
From: |
Tumer Garip |
Subject: |
[Koha-cvs] koha/z3950 search.pl [dev_week] |
Date: |
Fri, 03 Nov 2006 00:29:49 +0000 |
CVSROOT: /sources/koha
Module name: koha
Branch: dev_week
Changes by: Tumer Garip <tgarip1957> 06/11/03 00:29:49
Modified files:
z3950 : search.pl
Log message:
A new Z3950 client search using asynchronous ZOOM. It eliminates the
necessity to run any z3950 deamons.
The servers to search can be changed at search time by the cataloguer.
This module makes KOHA fully Windows platform compatible.
The results template needs improvement
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/z3950/search.pl?cvsroot=koha&only_with_tag=dev_week&r1=1.3.2.6&r2=1.3.2.6.2.1
Patches:
Index: search.pl
===================================================================
RCS file: /sources/koha/koha/z3950/search.pl,v
retrieving revision 1.3.2.6
retrieving revision 1.3.2.6.2.1
diff -u -b -r1.3.2.6 -r1.3.2.6.2.1
--- search.pl 18 Feb 2006 10:06:42 -0000 1.3.2.6
+++ search.pl 3 Nov 2006 00:29:49 -0000 1.3.2.6.2.1
@@ -1,5 +1,5 @@
#!/usr/bin/perl
-
+# This is a completely new Z3950 clients search using async ZOOM -TG 02/11/06
# Copyright 2000-2002 Katipo Communications
#
# This file is part of Koha.
@@ -19,69 +19,172 @@
use strict;
use CGI;
+
use C4::Auth;
use C4::Output;
use C4::Interface::CGI::Output;
use C4::Biblio;
use C4::Context;
-use C4::Koha; # XXX subfield_is_koha_internal_p
-use C4::Z3950;
-use C4::Search;
use C4::Breeding;
-use HTML::Template;
use MARC::File::USMARC;
-
-use vars qw( $tagslib );
-use vars qw( $is_a_modif );
-
+use ZOOM;
my $input = new CGI;
my $dbh = C4::Context->dbh;
my $error = $input->param('error');
-my $bibid=$input->param('bibid');
+my $oldbiblionumber=$input->param('oldbiblionumber');
+$oldbiblionumber=0 unless $oldbiblionumber;
my $title = $input->param('title');
my $author = $input->param('author');
my $isbn = $input->param('isbn');
my $issn = $input->param('issn');
my $random = $input->param('random');
+my $op=$input->param('op');
+my $noconnection;
+my $numberpending;
+my $attr='';
+my $term;
+my $host;
+my $server;
+my $database;
+my $port;
+my $marcdata;
+my @encoding;
my @results;
my $count;
my $toggle;
-
my $record;
-my $biblionumber;
-if ($bibid > 0) {
- $record = MARCgetbiblio($dbh,$bibid);
- $biblionumber=MARCfind_oldbiblionumber_from_MARCbibid($dbh,$bibid);
-}
-
+my $oldbiblio;
+my $dbh = C4::Context->dbh;
my $errmsg;
-unless ($random) { # if random is a parameter => we're just waiting for the
search to end, it's a refresh.
- if ($isbn) {
- $random =rand(1000000000);
- $errmsg = addz3950queue($isbn, "isbn", $random, 'CHECKED');
- } elsif ($author) {
- $random =rand(1000000000);
- $errmsg = addz3950queue($author, "author", $random, 'CHECKED');
- } elsif ($title) {
- $random =rand(1000000000);
- $errmsg = addz3950queue($title, "title", $random, 'CHECKED');
- }
+my @serverloop=();
+my @serverhost;
+my @breeding_loop = ();
+
+unless ($random) { # this var is not useful anymore just kept to keep rel2_2
compatibility
+$random =rand(1000000000);
}
-my ($template, $loggedinuser, $cookie)
-= get_template_and_user({template_name => "z3950/searchresult.tmpl",
+
+
+my ($template, $loggedinuser, $cookie)= get_template_and_user({template_name
=> "z3950/searchresult.tmpl",
query => $input,
type => "intranet",
- authnotrequired => 0,
+ authnotrequired => 1,
flagsrequired => {catalogue => 1},
debug => 1,
});
-# fill with books in breeding farm
-($count, @results) = BreedingSearch($title,$isbn,$random);
-my $numberpending= &checkz3950searchdone($random);
-my @breeding_loop = ();
-for (my $i=0; $i <= $#results; $i++) {
+ $template->param( intranetcolorstylesheet =>
C4::Context->preference("intranetcolorstylesheet"),
+ intranetstylesheet =>
C4::Context->preference("intranetstylesheet"),
+ IntranetNav => C4::Context->preference("IntranetNav"));
+
+if ($op ne "do_search"){
+
+my $sth=$dbh->prepare("select id,host,checked from z3950servers order by
host");
+$sth->execute();
+while ($server=$sth->fetchrow_hashref) {
+my %temploop;
+$temploop{server}=$server->{host};
+$temploop{id}=$server->{id};
+$temploop{checked}=$server->{checked};
+push (@serverloop, \%temploop);
+}
+
+$template->param(isbn=>$isbn, issn=>$issn,title=>$title,author=>$author,
+ serverloop => address@hidden,
+ opsearch => "search",
+ oldbiblionumber =>
$oldbiblionumber,
+ );
+output_html_with_http_headers $input, $cookie, $template->output;
+
+}else{
+
+my @id=$input->param('id');
+my @oConnection;
+my @oResult;
+my $s=0;
+ if ($isbn ne "/" ||
$issn ne "/") {
+ $attr='1=7';
+ $term=$isbn if ($isbn
ne"/");
+ $term=$issn if ($issn
ne"/");
+ } elsif ($title ne"/") {
+ $attr='1=4
@attr 4=1 ';
+ $term=$title;
+ } elsif ($author ne
"/") {
+ $attr='1=1003';
+ $term=$author;
+ }
+
+
+my $query="address@hidden $attr \"$term\"";
+
+ foreach my $servid ( @id){
+ my $sth=$dbh->prepare("select * from z3950servers where id=?");
+ $sth->execute($servid);
+
+ while ($server=$sth->fetchrow_hashref) {
+ my $noconnection=0;
+ my $option1=new ZOOM::Options();
+ $option1->option(async=>1);
+ $option1->option('elementSetName', 'F');
+ $option1->option('databaseName',$server->{db}) ;
+ $option1->option('user',$server->{userid}) ;
+ $option1->option('password',$server->{password}) ;
+ $option1->option('preferredRecordSyntax', $server->{syntax});
+ $oConnection[$s]=create ZOOM::Connection($option1);
+ $oConnection[$s]->connect($server->{name}, $server->{port});
+ $serverhost[$s]=$server->{host};
+ $encoding[$s]=$server->{syntax};
+ $s++;
+ }## while fetch
+
+ }# foreach
+my $nremaining = $s;
+my $firstresult=1;
+ for (my $z=0 ;$z<$s;$z++){
+$oResult[$z] = $oConnection[$z]->search_pqf($query);
+
+}
+AGAIN:
+ my $k;
+my $event;
+ while (($k = ZOOM::event(address@hidden)) != 0) {
+ $event = $oConnection[$k-1]->last_event();
+# warn ("connection ", $k-1, ": event $event (", ZOOM::event_str($event),
")\n");
+ last if $event == ZOOM::Event::ZEND;
+ }
+if ($k != 0) {
+ $k--;
+#warn $serverhost[$k];
+ my($error, $errmsg, $addinfo, $diagset) = $oConnection[$k]->error_x();
+ if ($error) {
+
+# warn "$k $serverhost[$k] error $query: $errmsg ($error) $addinfo\n";
+ goto MAYBE_AGAIN;
+ }
+
+ my $numresults=$oResult[$k]->size() ;
+
+ my $i;
+ my $result='';
+ @breeding_loop = ();
+
+ if ($numresults>0){
+ for ($i=0; $i<(($numresults<5) ? ($numresults) : (5)) ; $i++) {
+ my $rec=$oResult[$k]->record($i);
+ my $marcrecord;
+ $marcdata = $rec->raw();
+ $marcrecord = MARC::File::USMARC::decode($marcdata);
+####WARNING records coming from Z3950 clients are in various character sets
MARC8,UTF8,UNIMARC etc
+## In HEAD i change everything to UTF-8
+# In rel2_2 i am not sure what encoding is so no character conversion is done
here
+##Add necessary encoding changes to here -TG
+
+ my $oldbiblio = MARCmarc2koha($dbh,$marcrecord,"");
+ $oldbiblio->{isbn} =~ s/ |-|\.//g,
+ $oldbiblio->{issn} =~ s/ |-|\.//g,
+
+my
($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported,$bid)=ImportBreeding($marcdata,1,$serverhost[$k],$encoding[$k],$random);
my %row_data;
if ($i % 2) {
$toggle="#ffffcc";
@@ -89,26 +192,32 @@
$toggle="white";
}
$row_data{toggle} = $toggle;
- $row_data{id} = $results[$i]->{'id'};
- $row_data{isbn} = $results[$i]->{'isbn'};
- $row_data{file} = $results[$i]->{'file'};
- $row_data{title} = $results[$i]->{'title'};
- $row_data{author} = $results[$i]->{'author'};
+ $row_data{server} = $serverhost[$k];
+ $row_data{isbn} = $oldbiblio->{isbn};
+
+ $row_data{title} =$oldbiblio->{title};
+ $row_data{author} = $oldbiblio->{author};
+ $row_data{id} = $bid;
+ $row_data{oldbiblionumber}=$oldbiblionumber;
push (@breeding_loop, \%row_data);
-}
-$template->param(isbn => $isbn,
- title => $title,
- author => $author,
- breeding_loop => address@hidden,
- refresh => ($numberpending eq 0 ? "" :
"search.pl?bibid=$bibid&random=$random"),
+
+ }# upto 5 results
+ }#$numresults
+}# if $k !=0
+
+
+$numberpending=$nremaining-1;
+ $template->param(breeding_loop =>
address@hidden,server=>$serverhost[$k],
numberpending => $numberpending,
- oldbiblionumber => $biblionumber,
- intranetcolorstylesheet =>
C4::Context->preference("intranetcolorstylesheet"),
- intranetstylesheet =>
C4::Context->preference("intranetstylesheet"),
- IntranetNav => C4::Context->preference("IntranetNav"),
);
-print $input->header(
--type => guesstype($template->output),
--cookie => $cookie
-),$template->output;
+output_html_with_http_headers $input, "", $template->output if $firstresult==1;
+
+print $template->output if $firstresult !=1;
+$firstresult++;
+
+MAYBE_AGAIN:
+if (--$nremaining > 0) {
+ goto AGAIN;
+}
+} ## if op=search
- [Koha-cvs] koha/z3950 search.pl [dev_week],
Tumer Garip <=