[Koha-cvs] CVS: koha/z3950 processz3950queue,1.3,1.4 z3950-daemon-launch.sh,1.1,1.2 z3950-daemon-shell.sh,1.1,1.2

Paul POULAIN tipaul at users.sourceforge.net
Tue Apr 29 18:49:01 CEST 2003


Update of /cvsroot/koha/koha/z3950
In directory sc8-pr-cvs1:/tmp/cvs-serv3884/z3950

Modified Files:
	processz3950queue z3950-daemon-launch.sh z3950-daemon-shell.sh 
Log Message:
really proud of this commit :-)
z3950 search and import seems to works fine.
Let me explain how :
* a "search z3950" button is added in the addbiblio template.
* when clicked, a popup appears and z3950/search.pl is called
* z3950/search.pl calls addz3950search in the DB
* the z3950 daemon retrieve the records and stores them in z3950results AND in marc_breeding table.
* as long as there as searches pending, the popup auto refresh every 2 seconds, and says how many searches are pending.
* when the user clicks on a z3950 result => the parent popup is called with the requested biblio, and auto-filled

Note :
* character encoding support : (It's a nightmare...) In the z3950servers table, a "encoding" column has been added. You can put "UNIMARC" or "USMARC" in this column. Depending on this, the char_decode in C4::Biblio.pm replaces marc-char-encode by an iso 8859-1 encoding. Note that in the breeding import this value has been added too, for a better support.
* the marc_breeding and z3950* tables have been modified : they have an encoding column and the random z3950 number is stored too for convenience => it's the key I use to list only requested biblios in the popup.


Index: processz3950queue
===================================================================
RCS file: /cvsroot/koha/koha/z3950/processz3950queue,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** processz3950queue	29 Apr 2003 08:09:42 -0000	1.3
--- processz3950queue	29 Apr 2003 16:48:25 -0000	1.4
***************
*** 51,59 ****
  	if ((time-$lastrun)>5) {
  		print "starting loop\n";
  		if ($checkqueue) { # everytime a SIG{HUP} is recieved
  			$checkqueue=0;
! 			my $sth=$dbh->prepare("select id,term,type,servers from z3950queue order by id");
  			$sth->execute;
! 			while (my ($id, $term, $type, $servers) = $sth->fetchrow) {
  				if ($forkcounter<12) {
  					my $now=time();
--- 51,60 ----
  	if ((time-$lastrun)>5) {
  		print "starting loop\n";
+ 		$checkqueue = 1; # FIXME during testing, this line forces the loop. REMOVE it to use SIG{HUP} when "daemonized" !
  		if ($checkqueue) { # everytime a SIG{HUP} is recieved
  			$checkqueue=0;
! 			my $sth=$dbh->prepare("select id,term,type,servers,identifier from z3950queue order by id");
  			$sth->execute;
! 			while (my ($id, $term, $type, $servers,$random) = $sth->fetchrow) {
  				if ($forkcounter<12) {
  					my $now=time();
***************
*** 94,97 ****
--- 95,100 ----
  					my $stillprocessing=0;
  					my $globalname;
+ 					my $globalsyntax;
+ 					my $globalencoding;
  					foreach $serverinfo (split(/\s+/, $servers)) {
  						(next) if ($serverdone{$serverinfo} == 1);
***************
*** 101,110 ****
  						} else {
  							my $dbi = C4::Context->dbh;
! 							my ($name, $server, $database, $user, $password) = split(/\//, $serverinfo, 5);
  							$globalname=$name;
  							$server=~/(.*)\:(\d+)/;
  							my $servername=$1;
  							my $port=$2;
! 							print "Processing $type=$term at $name $server $database (".($forkcounter+1)." forks)\n";
  							$now=time();
  							my $q_serverinfo=$dbi->quote($serverinfo);
--- 104,114 ----
  						} else {
  							my $dbi = C4::Context->dbh;
! 							my ($name, $server, $database, $user, $password,$syntax) = split(/\//, $serverinfo, 6);
  							$globalname=$name;
+ 							$globalsyntax = $syntax;
  							$server=~/(.*)\:(\d+)/;
  							my $servername=$1;
  							my $port=$2;
! 							print "Processing $type=$term at $name $server $database $syntax (".($forkcounter+1)." forks)\n";
  							$now=time();
  							my $q_serverinfo=$dbi->quote($serverinfo);
***************
*** 150,161 ****
  								warn "no connection at $globalname ";
  							} else {
!  								eval { $conn->option(preferredRecordSyntax => Net::Z3950::RecordSyntax::USMARC);};
   								if ($@) {
   									print "$globalname ERROR: $@\n";
   								} else {
!  									print "Q: $query\n";
  									my $rs=$conn->search($query);
   									pe();
  									my $numresults=$rs->size();
   									pe();
  									my $i;
--- 154,172 ----
  								warn "no connection at $globalname ";
  							} else {
! 								warn "$globalname ==> $globalsyntax";
!  								eval { $conn->option(preferredRecordSyntax => Net::Z3950::RecordSyntax::USMARC);} if ($globalsyntax eq "USMARC");
!  								eval { $conn->option(preferredRecordSyntax => Net::Z3950::RecordSyntax::UNIMARC);} if ($globalsyntax eq "UNIMARC");
   								if ($@) {
   									print "$globalname ERROR: $@\n";
   								} else {
! #  									print "Q: $query\n";
  									my $rs=$conn->search($query);
   									pe();
  									my $numresults=$rs->size();
+ 									if ($numresults eq 0) {
+ 										warn "$globalname ==> answered : no records found";
+ 									} else {
+ 										warn "$globalname ==> answered : $numresults found";
+ 									}
   									pe();
  									my $i;
***************
*** 164,173 ****
  									for ($i=1; $i<=(($numresults<80) ? ($numresults) : (80)); $i++) {
  										my $rec=$rs->record($i);
! 										my $marcdata=$rec->render();
! 										my $marcrecord = MARC::File::USMARC::decode($rec->render());
! 										warn "$globalname ==> ".$marcrecord->as_formatted();
! 										$result.=$marcdata;
! 										my ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported) = ImportBreeding($marcdata,1,"Z3950-$globalname");
  									}
  									my $scantimerend=time();
  									my $numrecords;
--- 175,194 ----
  									for ($i=1; $i<=(($numresults<80) ? ($numresults) : (80)); $i++) {
  										my $rec=$rs->record($i);
!  										my $marcdata;
! 										# use render() or rawdata() depending on the type of the returned record
! 										my $marcrecord;
! 										if (ref($rec) eq "Net::Z3950::Record::USMARC") {
! 											$marcdata = $rec->rawdata();
! 											$marcrecord = MARC::File::USMARC::decode($rec->rawdata())
! 										}
! 										if (ref($rec) eq "Net::Z3950::Record::UNIMARC") {
! 											$marcdata = $rec->render();
! 											$marcrecord = MARC::File::USMARC::decode($rec->render())
! 										}
! 										$globalencoding = ref($rec);
!  										$result.=$marcdata;
  									}
+ 									my @x=split /::/,$globalencoding;
+ 									my ($notmarcrecord,$alreadyindb,$alreadyinfarm,$imported) = ImportBreeding($result,-1,"Z3950-$globalname",$x[3],$random);
  									my $scantimerend=time();
  									my $numrecords;
***************
*** 231,235 ****
  							exit;
  sub pe {
! #   	return 0;
  	my $code=$conn->errcode();
  	my $msg=$conn->errmsg();
--- 252,256 ----
  							exit;
  sub pe {
!    	return 0;
  	my $code=$conn->errcode();
  	my $msg=$conn->errmsg();

Index: z3950-daemon-launch.sh
===================================================================
RCS file: /cvsroot/koha/koha/z3950/z3950-daemon-launch.sh,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** z3950-daemon-launch.sh	22 Nov 2002 10:15:22 -0000	1.1
--- z3950-daemon-launch.sh	29 Apr 2003 16:48:25 -0000	1.2
***************
*** 18,22 ****
  RunAsUser=apache
  
! KohaZ3950Dir=/usr/local/www/koha/htdocs/cgi-bin/koha/acqui.simple
  export KohaZ3950Dir
  
--- 18,22 ----
  RunAsUser=apache
  
! KohaZ3950Dir=/home/paul/koha.dev/koha/z3950
  export KohaZ3950Dir
  
***************
*** 42,45 ****
--- 42,60 ----
  #--------------
  # $Log$
+ # Revision 1.2  2003/04/29 16:48:25  tipaul
+ # really proud of this commit :-)
+ # z3950 search and import seems to works fine.
+ # Let me explain how :
+ # * a "search z3950" button is added in the addbiblio template.
+ # * when clicked, a popup appears and z3950/search.pl is called
+ # * z3950/search.pl calls addz3950search in the DB
+ # * the z3950 daemon retrieve the records and stores them in z3950results AND in marc_breeding table.
+ # * as long as there as searches pending, the popup auto refresh every 2 seconds, and says how many searches are pending.
+ # * when the user clicks on a z3950 result => the parent popup is called with the requested biblio, and auto-filled
+ #
+ # Note :
+ # * character encoding support : (It's a nightmare...) In the z3950servers table, a "encoding" column has been added. You can put "UNIMARC" or "USMARC" in this column. Depending on this, the char_decode in C4::Biblio.pm replaces marc-char-encode by an iso 8859-1 encoding. Note that in the breeding import this value has been added too, for a better support.
+ # * the marc_breeding and z3950* tables have been modified : they have an encoding column and the random z3950 number is stored too for convenience => it's the key I use to list only requested biblios in the popup.
+ #
  # Revision 1.1  2002/11/22 10:15:22  tipaul
  # moving z3950 related scripts to specific dir

Index: z3950-daemon-shell.sh
===================================================================
RCS file: /cvsroot/koha/koha/z3950/z3950-daemon-shell.sh,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** z3950-daemon-shell.sh	22 Nov 2002 10:15:22 -0000	1.1
--- z3950-daemon-shell.sh	29 Apr 2003 16:48:25 -0000	1.2
***************
*** 14,20 ****
  #----------------------------
  
! KohaZ3950Dir=/usr/local/www/koha/htdocs/cgi-bin/koha/acqui.simple
! KohaModuleDir=/usr/local/koha/modules
! LogDir=/var/log/koha
  
  #----------------------------
--- 14,20 ----
  #----------------------------
  
! KohaZ3950Dir=/home/paul/koha.dev/koha/z3950
! KohaModuleDir=/home/paul/koha.dev/koha
! LogDir=/tmp
  
  #----------------------------
***************
*** 42,45 ****
--- 42,60 ----
  #-------------------
  # $Log$
+ # Revision 1.2  2003/04/29 16:48:25  tipaul
+ # really proud of this commit :-)
+ # z3950 search and import seems to works fine.
+ # Let me explain how :
+ # * a "search z3950" button is added in the addbiblio template.
+ # * when clicked, a popup appears and z3950/search.pl is called
+ # * z3950/search.pl calls addz3950search in the DB
+ # * the z3950 daemon retrieve the records and stores them in z3950results AND in marc_breeding table.
+ # * as long as there as searches pending, the popup auto refresh every 2 seconds, and says how many searches are pending.
+ # * when the user clicks on a z3950 result => the parent popup is called with the requested biblio, and auto-filled
+ #
+ # Note :
+ # * character encoding support : (It's a nightmare...) In the z3950servers table, a "encoding" column has been added. You can put "UNIMARC" or "USMARC" in this column. Depending on this, the char_decode in C4::Biblio.pm replaces marc-char-encode by an iso 8859-1 encoding. Note that in the breeding import this value has been added too, for a better support.
+ # * the marc_breeding and z3950* tables have been modified : they have an encoding column and the random z3950 number is stored too for convenience => it's the key I use to list only requested biblios in the popup.
+ #
  # Revision 1.1  2002/11/22 10:15:22  tipaul
  # moving z3950 related scripts to specific dir





More information about the Koha-cvs mailing list