Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision a615812c

Von Sven Schöling vor mehr als 10 Jahren hinzugefügt

  • ID a615812c73cf5b07005b4f56aae5aa1da8357ee9
  • Vorgänger f16a89c9
  • Nachfolger 45f6e6ce

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.

Unterschiede anzeigen:

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