koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-cvs] koha/C4 Context.pm [rel_3_0]


From: Antoine Farnault
Subject: [Koha-cvs] koha/C4 Context.pm [rel_3_0]
Date: Fri, 06 Oct 2006 13:47:28 +0000

CVSROOT:        /sources/koha
Module name:    koha
Branch:         rel_3_0
Changes by:     Antoine Farnault <toins>        06/10/06 13:47:28

Modified files:
        C4             : Context.pm 

Log message:
        Synch with dev_week.
         /!\ WARNING :: Please now use the new version of koha.xml.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/C4/Context.pm?cvsroot=koha&only_with_tag=rel_3_0&r1=1.43&r2=1.43.2.1

Patches:
Index: Context.pm
===================================================================
RCS file: /sources/koha/koha/C4/Context.pm,v
retrieving revision 1.43
retrieving revision 1.43.2.1
diff -u -b -r1.43 -r1.43.2.1
--- Context.pm  10 Aug 2006 12:49:37 -0000      1.43
+++ Context.pm  6 Oct 2006 13:47:28 -0000       1.43.2.1
@@ -1,3 +1,4 @@
+package C4::Context;
 # Copyright 2002 Katipo Communications
 #
 # This file is part of Koha.
@@ -15,17 +16,19 @@
 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 # Suite 330, Boston, MA  02111-1307 USA
 
-# $Id: Context.pm,v 1.43 2006/08/10 12:49:37 toins Exp $
-package C4::Context;
+# $Id: Context.pm,v 1.43.2.1 2006/10/06 13:47:28 toins Exp $
 use strict;
 use DBI;
-use C4::Boolean;
+use ZOOM;
 use XML::Simple;
+
+use C4::Boolean;
+
 use vars qw($VERSION $AUTOLOAD),
        qw($context),
        qw(@context_stack);
 
