DBIx::Class and Koha

I did some work today with DBIx::Class and Koha, and got opac-account.pl partially using it.

You can see the schema here and I had to make a few changes to C4::Context, and a few to opac-account.pl.

Here is what they were.

diff --cc C4/Context.pm
index 7ba57fb,4dab9a9..cafc0ca
--- a/C4/Context.pm
+++ b/C4/Context.pm
@@@ -18,6 -18,6 +18,8 @@@ package C4::Context
use strict;
use warnings;
++use Koha::Schema;
++
use vars qw($VERSION $AUTOLOAD $context @context_stack);
BEGIN {
@@@ -191,6 -191,6 +193,27 @@@ $context = undef;        # Initially, n
=cut
++sub schema {
++    my $self = shift;
++    my $db_driver;
++    if ($context->config("db_scheme")){
++        $db_driver=db_scheme2dbi($context->config("db_scheme"));
++    }
++    else {
++        $db_driver="mysql";
++    }
++
++    my $db_name   = $context->config("database");
++    my $db_host   = $context->config("hostname");
++    my $db_port   = $context->config("port") || '';
++    my $db_user   = $context->config("user");
++    my $db_passwd = $context->config("pass");
++    my $schema = Koha::Schema->connect( "DBI:$db_driver:dbname=$db_name;host=$db_host;port=$db_port",
++      $db_user, $db_passwd);
++    return $schema;
++}
++
++
sub KOHAVERSION {
my $cgidir = C4::Context->intranetdir;
diff --cc opac/opac-account.pl
index 43a1e0c,43a1e0c..376ae98
--- a/opac/opac-account.pl
+++ b/opac/opac-account.pl
@@@ -17,16 -17,16 +17,20 @@@
# wrriten 15/10/2002 by finlay@katipo.oc.nz
# script to display borrowers account details in the opac
++# Edited by chrisc@catalyst.net.nz
use strict;
use CGI;
use C4::Members;
++use C4::Context;
use C4::Circulation;
use C4::Auth;
use C4::Output;
use C4::Dates qw/format_date/;
++use DBIx::Class::ResultClass::HashRefInflator;
use warnings;
++
my $query = new CGI;
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
{
@@@ -40,9 -40,9 +44,16 @@@
);
# get borrower information ....
--my $borr = GetMemberDetails( $borrowernumber );
++# my $borr = GetMemberDetails( $borrowernumber );
++my $context = C4::Context->new;
++my $schema = $context->schema;
++my $rs = $schema->resultset('Borrowers')->search({ borrowernumber => $borrowernumber });
++$rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
++my $borr = $rs->first;
++use Data::Dumper;
++warn Dumper $borr;
my @bordat;
--$bordat[0] = $borr;
++push @bordat,$borr;
$template->param( BORROWER_INFO => @bordat );

So not many changes at all, i’ll work on changing some more, but it looks like adding DBIx::Class can be done in a gradual way.

2 thoughts on “DBIx::Class and Koha”

  1. One longer line got truncated here.

    You might prefer to make $schema an EXPORT_OK from Context, since you’d be doing the same thing over and over. At least, it seems like more of a class method since $self is never used.

    Like

  2. The plan is to pool schema, the same way we currently pool $dbh, so it will only create a new database connection if it needs to. So $self will be used.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s