Eine Klasse & globale Variable zur Verwaltung von mandantenbasierter Konfiguration
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 29 Jun 2011 08:43:28 +0000 (10:43 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 29 Jun 2011 08:44:58 +0000 (10:44 +0200)
SL/Controller/Base.pm
SL/Dispatcher.pm
SL/Form.pm
SL/InstanceConfiguration.pm [new file with mode: 0644]
scripts/console

index 152fbb7..392f441 100644 (file)
@@ -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,
index 0071e81..03f1c57 100644 (file)
@@ -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';
 
index bed92e2..e919714 100644 (file)
@@ -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 (file)
index 0000000..b8dbee6
--- /dev/null
@@ -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<new>
+
+Creates a new instance. Does not read the configuration.
+
+=item C<init>
+
+Reads the configuration from the database. Returns C<$self>.
+
+=item C<get_currencies>
+
+Returns an array of configured currencies.
+
+=item C<get_default_currency>
+
+Returns the default currency or undef if no currency has been
+configured.
+
+=back
+
+=head1 BUGS
+
+Updates to the I<defaults> table require that the instance
+configuration is re-read. This has not been implemented yet.
+
+=head1 AUTHOR
+
+Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
+
+=cut
index 8443321..b9b4745 100755 (executable)
@@ -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";
 }