Revision a615812c
Von Sven Schöling vor mehr als 10 Jahren hinzugefügt
SL/Controller/Helper/ParseFilter.pm | ||
---|---|---|
167 | 167 |
my $obj_prefix = join '.', @tokens, ''; |
168 | 168 |
|
169 | 169 |
if ($manager->can('filter')) { |
170 |
($key, $value, my $obj) = $manager->filter($last_token, $value, $obj_prefix); |
|
170 |
($key, $value, my $obj) = $manager->filter($last_token, $value, $obj_prefix, $obj_path);
|
|
171 | 171 |
_add_uniq($with_objects, $obj) if $obj; |
172 | 172 |
} else { |
173 | 173 |
_add_uniq($with_objects, $obj_path) if $obj_path; |
SL/DB/Helper/Filtered.pm | ||
---|---|---|
10 | 10 |
my %filter_spec; |
11 | 11 |
|
12 | 12 |
sub filter { |
13 |
my ($class, $key, $value, $prefix) = @_; |
|
13 |
my ($class, $key, $value, $prefix, $path) = @_;
|
|
14 | 14 |
|
15 | 15 |
my $filters = _get_filters($class); |
16 | 16 |
|
17 |
return ($prefix . $key, $value) unless $filters->{$key}; |
|
17 |
return ($prefix . $key, $value, $path) unless $filters->{$key};
|
|
18 | 18 |
|
19 | 19 |
return $filters->{$key}->($key, $value, $prefix); |
20 | 20 |
} |
t/controllers/helpers/parse_filter.t | ||
---|---|---|
291 | 291 |
'part.partnumber', { |
292 | 292 |
ilike => '%1%' |
293 | 293 |
} |
294 |
] |
|
294 |
], |
|
295 |
with_objects => [ 'part' ], |
|
295 | 296 |
}, 'Regression check: prefixing of fallback filtering in relation with custom filters', class => 'SL::DB::Manager::OrderItem'; |
296 | 297 |
test { |
297 | 298 |
'description:substr:multi::ilike' => 'term1 term2', |
Auch abrufbar als: Unified diff
ParseFilter: with_objects merging bei Klassen mit Filtered Plugin
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.