diff options
author | einhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46> | 2007-06-24 22:37:45 +0000 |
---|---|---|
committer | einhverfr <einhverfr@4979c152-3d1c-0410-bac9-87ea11338e46> | 2007-06-24 22:37:45 +0000 |
commit | 58fb79e0482144a13ea309bec9019a7c9d9c0957 (patch) | |
tree | 95a6e574b6a803fdd5d76715ad3d60dd80d28d4f | |
parent | 449cb9a83bf38fa84108d83d842a73731ee578fb (diff) |
Adding Database Management Class
git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/trunk@1315 4979c152-3d1c-0410-bac9-87ea11338e46
-rw-r--r-- | LedgerSMB/Database.pm | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/LedgerSMB/Database.pm b/LedgerSMB/Database.pm new file mode 100644 index 00000000..8e87592f --- /dev/null +++ b/LedgerSMB/Database.pm @@ -0,0 +1,110 @@ +#!/usr/bin/perl +=head1 NAMR + LedgerSMB::Database +=head1 SYNOPSIS + This module provides the APIs for database creation and management +=head1 COPYRIGHT + This module is copyright (C) 2007, the LedgerSMB Core Team and subject to + the GNU General Public License (GPL) version 2, or at your option, any later + version. See the COPYRIGHT and LICENSE files for more information. +=head1 METHODS + +=cut + +# Methods are documented inline. + +package LedgerSMB::Database; + +our $VERSION = '0'; + +use LedgerSMB::Sysconfig; +use base('LedgerSMB'); + +=item LedgerSMB::Database->new({dbname = $dbname, countrycode = $cc, chart_name = $name, company_name = $company, username = $username, password = $password}) + This function creates a new database management object with the specified + characteristics. The $dbname is the name of the database. the countrycode + is the two-letter ISO code. The company name is the friendly name for + dropdown boxes on the Login screen. + + As some countries may have multiple available charts, you can also specify + a chart name as well. + + Note that the arguments can be any hashref. If it is a LedgerSMB object, + however, it will attempt to copy all attributes beginning with _ into the + current object (_user, _locale, etc). + +=cut + +sub new { + my ($class, $args) = @_; + + my $self = {}; + for (qw(dbname countrycode chart_name company_name username password)){ + $self->{$_} = $args->{$_}; + } + if (isa($args, 'LedgerSMB')){ + for (keys %$args){ + if ($_ =~ /^_/){ + $self->{$_} = $arg->{$_}; + } + } + } + bless $self, $class; + return $self; +} + +=item $db->create(); + Creates a database with the characteristics in the object +=cut + +sub create { + my $self = (@_); + $self->_init_environment(); + `createdb $self->{dbname}`; + my $error = $!; + if ($error){ + $self->error($!); + } + for (qw(Database Central)){ + $self->_execute_script("Pg-$_.sql"); + } + my $chart_path = "sql/$self->{country_code}/"; + $self->_execute_script( + "coa/$self->{country_code}/chart/$self->{chart_name}" + ); + my @gifis = glob('sql/$self->{country_code}/gifi/*.sql'); + my @gifi_search; + my $search_string = $self->{chart_name}; + while ($search_string and (scalar @gifi_search == 0)){ + @gifi_search = grep /^$search_string.sql$/, @gifis; + if (scalar @gifi_search == 0){ + if ($search_string !~ /[_-]/){ + $search_string = ""; + } else { + $search_string =~ s/(.*)[_-].*$/$1/; + } + } + } + if (! scalar @gifi_search){ + push @gifi_search, 'Default'; + } + my $gifi = $gifi_search[0]; + $gifi =~ s/\.sql$//; + $self->_execute_script("coa/$self->{country_code}/gifi/$gifi"); + $self->_create_roles(); +} + +# Private method. Executes the sql script in psql. +sub _execute_script { + my ($self, $script) = @_; + `psql $self->{dbname} < 'sql/$script.sql'`; + return $!; +} + +sub _create_roles { + #TODO +} + +sub update { + # TODO +} |