- #!/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
- =over
- =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();
- system('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) = @_;
- # Note that this needs to be changed so that it works with Win32!
- system('psql $self->{dbname} < "sql/$script.sql"');
- return $!;
- }
- sub _create_roles {
- #TODO
- }
- sub update {
- # TODO
- }
- =back
|