use strict;
use warnings;
use vars qw($VERSION $AUTOLOAD $context @context_stack $servers $memcached $ismemcached);
-use Koha::Cache;
-use Carp;
-
BEGIN {
if ($ENV{'HTTP_USER_AGENT'}) {
require CGI::Carp;
# FIXME: running this under mod_perl will require a means of
# flushing the caching mechanism.
-my $sysprefs;
+my %sysprefs;
my $use_syspref_cache = 1;
-my $cache;
sub preference {
my $self = shift;
- my $var = lc(shift); # The system preference to return
+ my $var = shift; # The system preference to return
- unless (defined $sysprefs) {
- unless ($cache) {
- $cache = Koha::Cache->new();
- }
- $sysprefs = $cache->create_hash(
- {
- 'key' => 'syspref',
- 'allowupdate' => 1,
- 'cache_type' => $use_syspref_cache ? '' : 'null',
- 'preload' => sub {
- my $dbh = C4::Context->dbh or return {};
- my $vars = $dbh->selectall_arrayref("SELECT variable, value FROM systempreferences");
- my %sysprefs = ();
- foreach my $row (@$vars) {
- $sysprefs{$row->[0]} = $row->[1];
- }
- return \%sysprefs;
- },
- 'constructor' => sub {
-
- # Look up systempreferences.variable==$var
- my $var = pop;
- my $sysprefs = pop || {};
- my $dbh = C4::Context->dbh or return 0;
- my $sql =
-"SELECT value FROM systempreferences WHERE variable=? LIMIT 1";
- $ENV{DEBUG} && carp "Retrieving syspref $var from database";
- my $sth = $dbh->prepare_cached($sql);
- $sth->execute($var);
- my $res = $sth->fetchrow_hashref;
- if ($res && $res->{'value'}) {
- $sysprefs->{$var} = $res->{'value'};
- } else {
- $sysprefs->{$var} = '';
- }
- return $sysprefs;
- },
- }
- );
+ if ($use_syspref_cache && exists $sysprefs{lc $var}) {
+ return $sysprefs{lc $var};
+ }
+
+ my $dbh = C4::Context->dbh or return 0;
+
+ my $value;
+ if ( defined $ENV{"OVERRIDE_SYSPREF_$var"} ) {
+ $value = $ENV{"OVERRIDE_SYSPREF_$var"};
+ } else {
+ # Look up systempreferences.variable==$var
+ my $sql = q{
+ SELECT value
+ FROM systempreferences
+ WHERE variable = ?
+ LIMIT 1
+ };
+ $value = $dbh->selectrow_array( $sql, {}, lc $var );
}
- return $sysprefs->{$var};
+
+ $sysprefs{lc $var} = $value;
+ return $value;
}
sub boolean_preference {
sub disable_syspref_cache {
my ($self) = @_;
$use_syspref_cache = 0;
- $self->clear_syspref_cache() if defined($sysprefs);
+ $self->clear_syspref_cache();
}
=head2 clear_syspref_cache
=cut
sub clear_syspref_cache {
- %{$sysprefs} = ();
- return;
+ %sysprefs = ();
}
=head2 set_preference
" );
if($sth->execute( $var, $value )) {
- $sysprefs->{$var} = $value;
+ $sysprefs{$var} = $value;
}
$sth->finish;
}