Revision 140a7c83
Von Moritz Bunkus vor fast 11 Jahren hinzugefügt
SL/Controller/Helper/ParseFilter.pm | ||
---|---|---|
101 | 101 |
my @result; |
102 | 102 |
for (my $i = 0; $i < scalar @$flattened; $i += 2) { |
103 | 103 |
my ($key, $value) = ($flattened->[$i], $flattened->[$i+1]); |
104 |
my ($type, $op) = $key =~ m{:(.+)::(.+)}; |
|
104 | 105 |
|
105 | 106 |
($key, $value) = _apply_all($key, $value, qr/\b:(\w+)/, { %filters, %{ $params{filters} || {} } }); |
106 | 107 |
($key, $value) = _apply_all($key, $value, qr/\b::(\w+)/, { %methods, %{ $params{methods} || {} } }); |
107 | 108 |
($key, $value) = _dispatch_custom_filters($params{class}, $with_objects, $key, $value) if $params{class}; |
109 |
($key, $value) = _apply_value_filters($key, $value, $type, $op); |
|
108 | 110 |
|
109 | 111 |
push @result, $key, $value if defined $key; |
110 | 112 |
} |
111 | 113 |
return \@result; |
112 | 114 |
} |
113 | 115 |
|
116 |
sub _apply_value_filters { |
|
117 |
my ($key, $value, $type, $op) = @_; |
|
118 |
|
|
119 |
return ($key, $value) unless $key && $value && $type && $op && (ref($value) eq 'HASH'); |
|
120 |
|
|
121 |
if (($type eq 'date') && ($op eq 'le')) { |
|
122 |
my $date = delete $value->{le}; |
|
123 |
$value->{lt} = $date->add(days => 1); |
|
124 |
} |
|
125 |
|
|
126 |
return ($key, $value); |
|
127 |
} |
|
128 |
|
|
114 | 129 |
sub _dispatch_custom_filters { |
115 | 130 |
my ($class, $with_objects, $key, $value) = @_; |
116 | 131 |
|
Auch abrufbar als: Unified diff
Filtered-Helfer: bei Typ 'date' und Operator 'le' Wert auf nächsten Tag ändern
Ist die Datenbankspalte vom Typ 'timestamp', so sind die Timestamps am
gleichen Tag wie das zu vergleichende Argument allesamt größer als das
vergleichende Argument. Der Benutzer erwartet aufgrund von <= aber,
dass die alle mit einbezogen werden.
Workaround: für Vergleichsoperation <= bei Feldtyp 'date' einfach das
Datum auf 'Anfang des nächsten Tages' erhöhen und den Vergleich auf <
ändern. Das funktioniert sowohl bei Datenbankspalten mit Typ 'date'
als auch bei denjenigen mit Typ 'timestamp'.
Behebt #2404.