diff --git a/config-lib.pl b/config-lib.pl index 816091d44..2f748e870 100755 --- a/config-lib.pl +++ b/config-lib.pl @@ -59,8 +59,8 @@ foreach $o (@lang_order_list) { # Call any config pre-load function if (&foreign_func_exists($module, 'config_pre_load')) { - &foreign_call($module, "config_pre_load", \%info, \@info_order) - &foreign_call($module, "config_pre_load", \%einfo) + &foreign_call($module, "config_pre_load", \%info, \@info_order); + &foreign_call($module, "config_pre_load", \%einfo); } @info_order = &unique(@info_order); @@ -344,6 +344,20 @@ foreach my $c (@info_order) { $config->{$c}, @p); } } + +# If config fields are conditional (not displayed) +# make sure to preserve system default values to +# prevent changing behaviour of a module +if (&foreign_exists($module) && + &foreign_require($module) && + &foreign_func_exists($module, 'config_preserve')) { + my @config_preserve = &foreign_call($module, "config_preserve"); + my %oldmoduleconf; + &read_file("$config_directory/$module/config", \%oldmoduleconf); + foreach my $o (@config_preserve) { + $config->{$o} = $oldmoduleconf{$o}; + } + } } # config_in_section(§ion, &order, &config-info)