X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FHelper%2FGetModels%2FFiltered.pm;h=aac5e1ae9e272bcb4f5e6f1b80b7b8031c692c05;hb=9dfd320ff258071e3ad78dd6cf2d76e215efd4f7;hp=88a29886074c55f35a8ae99c82920987f666d25d;hpb=8a5a3e9c4f991f278171843a6335bcb4724bd03f;p=kivitendo-erp.git diff --git a/SL/Controller/Helper/GetModels/Filtered.pm b/SL/Controller/Helper/GetModels/Filtered.pm index 88a298860..aac5e1ae9 100644 --- a/SL/Controller/Helper/GetModels/Filtered.pm +++ b/SL/Controller/Helper/GetModels/Filtered.pm @@ -8,8 +8,8 @@ use SL::Controller::Helper::ParseFilter (); use List::MoreUtils qw(uniq); use Rose::Object::MakeMethods::Generic ( - scalar => [ qw(filter_args filter_params orig_filter) ], - 'scalar --get_set_init' => [ qw(form_params launder_to) ], + scalar => [ qw(filter_args filter_params orig_filter filter no_launder) ], + 'scalar --get_set_init' => [ qw(form_params laundered) ], ); sub init { @@ -31,7 +31,7 @@ sub read_params { return %{ $self->filter_params } if $self->filter_params; my $source = $self->get_models->source; - my $filter = $params{filter} // $source->{ $self->form_params } // {}; + my $filter = $self->filter // $source->{ $self->form_params } // {}; $self->orig_filter($filter); my %filter_args = $self->_get_filter_args; @@ -39,27 +39,20 @@ sub read_params { class => $self->get_models->manager, with_objects => $params{with_objects}, ); - my $laundered; - if ($self->launder_to eq '__INPLACE__') { - # nothing to do - } elsif ($self->launder_to) { - $laundered = {}; - $parse_filter_args{launder_to} = $laundered; + + # Store laundered result in $self->laundered. + + if (!$self->no_launder) { + $self->laundered({}); + $parse_filter_args{launder_to} = $self->laundered; } else { + $self->laundered(undef); $parse_filter_args{no_launder} = 1; } my %calculated_params = SL::Controller::Helper::ParseFilter::parse_filter($filter, %parse_filter_args); %calculated_params = $self->merge_args(\%calculated_params, \%filter_args, \%params); - if ($laundered) { - if ($self->get_models->controller->can($self->launder_to)) { - $self->get_models->controller->${\ $self->launder_to }($laundered); - } else { - $self->get_models->controller->{$self->launder_to} = $laundered; - } - } - # $::lxdebug->dump(0, "get_current_filter_params: ", \%calculated_params); $self->filter_params(\%calculated_params); @@ -107,10 +100,12 @@ sub init_form_params { 'filter' } -sub init_launder_to { - 'filter' -} +sub init_laundered { + my ($self) = @_; + $self->get_models->finalize; + return $self->{laundered}; +} 1; @@ -132,7 +127,7 @@ In a controller: ... filtered => { filter => HASHREF, - launder_to => HASHREF | SUBNAME | '__INPLACE__', + no_launder => 0 | 1, } OR @@ -140,7 +135,6 @@ In a controller: filtered => 0, ); - =head1 OVERVIEW This C plugin enables use of the @@ -163,17 +157,9 @@ Optional. Indicates a key in C to be used as filter. Defaults to the value C if missing. -=item * C +=item * C -Optional. Indicates a target for laundered filter arguments in the controller. -Can be set to C to disable laundering, and can be set to method named or -hash keys of the controller. In the latter case the laundered structure will be -put there. - -Defaults to the controller. Laundered values will end up in C for -template purposes. - -Setting this to the special value C<__INPLACE__> will cause inplace laundering. +Optional. If given and trueish then laundering is disabled. =back @@ -184,7 +170,19 @@ See L for a description of the filter forma =head1 CUSTOM FILTERS C will honor custom filters defined in RDBO managers. See -L for an explanation fo those. +L for an explanation of those. + +=head1 FUNCTIONS + +=over 4 + +=item C + +Finalizes the object (which causes laundering of the filter structure) +and returns a hashref of the laundered filter. If the plugin is +configured not to launder then C will be returned. + +=back =head1 BUGS