-$VERSION = do { my @v = '$Revision: 1.43 $' =~ /\d+/g;
+$VERSION = do { my @v = '$Revision: 1.43.2.1 $' =~ /\d+/g;
                shift(@v) . "." . join("_", map {sprintf "%03d", $_ } @v); };
 
 =head1 NAME
@@ -39,7 +42,13 @@
   use C4::Context("/path/to/koha.xml");
 
   $config_value = C4::Context->config("config_variable");
+
+  $koha_preference = C4::Context->preference("preference");
+
   $db_handle = C4::Context->dbh;
+
+  $Zconn = C4::Context->Zconn;
+
   $stopwordhash = C4::Context->stopwords;
 
 =head1 DESCRIPTION
@@ -97,38 +106,46 @@
 $context = undef;              # Initially, no context is set
 @context_stack = ();           # Initially, no saved contexts
 
-# read_config_file
-# Reads the specified Koha config file. Returns a reference-to-hash
-# whose keys are the configuration variables, and whose values are the
-# configuration values (duh).
-# Returns undef in case of error.
-#
-# Revision History:
-# 2004-08-10 A. Tarallo: Added code that checks if a variable is already
-# assigned and prints a message, otherwise create a new entry in the hash to
-# be returned. 
-# Also added code that complaints if finds a line that isn't a variable 
-# assignmet and skips the line.
-# Added a quick hack that makes the translation between the db_schema
-# and the DBI driver for that schema.
-#
-sub read_config_file
-{
-       my $fname = shift;      # Config file to read
+=item read_config_file
+
+=over 4
+
+Reads the specified Koha config file. 
+
+Returns an object containing the configuration variables. The object's
+structure is a bit complex to the uninitiated ... take a look at the
+koha.xml file as well as the XML::Simple documentation for details. Or,
+here are a few examples that may give you what you need:
+
+The simple elements nested within the <config> element:
 
-       my $retval = {};        # Return value: ref-to-hash holding the
-                               # configuration
+       my $pass = $koha->{'config'}->{'pass'};
 
-my $koha = XMLin($fname, keyattr => ['id'],forcearray => ['listen']);
+The <listen> elements:
 
+       my $listen = $koha->{'listen'}->{'biblioserver'}->{'content'};
+
+The elements nested within the <server> element:
+
+       my $ccl2rpn = $koha->{'server'}->{'biblioserver'}->{'cql2rpn'};
+
+Returns undef in case of error.
+
+=back
+
+=cut
+
+sub read_config_file {
+       my $fname = shift;      # Config file to read
+       my $retval = {};        # Return value: ref-to-hash holding the 
configuration
+       my $koha = XMLin($fname, keyattr => ['id'],forcearray => ['listen']);
        return $koha;
 }
 
 # db_scheme2dbi
 # Translates the full text name of a database into de appropiate dbi name
 # 
-sub db_scheme2dbi
-{
+sub db_scheme2dbi {
        my $name = shift;
 
        for ($name) {
@@ -140,8 +157,7 @@
        return undef;           # Just in case
 }
 
-sub import
-{
+sub import {
        my $package = shift;
        my $conf_fname = shift;         # Config file name
        my $context;
@@ -170,8 +186,7 @@
 #'
 # Revision History:
 # 2004-08-10 A. Tarallo: Added check if the conf file is not empty
-sub new
-{
+sub new {
        my $class = shift;
        my $conf_fname = shift;         # Config file to load
        my $self = {};
@@ -190,14 +205,11 @@
        $self = read_config_file($conf_fname);
        $self->{"config_file"} = $conf_fname;
 
-
-       
        warn "read_config_file($conf_fname) returned undef" if 
!defined($self->{"config"});
        return undef if !defined($self->{"config"});
 
        $self->{"dbh"} = undef;         # Database handle
        $self->{"Zconn"} = undef;       # Zebra Connection
-       $self->{"Zconnauth"} = undef;   # Zebra Connection for updating
        $self->{"stopwords"} = undef; # stopwords list
        $self->{"marcfromkohafield"} = undef; # the hash with relations between 
koha table fields and MARC field/subfield
        $self->{"userenv"} = undef;             # User env
@@ -311,12 +323,6 @@
        # Return the value of the requested config variable
        return $context->{"config"}->{$var};
 }
-=item zebraconfig
-$serverdir=C4::Context->zebraconfig("biblioserver")->{directory};
-
-returns the zebra server specific details for different zebra servers
-similar to C4:Context->config
-=cut
 
 sub zebraconfig
 {
@@ -324,6 +330,11 @@
        my $var = shift;                # The config variable to return
 
        return undef if !defined($context->{"server"});
+                       # Presumably $self->{config} might be
+                       # undefined if the config file given to &new
+                       # didn't exist, and the caller didn't bother
+                       # to check the return value.
+
        # Return the value of the requested config variable
        return $context->{"server"}->{$var};
 }
@@ -387,117 +398,112 @@
 =item Zconn
 
 $Zconn = C4::Context->Zconn
-$Zconnauth = C4::Context->Zconnauth
+
 Returns a connection to the Zebra database for the current
 context. If no connection has yet been made, this method 
 creates one and connects.
 
+C<$self> 
+
+C<$server> one of the servers defined in the koha.xml file
+
+C<$async> whether this is a asynchronous connection
+
+C<$auth> whether this connection has rw access (1) or just r access (0 or NULL)
+
+
 =cut
 
 sub Zconn {
-        my $self = shift;
-my $server=shift;
-       my $Zconn;
-      if (defined($context->{"Zconn"})) {
-           $Zconn = $context->{"Zconn"};
+       my $self=shift;
+       my $server=shift;
+       my $async=shift;
+       my $auth=shift;
+       my $piggyback=shift;
+       my $syntax=shift;
+
+       if ( defined($context->{"Zconn"}) ) {
                    return $context->{"Zconn"};
+
+       # No connection object or it died. Create one.
        } else { 
-               $context->{"Zconn"} = &new_Zconn($server);
+               $context->{"Zconn"} = 
&_new_Zconn($server,$async,$auth,$piggyback,$syntax);
                return $context->{"Zconn"};
         }
 }
 
-sub Zconnauth {
-        my $self = shift;
-       my $server="biblioserver"; #shift;
-       my $Zconnauth;
-        if (defined($context->{"Zconnauth"})) {
-           $Zconnauth = $context->{"Zconnauth"};
-                   return $context->{"Zconnauth"};
-       } else {
-               $context->{"Zconnauth"} = &new_Zconnauth($server);
-               return $context->{"Zconnauth"};
-       }       
-}
+=item _new_Zconn
+
+$context->{"Zconn"} = &_new_Zconn($server,$async);
 
+Internal function. Creates a new database connection from the data given in 
the current context and returns it.
 
+C<$server> one of the servers defined in the koha.xml file
 
-=item new_Zconn
+C<$async> whether this is a asynchronous connection
 
-Internal helper function. creates a new database connection from
-the data given in the current context and returns it.
+C<$auth> whether this connection has rw access (1) or just r access (0 or NULL)
 
 =cut
 
-sub new_Zconn {
-use ZOOM;
-my $server=shift;
-my $tried=0;
-my $Zconn;
-my ($tcp,$host,$port)=split /:/,$context->{"listen"}->{$server}->{"content"};
+sub _new_Zconn {
+       my ($server,$async,$auth,$piggyback,$syntax) = @_;
+
+       my $tried=0; # first attempt
+       my $Zconn; # connection object
+       $server = "biblioserver" unless $server;
+       $syntax = "usmarc" unless $syntax;
 
-retry:
+       my $host = $context->{'listen'}->{$server}->{'content'};
+       my $user = $context->{"serverinfo"}->{$server}->{"user"};
+       my $password = $context->{"serverinfo"}->{$server}->{"password"};
+       
+       retry:
        eval {
-               $Zconn=new 
ZOOM::Connection($context->config("hostname"),$port,databaseName=>$context->{"config"}->{$server},
-               preferredRecordSyntax => "USmarc",elementSetName=> "F");
-        $Zconn->option(cqlfile=> 
$context->{"config"}->{"zebradir"}."/etc/cql.properties");
-        $Zconn->option(cclfile=> 
$context->{"config"}->{"zebradir"}."/etc/ccl.properties");
+               # set options
+               my $o = new ZOOM::Options();
+               $o->option(async => 1) if $async;
+               $o->option(count => $piggyback) if $piggyback;
+               $o->option(cqlfile=> 
$context->{"server"}->{$server}->{"cql2rpn"});
+               $o->option(cclfile=> 
$context->{"serverinfo"}->{$server}->{"ccl2rpn"});
+               $o->option(preferredRecordSyntax => $syntax);
+               $o->option(elementSetName => "F"); # F for 'full' as opposed to 
B for 'brief'
+               $o->option(user=>$user) if $auth;
+               $o->option(password=>$password) if $auth;
+               $o->option(databaseName => "biblios"); 
#$context->{"config"}->{$server});
+
+               # create a new connection object
+               $Zconn= create ZOOM::Connection($o);
+
+               # forge to server
+               $Zconn->connect($host, 0);
+
+               # check for errors and warn
+        if ($Zconn->errcode() !=0) {
+                       warn "something wrong with the connection: ". 
$Zconn->errmsg();
+               }
+
        };
-       if ($@){
-###Uncomment the lines below if you want to automatically restart your zebra 
if its stop
-###The system call is for Windows it should be changed to unix deamon starting 
for Unix platforms      
-#              if (address@hidden>code==10000 && $tried==0){ ##No connection 
try restarting Zebra
-#              $tried==1;
-#              my $res=system('sc start "Z39.50 Server" 
>c:/zebraserver/error.log');
-#              goto "retry";
-#              }else{
+       if ($@) {
+               # Koha manages the Zebra server -- this doesn't work currently 
for me because of permissions issues
+               # Also, I'm skeptical about whether it's the best approach 
anyway
+               warn "problem with Zebra";
+               if ( C4::Context->preference("ManageZebra") ) {
+                       if (address@hidden>code==10000 && $tried==0) { ##No 
connection try restarting Zebra
+                               $tried=1;
+                               warn "trying to restart Zebra";
+                               my $res=system("zebrasrv -f $ENV{'KOHA_CONF'} 
>/koha/log/zebra-error.log");
+                               goto "retry";
+                       } else {
                warn "Error ", address@hidden>code(), ": ", 
address@hidden>message(), "\n";
                $Zconn="error";
                return $Zconn;
-#              }
        }
-       
-       return $Zconn;
-}
-
-## Zebra handler with write permission
-sub new_Zconnauth {
-use ZOOM;
-my $server=shift;
-my $tried=0;
-my $Zconnauth;
-my ($tcp,$host,$port)=split /:/,$context->{"listen"}->{$server}->{"content"};
-       my $o = new ZOOM::Options();
-       $o->option(async => 1);
-       $o->option(preferredRecordSyntax => "usmarc");
-       $o->option(elementSetName => "F");
-       $o->option(user=>$context->{"config"}->{"zebrauser"});
-       $o->option(password=>$context->{"config"}->{"zebrapass"});
-       $o->option(databaseName=>$context->{"config"}->{$server});
-
-retry:
-eval{
- $Zconnauth=new 
ZOOM::Connection($context->config("hostname"),$port,databaseName=>$context->{"config"}->{$server},
-                                               
user=>$context->{"config"}->{"zebrauser"},
-                                               
password=>$context->{"config"}->{"zebrapass"},preferredRecordSyntax => 
"USmarc",elementSetName=> "F");
-};
-       if ($@){
-###Uncomment the lines below if you want to automatically restart your zebra 
if its stop
-###The system call is for Windows it should be changed to unix deamon starting 
for Unix platforms      
-#              if (address@hidden>code==10000 && $tried==0){ ##No connection 
try restarting Zebra
-#              $tried==1;
-#              my $res=system('sc start "Z39.50 Server" 
>c:/zebraserver/error.log');
-#              goto "retry";
-#              }else{
-               warn "Error ", address@hidden>code(), ": ", 
address@hidden>message(), "\n";
-               $Zconnauth="error";
-               return $Zconnauth;
-#              }
        }
-       return $Zconnauth;
+       }
+       return $Zconn;
 }
 
-
 # _new_dbh
 # Internal helper function (not a method!). This creates a new
 # database connection from the data given in the current context, and
@@ -754,7 +760,7 @@
 =cut
 #'
 sub set_userenv{
-       my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, 
$userbranch, $branchname, $userflags, $emailaddress,$branchprinter)= @_;
+       my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, 
$userbranch, $branchname, $userflags, $emailaddress)= @_;
        my $var=$context->{"activeuser"};
        my $cell = {
                "number"     => $usernum,
@@ -767,7 +773,6 @@
                "branchname" => $branchname,
                "flags"      => $userflags,
                "emailaddress"  => $emailaddress,
-               "branchprinter" => $branchprinter,
        };
        $context->{userenv}->{$var} = $cell;
        return $cell;
@@ -828,42 +833,75 @@
 
 =head1 SEE ALSO
 
-DBI(3)
-
-=head1 AUTHOR
+=head1 AUTHORS
 
 Andrew Arensburger <arensb at ooblick dot com>
 
+Joshua Ferraro <jmf at liblime dot com>
+
 =cut
 # $Log: Context.pm,v $
-# Revision 1.43  2006/08/10 12:49:37  toins
-# sync with dev_week.
-#
-# Revision 1.42  2006/07/04 14:36:51  toins
-# Head & rel_2_2 merged
-#
-# Revision 1.41  2006/05/20 14:36:09  tgarip1957
-# Typo error. Missing '>'
-#
-# Revision 1.40  2006/05/20 14:28:02  tgarip1957
-# Adding support to read zebra database name from config files
-#
-# Revision 1.39  2006/05/19 09:52:54  alaurin
-# committing new feature ip and printer management
-# adding two fields in branches table (branchip,branchprinter)
-#
-# branchip : if the library enter an ip or ip range any librarian that connect 
from computer in this ip range will be temporarly affected to the corresponding 
branch .
-#
-# branchprinter : the library  can select a default printer for a branch
-#
-# Revision 1.38  2006/05/14 00:22:31  tgarip1957
-# Adding support for getting details of different zebra servers
-#
-# Revision 1.37  2006/05/13 19:51:39  tgarip1957
-# Now reads koha.xml rather than koha.conf.
-# koha.xml contains both the koha configuration and zebraserver configuration.
-# Zebra connection is modified to allow connection to authority zebra as well.
-# It will break head if koha.conf is not replaced with koha.xml
+# Revision 1.43.2.1  2006/10/06 13:47:28  toins
+# Synch with dev_week.
+#  /!\ WARNING :: Please now use the new version of koha.xml.
+#
+# Revision 1.18.2.5.2.14  2006/09/24 15:24:06  kados
+# remove Zebraauth routine, fold the functionality into Zconn
+# Zconn can now take several arguments ... this will probably
+# change soon as I'm not completely happy with the readability
+# of the current format ... see the POD for details.
+#
+# cleaning up Biblio.pm, removing unnecessary routines.
+#
+# DeleteBiblio - used to delete a biblio from zebra and koha tables
+#      -- checks to make sure there are no existing issues
+#      -- saves backups of biblio,biblioitems,items in deleted* tables
+#      -- does commit operation
+#
+# getRecord - used to retrieve one record from zebra in piggyback mode using 
biblionumber
+# brought back z3950_extended_services routine
+#
+# Lots of modifications to Context.pm, you can now store user and pass info for
+# multiple servers (for federated searching) using the <serverinfo> element.
+# I'll commit my koha.xml to demonstrate this or you can refer to the POD in
+# Context.pm (which I also expanded on).
+#
+# Revision 1.18.2.5.2.13  2006/08/10 02:10:21  kados
+# Turned warnings on, and running a search turned up lots of warnings.
+# Cleaned up those ...
+#
+# removed getitemtypes from Koha.pm (one in Search.pm looks newer)
+# removed itemcount from Biblio.pm
+#
+# made some local subs local with a _ prefix (as they were redefined
+# elsewhere)
+#
+# Add two new search subs to Search.pm the start of a new search API
+# that's a bit more scalable
+#
+# Revision 1.18.2.5.2.10  2006/07/21 17:50:51  kados
+# moving the *.properties files to intranetdir/etc dir
+#
+# Revision 1.18.2.5.2.9  2006/07/17 08:05:20  tipaul
+# there was a hardcoded link to /koha/etc/ I replaced it with intranetdir 
config value
+#
+# Revision 1.18.2.5.2.8  2006/07/11 12:20:37  kados
+# adding ccl and cql files ... Tumer, if you want to fit these into the
+# config file by all means do.
+#
+# Revision 1.18.2.5.2.7  2006/06/04 22:50:33  tgarip1957
+# We do not hard code cql2rpn conversion file in context.pm our koha.xml 
configuration file already describes the path for this file.
+# At cql searching we use method CQL not CQL2RPN as the cql2rpn conversion 
file is defined at server level
+#
+# Revision 1.18.2.5.2.6  2006/06/02 23:11:24  kados
+# Committing my working dev_week. It's been tested only with
+# searching, and there's quite a lot of config stuff to set up
+# beforehand. As things get closer to a release, we'll be making
+# some scripts to do it for us
+#
+# Revision 1.18.2.5.2.5  2006/05/28 18:49:12  tgarip1957
+# This is an unusual commit. The main purpose is a working model of Zebra on a 
modified rel2_2.
+# Any questions regarding these commits should be asked to Joshua Ferraro 
unless you are Joshua whom I'll report to
 #
 # Revision 1.36  2006/05/09 13:28:08  tipaul
 # adding the branchname and the librarian name in every page :




reply via email to

[Prev in Thread] Current Thread [Next in Thread]