GetModels Filtered: manuelles Setzen von launder_to entfernt
[kivitendo-erp.git] / SL / Controller / Helper / GetModels / Filtered.pm
index 642d542..849c0e0 100644 (file)
@@ -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 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 {
@@ -39,24 +39,25 @@ 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);
+  if ($self->laundered) {
+    if ($self->get_models->controller->can('filter')) {
+      $self->get_models->controller->filter($self->laundered);
     } else {
-      $self->get_models->controller->{$self->launder_to} = $laundered;
+      $self->get_models->controller->{filter} = $self->laundered;
     }
   }
 
@@ -107,10 +108,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 +135,7 @@ In a controller:
     ...
     filtered => {
       filter      => HASHREF,
-      launder_to  => HASHREF | SUBNAME | '__INPLACE__',
+      no_launder  => 0 | 1,
     }
 
     OR
@@ -162,17 +165,9 @@ Optional. Indicates a key in C<source> to be used as filter.
 
 Defaults to the value C<filter> if missing.
 
-=item * C<launder_to>
-
-Optional. Indicates a target for laundered filter arguments in the controller.
-Can be set to C<undef> 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<SELF.filter> for
-template purposes.
+=item * C<no_launder>
 
-Setting this to the special value C<__INPLACE__> will cause inplace laundering.
+Optional. If given and trueish then laundering is disabled.
 
 =back
 
@@ -185,6 +180,18 @@ See L<SL::Controller::Helper::ParseFilter> for a description of the filter forma
 C<Filtered> will honor custom filters defined in RDBO managers. See
 L<SL::DB::Helper::Filtered> for an explanation fo those.
 
+=head1 FUNCTIONS
+
+=over 4
+
+=item C<laundered>
+
+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<undef> will be returned.
+
+=back
+
 =head1 BUGS
 
 =over 4