X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FHelper%2FCustomVariables.pm;h=373a60cf1cb1e6456cb4967c4ee23fb1a691cdc9;hb=d0118dc6303e04507a77f3dde2c2bf0565ecb388;hp=c935cbae5863a89713f77b97641350d5e1c83fee;hpb=7beb1ac3a56890eb50274a92d54a93583b063121;p=kivitendo-erp.git diff --git a/SL/DB/Helper/CustomVariables.pm b/SL/DB/Helper/CustomVariables.pm index c935cbae5..373a60cf1 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'; @@ -43,8 +42,11 @@ sub save_meta_info { sub make_cvar_accessor { my ($caller_package, %params) = @_; - my @module_filter = $params{module} ? - ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module = '$params{module}')" ]) : + my $modules = ('ARRAY' eq ref $params{module}) ? + join ',', @{ $params{module} } : + $params{module}; + my @module_filter = $modules ? + ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module IN ( '$modules' ))" ]) : # " make emacs happy (); $caller_package->meta->add_relationships( @@ -79,7 +81,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 +127,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 +139,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 +172,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 +214,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', + } } );