Each time a Perl script or a module has this statement:

  use C4::Context

a default context was created and XML config file was loaded.

A syspref hash caches syspref already read for the whole
session. A better approach would cash syspref for the
whole application: mod_perl required (or memcached)
---
 C4/Context.pm |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/C4/Context.pm b/C4/Context.pm
index e81fd95..ac2255f 100644
--- a/C4/Context.pm
+++ b/C4/Context.pm
@@ -248,11 +248,10 @@ sub db_scheme2dbi {
 sub import {
     my $package = shift;
     my $conf_fname = shift;        # Config file name
-    my $context;
 
     # Create a new context from the given config file name, if
     # any, then set it as the current context.
-    $context = new C4::Context($conf_fname);
+    $context = new C4::Context($conf_fname) unless $context;
     return undef if !defined($context);
     $context->set_context;
 }
@@ -445,10 +444,14 @@ variable is not set, or in case of error, returns the 
undefined value.
 # FIXME - The preferences aren't likely to change over the lifetime of
 # the script (and things might break if they did change), so perhaps
 # this function should cache the results it finds.
+
+my %syspref;
+
 sub preference
 {
     my $self = shift;
     my $var = shift;        # The system preference to return
+    return $syspref{$var} if $syspref{$var};
     my $retval;            # Return value
     my $dbh = C4::Context->dbh or return 0;
     # Look up systempreferences.variable==$var
@@ -458,6 +461,7 @@ sub preference
         WHERE    variable='$var'
         LIMIT    1
 EOT
+    $syspref{$var} = $retval;
     return $retval;
 }
 
-- 
1.5.5.GIT

_______________________________________________
Koha-patches mailing list
[email protected]
http://lists.koha.org/mailman/listinfo/koha-patches

Reply via email to