]> wagnertech.de Git - kivitendo-erp.git/commitdiff
ParseFilter: with_objects merging bei Klassen mit Filtered Plugin
authorSven Schöling <s.schoeling@linet-services.de>
Mon, 15 Sep 2014 13:18:51 +0000 (15:18 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Mon, 15 Sep 2014 13:18:51 +0000 (15:18 +0200)
ParseFilter kennt 3 Quellen für with_objects Klauseln:

1. explizit übergebene
2. aus dem Filter inferierte
3. aus custom filtern gesetzte

Wenn nun ein Model das Custom Filter Plugin hat, muss bei jedem Filter
getestet werden, ob dieser Filter eigene with_objects setzt oder nicht.
Wenn der Filter aber auf eine normale Spalte zeigt, muss wie ohne Klasse
auch der Standardpfad als Include gesetzt werden. Das war aber nicht der
Fall.

SL/Controller/Helper/ParseFilter.pm
SL/DB/Helper/Filtered.pm
t/controllers/helpers/parse_filter.t

index 308952b63a4d90e4e09d98f91bb324b0865ad685..37b06737d1935fe8b13d9a8e2a703089ab1c1ceb 100644 (file)
@@ -167,7 +167,7 @@ sub _dispatch_custom_filters {
   my $obj_prefix = join '.', @tokens, '';
 
   if ($manager->can('filter')) {
-    ($key, $value, my $obj) = $manager->filter($last_token, $value, $obj_prefix);
+    ($key, $value, my $obj) = $manager->filter($last_token, $value, $obj_prefix, $obj_path);
     _add_uniq($with_objects, $obj) if $obj;
   } else {
     _add_uniq($with_objects, $obj_path) if $obj_path;
index e95c01f053a4a6ad6daab6623647cd6e85927c61..0b2b473d8d641ea76851e59407e2d2b0f5d4c68b 100644 (file)
@@ -10,11 +10,11 @@ our @EXPORT = qw (filter add_filter_specs);
 my %filter_spec;
 
 sub filter {
-  my ($class, $key, $value, $prefix) = @_;
+  my ($class, $key, $value, $prefix, $path) = @_;
 
   my $filters = _get_filters($class);
 
-  return ($prefix . $key, $value) unless $filters->{$key};
+  return ($prefix . $key, $value, $path) unless $filters->{$key};
 
   return $filters->{$key}->($key, $value, $prefix);
 }
index 0511346607ac1a35c994dc90f134da34a46a5850..583b26cd397cb66dcb40e08d75f57ea934a85820 100644 (file)
@@ -291,7 +291,8 @@ test {
    'part.partnumber', {
      ilike => '%1%'
    }
- ]
+ ],
+ with_objects => [ 'part' ],
 }, 'Regression check: prefixing of fallback filtering in relation with custom filters', class => 'SL::DB::Manager::OrderItem';
 test {
   'description:substr:multi::ilike' => 'term1 term2',