From: Moritz Bunkus Date: Wed, 29 Jun 2011 08:43:28 +0000 (+0200) Subject: Eine Klasse & globale Variable zur Verwaltung von mandantenbasierter Konfiguration X-Git-Tag: release-2.7.0beta1~359 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=891411c15c60f4099e7d2f687de8efe84b2e0fbb;p=kivitendo-erp.git Eine Klasse & globale Variable zur Verwaltung von mandantenbasierter Konfiguration --- diff --git a/SL/Controller/Base.pm b/SL/Controller/Base.pm index 152fbb779..392f441c2 100644 --- a/SL/Controller/Base.pm +++ b/SL/Controller/Base.pm @@ -68,6 +68,7 @@ sub render { AUTH => $::auth, FLASH => $::form->{FLASH}, FORM => $::form, + INSTANCE_CONF => $::instance_conf, LOCALE => $::locale, LXCONFIG => \%::lx_office_conf, LXDEBUG => $::lxdebug, diff --git a/SL/Dispatcher.pm b/SL/Dispatcher.pm index 0071e8137..03f1c5776 100644 --- a/SL/Dispatcher.pm +++ b/SL/Dispatcher.pm @@ -23,6 +23,7 @@ use SL::Locale; use SL::Common; use SL::Form; use SL::Helper::DateTime; +use SL::InstanceConfiguration; use SL::Template::Plugin::HTMLFixes; # Trailing new line is added so that Perl will not add the line @@ -172,6 +173,7 @@ sub handle_request { $::locale = Locale->new($::lx_office_conf{system}->{language}); $::form = Form->new; %::called_subs = (); + $::instance_conf = SL::InstanceConfiguration->new; my $session_result = $::auth->restore_session; $::auth->create_or_refresh_session; @@ -219,6 +221,8 @@ sub handle_request { delete $::form->{password}; if ($action) { + $::instance_conf->init; + map { $::form->{$_} = $::myconfig{$_} } qw(stylesheet charset) unless $action eq 'save' && $::form->{type} eq 'preferences'; diff --git a/SL/Form.pm b/SL/Form.pm index bed92e217..e91971435 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -842,6 +842,7 @@ sub _prepare_html_template { $additional_params->{"conf_parts_image_css"} = $::lx_office_conf{features}->{parts_image_css}; $additional_params->{"conf_parts_listing_images"} = $::lx_office_conf{features}->{parts_listing_images}; $additional_params->{"conf_parts_show_image"} = $::lx_office_conf{features}->{parts_show_image}; + $additional_params->{"INSTANCE_CONF"} = $::instance_conf; if (%main::debug_options) { map { $additional_params->{'DEBUG_' . uc($_)} = $main::debug_options{$_} } keys %main::debug_options; diff --git a/SL/InstanceConfiguration.pm b/SL/InstanceConfiguration.pm new file mode 100644 index 000000000..b8dbee6ca --- /dev/null +++ b/SL/InstanceConfiguration.pm @@ -0,0 +1,88 @@ +package SL::InstanceConfiguration; + +use strict; + +use SL::DBUtils; + +sub new { + my ($class) = @_; + + return bless {}, $class; +} + +sub init { + my ($self) = @_; + + $self->{data} = selectfirst_hashref_query($::form, $::form->get_standard_dbh, qq|SELECT * FROM defaults|); + + my $curr = $self->{data}->{curr} || ''; + $curr =~ s/\s+//g; + $self->{currencies} = [ split m/:/, $curr ]; + + return $self; +} + +sub get_default_currency { + my ($self) = @_; + + return ($self->get_currencies)[0]; +} + +sub get_currencies { + my ($self) = @_; + + return $self->{currencies} ? @{ $self->{currencies} } : (); +} + +1; + +__END__ + +=pod + +=encoding utf8 + +=head1 NAME + +SL::InstanceConfiguration - Provide instance-specific configuration data + +=head1 SYNOPSIS + +Lx-Office has two configuration levels: installation specific +(provided by the global variable C<%::lxoffice_conf>) and instance +specific. The latter is provided by a global instance of this class, +C<$::instance_conf>. + +=head1 FUNCTIONS + +=over 4 + +=item C + +Creates a new instance. Does not read the configuration. + +=item C + +Reads the configuration from the database. Returns C<$self>. + +=item C + +Returns an array of configured currencies. + +=item C + +Returns the default currency or undef if no currency has been +configured. + +=back + +=head1 BUGS + +Updates to the I table require that the instance +configuration is re-read. This has not been implemented yet. + +=head1 AUTHOR + +Moritz Bunkus Em.bunkus@linet-services.deE + +=cut diff --git a/scripts/console b/scripts/console index 8443321e1..b9b474585 100755 --- a/scripts/console +++ b/scripts/console @@ -44,6 +44,7 @@ use DateTime; use SL::Auth; use SL::Form; use SL::Helper::DateTime; +use SL::InstanceConfiguration; use SL::Locale; use SL::LXDebug; use Data::Dumper; @@ -64,6 +65,7 @@ sub lxinit { $::cgi = CGI->new qw(); $::form = Form->new; $::auth = SL::Auth->new; + $::instance_conf = SL::InstanceConfiguration->new; die 'cannot reach auth db' unless $::auth->session_tables_present; @@ -77,6 +79,7 @@ sub lxinit { die "cannot find locale for user $login" unless $::locale = Locale->new($::myconfig{countrycode}); + $::instance_conf->init; return "logged in as $login"; }