Koha-Contrib-Sudoc
view release on metacpan or search on metacpan
lib/Koha/Contrib/Sudoc/Koha.pm view on Meta::CPAN
use Try::Tiny;
has conf_file => ( is => 'rw', isa => 'Str' );
has dbh => ( is => 'rw' );
has conf => ( is => 'rw' );
has _zconn => ( is => 'rw', isa => 'HashRef' );
has es => ( is => 'rw' );
has es_index => ( is=> 'rw' );
has sth_biblio => (is => 'rw' );
has biblionumber_where => (
is => 'rw',
isa => 'Str',
lazy => 1,
default => sub {
my $self = shift;
my $dbh = $self->dbh;
my $where = $self->dbh->selectall_arrayref("
SELECT tagfield, tagsubfield
FROM marc_subfield_structure
WHERE kohafield ='biblio.biblionumber'
AND frameworkcode=''",
{}
);
$where = join('', @{$where->[0]});
my $tag = substr($where, 0, 3);
$where = substr($where, 0, 3) if $tag lt '010';
return $where;
},
);
sub BUILD {
my $self = shift;
# Use KOHA_CONF environment variable by default
$self->conf_file( $ENV{KOHA_CONF} ) unless $self->conf_file;
$self->conf( XMLin( $self->conf_file,
keyattr => ['id'], forcearray => ['listen', 'server', 'serverinfo'],
suppressempty => ' ') );
# Database Handler
my $c = $self->conf->{config};
$self->dbh( DBI->connect(
"DBI:" . $c->{db_scheme} .
":dbname=" . $c->{database} .
";host=" . $c->{hostname} .
";port=" . $c->{port},
$c->{user}, $c->{pass} )
) or carp $DBI::errstr;
if ( $c->{db_scheme} eq 'mysql' ) {
# Force utf8 communication between MySQL and koha
$self->dbh->{ mysql_enable_utf8 } = 1;
$self->dbh->do( "set NAMES 'utf8'" );
my $tz = $ENV{TZ};
($tz) and $self->dbh->do( qq(SET time_zone = "$tz") );
}
if ( C4::Context->preference('SearchEngine') eq 'Elasticsearch' ) {
my $param = $c->{elasticsearch};
my $es = Search::Elasticsearch->new(
Koha::SearchEngine::Elasticsearch::get_elasticsearch_params()
);
$self->es( $es );
$self->es_index( {
biblios => $param->{index_name} . '_biblios',
authorities => $param->{index_name} . '_authorities',
} );
}
# Zebra connections
$self->_zconn( { biblio => undef, auth => undef } );
# Récupération d'une notice biblio brute
# Since version 17.05 marcxml biblio record is stored in biblio_metadata table.
my $version = C4::Context->preference('Version');
$self->sth_biblio( $self->dbh->prepare(
$version =~ /^([0-9]{2})/ && $1 >= 17
? "SELECT metadata FROM biblio_metadata WHERE biblionumber=? "
: "SELECT marcxml FROM biblioitems WHERE biblionumber=? "
) );
}
# Réinitialisation des deux connexions
sub zconn_reset {
my $self = shift;
return if $self->es; # Ne rien faire en mode ES
my $zcs = $self->_zconn;
for my $server ( keys %$zcs ) {
my $zc = $zcs->{$server};
$zc->destroy() if $zc;
undef $zcs->{$server};
}
}
sub zconn {
my ($self, $server) = @_;
my $zc = $self->_zconn->{$server};
#return $zc if $zc && $zc->errcode() == 0 && $zc->_check();
return $zc if $zc;
#FIXME: à réactiver pour s'assurer que de nouvelles connexions ne sont
# créées inutilement.
#print "zconn: nouvelle connexion\n";
my $c = $self->conf;
my $name = $server eq 'biblio' ? 'biblioserver' : 'authorityserver';
#my $syntax = "Unimarc";
my $host = $c->{listen}->{$name}->{content};
( run in 0.640 second using v1.01-cache-2.11-cpan-6aa56a78535 )