package Gantry::Utils::CDBI; use strict; use warnings; use Gantry::Utils::ModelHelper qw( db_Main retrieve_all_for_main_listing get_listing get_form_selections ); use POSIX qw( strftime ); use base 'Class::DBI::Sweet'; my $db_options = { __PACKAGE__->_default_attributes, AutoCommit => 0 }; __PACKAGE__->_remember_handle('Main'); sub get_db_options { return $db_options; } #------------------------------------------------- # db_Main #------------------------------------------------- # This method is exported by Gantry::Utils::ModelHelper #------------------------------------------------- # $class->get_form_selctions #------------------------------------------------- # This method is exported by Gantry::Utils::ModelHelper #------------------------------------------------- # $class->get_listing #------------------------------------------------- # This method is exported by Gantry::Utils::ModelHelper #------------------------------------------------- # $class->retrieve_all_for_main_listing #------------------------------------------------- # This deprecated method is exported by Gantry::Utils::ModelHelper #------------------------------------------------- # $class->pretty_date( $strftime_format, $sql_date ) #------------------------------------------------- sub pretty_date { my ( $class, $fmt, $input_date ) = @_; return unless defined $input_date and $input_date; my ( $date, $time ) = split /\s+/, $input_date; my ( $year, $mon, $day ) = split /-/, $date; my ( $trim_time, $useless ) = split /\./, $time; my ( $hour, $min, $sec ) = split /:/, $trim_time; my $output_time = strftime( $fmt, $sec, $min, $hour, $day, $mon - 1, $year - 1900 ); return $output_time; } 1; =head1 NAME Gantry::Utils::CDBI - Class::DBI base class for Gantry applications =head1 SYNOPSIS This module expects to retrieve the database connection, username, and password from one of two places. =head2 In mod_perl If it lives in mod_perl, it expects these to come from the apache conf file. You might supply them like this: PerlSetVar dbconn 'dbi:Pg:dbname=your_db_name' PerlSetVar dbuser 'your_user' PerlSetVar dbpass 'your_password' It then retrieves them roughly like this (the mod_perl version affects this): $r = Apache->request(); $r->dir_config( 'dbconn' ), $r->dir_config( 'dbuser' ), $r->dir_config( 'dbpass' ), The handle is cached using pnotes to avoid recreating it. =head2 In scripts On the other hand, if the module does not live in mod_perl, it needs to directly use Gantry::Utils::DBConnHelper::Script like this: use Gantry::Utils::DBConnHelper::Script { dbconn => 'dbi:Pg:dbname=your_db_name', dbuser => 'your_user', dbuser => 'your_pass', }; If you can't put the connection info into the use statement (say because you take it from the command line) do the above in two steps: use Gantry::Utils::DBConnHelper::Script; # figure out your connection info Gantry::Utils::DBConnHelper::Script->set_conn_info( dbconn => $dsn, dbuser => $dbuser, dbuser => $dbpass, ); The database handle is cached by the helper. To get hold of it say: my $dbh = Gantry::Utils::DBConnHelper::Script->get_dbh(); =head1 DESCRIPTION This module provides the base methods for Class:DBI, including the db conection method within a mod_perl environment. =head1 METHODS =over 4 =item get_db_options Default database attributes usually supplied by Class::DBI's _default_attributes method. =item pretty_date A failed attempt at date format beautification. Probably should be removed. =back Note that these other methods are mixed in from Gantry::Utils::ModelHelper: db_Main retrieve_all_for_main_listing get_form_selections See its docs for details. =head1 AUTHOR Tim Keefer =head1 COPYRIGHT and LICENSE Copyright (c) 2005-6, Tim Keefer. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available. =cut