X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FHelper%2FCustomVariables.pm;h=3c43624dbcce7537c1bca81916cc407a3dcd294f;hb=824f9ddf5ac3c5d8f46fa8a3bcd49456aa9f0e22;hp=c935cbae5863a89713f77b97641350d5e1c83fee;hpb=a867016676febc197579586e202ddaac84bb7d50;p=kivitendo-erp.git diff --git a/SL/DB/Helper/CustomVariables.pm b/SL/DB/Helper/CustomVariables.pm index c935cbae5..3c43624db 100644 --- a/SL/DB/Helper/CustomVariables.pm +++ b/SL/DB/Helper/CustomVariables.pm @@ -4,7 +4,6 @@ use strict; use Carp; use Data::Dumper; use List::Util qw(first); -use SL::DB::CustomVariableConfig; use constant META_CVARS => 'cvars_config'; @@ -79,7 +78,19 @@ sub make_cvar_by_configs { my $cvars = $self->custom_variables; my %cvars_by_config = map { $_->config_id => $_ } @$cvars; - my @return = map { $cvars_by_config{$_->id} || _new_cvar($self, %params, config => $_) } @$configs; + my @return = map( + { + if ( $cvars_by_config{$_->id} ) { + $cvars_by_config{$_->id}; + } + else { + my $cvar = _new_cvar($self, %params, config => $_); + $self->add_custom_variables($cvar); + $cvar; + } + } + @$configs + ); return \@return; } @@ -113,6 +124,9 @@ sub make_cvar_by_name { sub _all_configs { my (%params) = @_; + + require SL::DB::CustomVariableConfig; + $params{module} ? SL::DB::Manager::CustomVariableConfig->get_all(query => [ module => $params{module} ]) : SL::DB::Manager::CustomVariableConfig->get_all; @@ -122,8 +136,8 @@ sub _overload_by_module { my ($module, %params) = @_; keys %{ $params{overloads} }; # reset each iterator - while (my ($fk, $class) = each %{ $params{overloads} }) { - return ($fk, $class) if $class->meta->{META_CVARS()}->{module} eq $module; + while (my ($fk, $def) = each %{ $params{overloads} }) { + return ($fk, $def->{class}) if $def->{module} eq $module; } croak "unknown overload, cannot resolve module $module"; @@ -155,11 +169,8 @@ sub _calc_modules_from_overloads { my (%params) = @_; my %modules; - while (my ($fk, $class) = each %{ $params{overloads} }) { - eval "require $class"; # make sure the class is loaded - my $module = $class->meta->{META_CVARS()}->{module}; - next if ref $module; - $modules{$module} = 1; + for my $def (values %{ $params{overloads} || {} }) { + $modules{$def->{module}} = 1; } return [ keys %modules ]; @@ -200,7 +211,10 @@ SL::DB::Helper::CustomVariables - Mixin to provide custom variables relations sub_module => 'orderitems', cvars_alias => 1, overloads => { - parts_id => 'SL::DB::Part', + parts_id => { + class => 'SL::DB::Part', + module => 'IC', + } } );