# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
+# $Id$
+
package C4::Context;
use strict;
use DBI;
+use C4::Boolean;
use vars qw($VERSION $AUTOLOAD),
qw($context),
$config_value = C4::Context->config("config_variable");
$db_handle = C4::Context->dbh;
+ $stopwordhash = C4::Context->stopwords;
=head1 DESCRIPTION
my $conf_fname = shift; # Config file to load
my $self = {};
+ # check that the specified config file exists
+ undef $conf_fname unless (defined $conf_fname && -e $conf_fname);
# Figure out a good config file to load if none was specified.
if (!defined($conf_fname))
{
$conf_fname = $ENV{"KOHA_CONF"} ||
CONFIG_FNAME;
}
-
$self->{"config_file"} = $conf_fname;
# Load the desired config file.
return undef if !defined($self->{"config"});
$self->{"dbh"} = undef; # Database handle
+ $self->{"stopwords"} = undef; # stopwords list
bless $self, $class;
return $self;
return $context->{"config"}{$var};
}
+=item preference
+
+ $sys_preference = C4::Context->preference("some_variable");
+
+Looks up the value of the given system preference in the
+systempreferences table of the Koha database, and returns it. If the
+variable is not set, or in case of error, returns the undefined value.
+
+=cut
+#'
+# 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.
+sub preference
+{
+ my $self = shift;
+ my $var = shift; # The system preference to return
+ my $retval; # Return value
+ my $dbh = C4::Context->dbh; # Database handle
+ my $sth; # Database query handle
+
+ # Look up systempreferences.variable==$var
+ $retval = $dbh->selectrow_array(<<EOT);
+ SELECT value
+ FROM systempreferences
+ WHERE variable='$var'
+ LIMIT 1
+EOT
+ return $retval;
+}
+
+sub boolean_preference ($) {
+ my $self = shift;
+ my $var = shift; # The system preference to return
+ my $it = preference($self, $var);
+ return defined($it)? C4::Boolean::true_p($it): undef;
+}
+
# AUTOLOAD
# This implements C4::Config->foo, and simply returns
# C4::Context->config("foo"), as described in the documentation for
# &config, above.
+
+# FIXME - Perhaps this should be extended to check &config first, and
+# then &preference if that fails. OTOH, AUTOLOAD could lead to crappy
+# code, so it'd probably be best to delete it altogether so as not to
+# encourage people to use it.
sub AUTOLOAD
{
my $self = shift;
sub _new_dbh
{
my $db_driver = $context->{"config"}{"db_scheme"} || "mysql";
+ # FIXME - It should be possible to use "MySQL" instead
+ # of "mysql", "PostgreSQL" instead of "Pg", and so
+ # forth.
my $db_name = $context->{"config"}{"database"};
my $db_host = $context->{"config"}{"hostname"};
my $db_user = $context->{"config"}{"user"};
my $db_passwd = $context->{"config"}{"pass"};
-
return DBI->connect("DBI:$db_driver:$db_name:$db_host",
$db_user, $db_passwd);
}
# return something, then this function should, too.
}
+=item stopwords
+
+ $dbh = C4::Context->stopwords;
+
+Returns a hash with stopwords.
+
+This hash is cached for future use: if you call
+C<C4::Context-E<gt>stopwords> twice, you will get the same hash without real DB access
+
+=cut
+#'
+sub stopwords
+{
+ my $retval = {};
+
+ # If the hash already exists, return it.
+ return $context->{"stopwords"} if defined($context->{"stopwords"});
+
+ # No hash. Create one.
+ $context->{"stopwords"} = &_new_stopwords();
+
+ return $context->{"stopwords"};
+}
+
+# _new_stopwords
+# Internal helper function (not a method!). This creates a new
+# hash with stopwords
+sub _new_stopwords
+{
+ my $dbh = C4::Context->dbh;
+ my $stopwordlist;
+ my $sth = $dbh->prepare("select word from stopwords");
+ $sth->execute;
+ while (my $stopword = $sth->fetchrow_array) {
+ my $retval = {};
+ $stopwordlist->{$stopword} = uc($stopword);
+ }
+ return $stopwordlist;
+}
+
1;
__END__
+
=back
=head1 ENVIRONMENT
=head1 SEE ALSO
-L<DBI(3)|DBI>
+DBI(3)
=head1 AUTHOR
-Andrew Arensburger
+Andrew Arensburger <arensb at ooblick dot com>
=cut