X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FLxOfficeConf.pm;h=51ad991d916cfad4ed80d65233bef4320355c01a;hb=651e45595ce939cbfa0f9b349743b7f9f6a24e1e;hp=8f44016e6b43175493b2e32c0e7c12b000ed4e6e;hpb=88ece3cf8f702fc8c43abd627358d700eb0cf1c5;p=kivitendo-erp.git diff --git a/SL/LxOfficeConf.pm b/SL/LxOfficeConf.pm index 8f44016e6..51ad991d9 100644 --- a/SL/LxOfficeConf.pm +++ b/SL/LxOfficeConf.pm @@ -5,15 +5,24 @@ use strict; use Config::Std; use Encode; +my $environment_initialized; + sub read { + my ($class, $file_name) = @_; + read_config 'config/lx_office.conf.default' => %::lx_office_conf; _decode_recursively(\%::lx_office_conf); - if (-f 'config/lx_office.conf') { - read_config 'config/lx_office.conf' => my %local_conf; + $file_name ||= 'config/lx_office.conf'; + + if (-f $file_name) { + read_config $file_name => my %local_conf; _decode_recursively(\%local_conf); _flat_merge(\%::lx_office_conf, \%local_conf); } + + _init_environment(); + _determine_application_paths(); } sub _decode_recursively { @@ -41,4 +50,44 @@ sub _flat_merge { } } +sub _init_environment { + return if $environment_initialized; + + my %key_map = ( lib => { name => 'PERL5LIB', append_path => 1 }, + path => { name => 'PATH', append_path => 1 }, + ); + my $cfg = $::lx_office_conf{environment} || {}; + + while (my ($key, $value) = each %{ $cfg }) { + next unless $value; + + my $info = $key_map{$key} || {}; + $key = $info->{name} || $key; + + if ($info->{append_path}) { + $value = ':' . $value unless $value =~ m/^:/ || !$ENV{$key}; + $value = $ENV{$key} . $value if $ENV{$key}; + } + + $ENV{$key} = $value; + } + + $environment_initialized = 1; +} + +sub _determine_application_paths { + my @paths = grep { $_ } split m/:/, $ENV{PATH}; + + foreach my $key (keys %{ $::lx_office_conf{applications} }) { + my ($program) = split m/\s+/, $::lx_office_conf{applications}->{$key}; + next if $program =~ m|/|; + + foreach my $path (@paths) { + next unless -f "${path}/${program}"; + $::lx_office_conf{applications}->{$key} = "${path}/" . $::lx_office_conf{applications}->{$key}; + last; + } + } +} + 1;