--- /dev/null
+#!/usr/bin/perl
+
+# $Id$
+
+package C4::Z3950;
+
+# Routines for handling Z39.50 lookups
+
+# Koha library project www.koha.org
+
+# Licensed under the GPL
+
+use strict;
+
+# standard or CPAN modules used
+use DBI;
+
+# Koha modules used
+use C4::Database;
+use C4::Input;
+use C4::Biblio;
+
+#------------------
+
+require Exporter;
+
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+
+# set the version for version checking
+$VERSION = 0.01;
+
+@ISA = qw(Exporter);
+@EXPORT = qw(
+ &z3950servername
+ &addz3950queue
+);
+%EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
+
+# your exported package globals go here,
+# as well as any optionally exported functions
+
+@EXPORT_OK = qw($Var1 %Hashit);
+
+# non-exported package globals go here
+use vars qw(@more $stuff);
+
+# initalize package globals, first exported ones
+
+my $Var1 = '';
+my %Hashit = ();
+
+# then the others (which are still accessible as $Some::Module::stuff)
+my $stuff = '';
+my @more = ();
+
+# all file-scoped lexicals must be created before
+# the functions below that use them.
+
+# file-private lexicals go here
+my $priv_var = '';
+my %secret_hash = ();
+
+# here's a file-private function as a closure,
+# callable as &$priv_func; it cannot be prototyped.
+my $priv_func = sub {
+ # stuff goes here.
+ };
+
+# make all your functions, whether exported or not;
+#------------------------------------------------
+
+
+sub z3950servername {
+ # inputs
+ my (
+ $dbh,
+ $srvid, # server id number
+ $default,
+ )=@_;
+ # return
+ my $longname;
+ #----
+
+ requireDBI($dbh,"z3950servername");
+
+ my $sti=$dbh->prepare("select name
+ from z3950servers
+ where id=?");
+ $sti->execute($srvid);
+ if ( ! $sti->err ) {
+ ($longname)=$sti->fetchrow;
+ }
+ if (! $longname) {
+ $longname="$default";
+ }
+ return $longname;
+} # sub z3950servername
+
+#---------------------------------------
+sub addz3950queue {
+ use strict;
+ # input
+ my (
+ $dbh, # DBI handle
+ $query, # value to look up
+ $type, # type of value ("isbn", "lccn", etc).
+ $requestid, # Unique value to prevent duplicate searches from multiple HTML form submits
+ @z3950list, # list of z3950 servers to query
+ )=@_;
+ # Returns:
+ my $error;
+
+ my (
+ $sth,
+ @serverlist,
+ $server,
+ $failed,
+ $servername,
+ );
+
+ my $pidfile='/var/log/koha/processz3950queue.pid';
+
+ $error="";
+
+ requireDBI($dbh,"addz3950queue");
+
+ # list of servers: entry can be a fully qualified URL-type entry
+ # or simply just a server ID number.
+
+ foreach $server (@z3950list) {
+ if ($server =~ /:/ ) {
+ push @serverlist, $server;
+ } elsif ($server eq 'DEFAULT' || $server eq 'CHECKED' ) {
+ $sth=$dbh->prepare("select host,port,db,userid,password ,name
+ from z3950servers
+ where checked <> 0 ");
+ $sth->execute;
+ while ( my ($host, $port, $db, $userid, $password,$servername)
+ = $sth->fetchrow ) {
+ push @serverlist, "$servername/$host\:$port/$db/$userid/$password";
+ } # while
+ } else {
+ $sth=$dbh->prepare("select host,port,db,userid,password
+ from z3950servers
+ where id=? ");
+ $sth->execute($server);
+ my ($host, $port, $db, $userid, $password) = $sth->fetchrow;
+ push @serverlist, "$server/$host\:$port/$db/$userid/$password";
+ }
+ }
+
+ my $serverlist='';
+ foreach (@serverlist) {
+ $serverlist.="$_ ";
+ } # foreach
+ chop $serverlist;
+
+ if ( $serverlist !~ /^ +$/ ) {
+ # Don't allow reinsertion of the same request identifier.
+ $sth=$dbh->prepare("select identifier from z3950queue
+ where identifier=?");
+ $sth->execute($requestid);
+ if ( ! $sth->rows) {
+ $sth=$dbh->prepare("insert into z3950queue
+ (term,type,servers, identifier)
+ values (?, ?, ?, ?)");
+ $sth->execute($query, $type, $serverlist, $requestid);
+ if ( -r $pidfile ) {
+ my $pid=`cat $pidfile`;
+ chomp $pid;
+ my $processcount=kill 1, $pid;
+ if ($processcount==0) {
+ $error.="Z39.50 search daemon error: no process signalled. ";
+ }
+ } else {
+ $error.="No Z39.50 search daemon running: no file $pidfile. ";
+ } # if $pidfile
+ } else {
+ $error.="Duplicate request ID $requestid. ";
+ } # if rows
+ } else {
+ # server list is empty
+ $error.="No Z39.50 search servers specified. ";
+ } # if serverlist empty
+
+ return $error;
+
+} # sub addz3950queue
+
+#--------------------------------------
+# $Log$
+# Revision 1.2 2002/07/02 20:31:33 tonnesen
+# module added from rel-1-2 branch
+#
+# Revision 1.1.2.5 2002/06/29 17:33:47 amillar
+# Allow DEFAULT as input to addz3950search.
+# Check for existence of pid file (cat crashed otherwise).
+# Return error messages in addz3950search.
+#
+# Revision 1.1.2.4 2002/06/28 18:07:27 tonnesen
+# marcimport.pl will print an error message if it can not signal the
+# processz3950queue program. The message contains instructions for starting the
+# daemon.
+#
+# Revision 1.1.2.3 2002/06/28 17:45:39 tonnesen
+# z3950queue now listens for a -HUP signal before processing the queue. Z3950.pm
+# sends the -HUP signal when queries are added to the queue.
+#
+# Revision 1.1.2.2 2002/06/26 20:54:31 tonnesen
+# use warnings breaks on perl 5.005...
+#
+# Revision 1.1.2.1 2002/06/26 07:26:41 amillar
+# New module for Z39.50 searching
+#