Lines 20-25
use Modern::Perl;
Link Here
|
20 |
use Mojo::Base 'Mojolicious::Plugin'; |
20 |
use Mojo::Base 'Mojolicious::Plugin'; |
21 |
use List::MoreUtils qw(any); |
21 |
use List::MoreUtils qw(any); |
22 |
use Scalar::Util qw(reftype); |
22 |
use Scalar::Util qw(reftype); |
|
|
23 |
use JSON qw(decode_json); |
23 |
|
24 |
|
24 |
use Koha::Exceptions; |
25 |
use Koha::Exceptions; |
25 |
|
26 |
|
Lines 179-184
is raised.
Link Here
|
179 |
} |
180 |
} |
180 |
); |
181 |
); |
181 |
|
182 |
|
|
|
183 |
=head3 merge_q_params |
184 |
|
185 |
$c->merge_q_params( $filtered_params, $q_params, $result_set ); |
186 |
|
187 |
Merges parameters from $q_params into $filtered_params. |
188 |
|
189 |
=cut |
190 |
|
191 |
$app->helper( |
192 |
'merge_q_params' => sub { |
193 |
|
194 |
my ( $c, $filtered_params, $q_params, $result_set ) = @_; |
195 |
|
196 |
$q_params = decode_json($q_params) unless reftype $q_params; |
197 |
$q_params = $q_params->{q} if exists $q_params->{q} && scalar(keys %{$q_params}) == 1; |
198 |
|
199 |
my $params = _parse_dbic_query($q_params, $result_set); |
200 |
|
201 |
return $params unless scalar(keys %{$filtered_params}); |
202 |
return {'-and' => [$params, $filtered_params ]}; |
203 |
} |
204 |
); |
205 |
|
182 |
=head3 stash_embed |
206 |
=head3 stash_embed |
183 |
|
207 |
|
184 |
$c->stash_embed( $c->match->endpoint->pattern->defaults->{'openapi.op_spec'} ); |
208 |
$c->stash_embed( $c->match->endpoint->pattern->defaults->{'openapi.op_spec'} ); |
Lines 229-235
is raised.
Link Here
|
229 |
|
253 |
|
230 |
sub _reserved_words { |
254 |
sub _reserved_words { |
231 |
|
255 |
|
232 |
my @reserved_words = qw( _match _order_by _page _per_page ); |
256 |
my @reserved_words = qw( _match _order_by _page _per_page q ); |
233 |
return \@reserved_words; |
257 |
return \@reserved_words; |
234 |
} |
258 |
} |
235 |
|
259 |
|
Lines 340-343
sub _parse_prefetch {
Link Here
|
340 |
return $prefetch; |
364 |
return $prefetch; |
341 |
} |
365 |
} |
342 |
|
366 |
|
|
|
367 |
sub _from_api_param { |
368 |
my ($key, $result_set) = @_; |
369 |
|
370 |
if($key =~ /\./) { |
371 |
|
372 |
my ($curr, $next) = split /\s*\.\s*/, $key, 2; |
373 |
|
374 |
my $ko_class = $result_set->prefetch_whitelist->{$curr}; |
375 |
|
376 |
Koha::Exceptions::BadParameter->throw("Cannot find Koha::Object class for $curr") |
377 |
unless defined $ko_class; |
378 |
|
379 |
$result_set = $ko_class->new; |
380 |
|
381 |
if ($next =~ /\./) { |
382 |
return _from_api_param($next, $result_set); |
383 |
} else { |
384 |
return $curr.'.'.(defined $result_set->from_api_mapping ? $result_set->from_api_mapping->{$next}:$next); |
385 |
} |
386 |
} else { |
387 |
return defined $result_set->from_api_mapping->{$key} ? $result_set->from_api_mapping->{$key} : $key; |
388 |
} |
389 |
} |
390 |
|
391 |
sub _parse_dbic_query { |
392 |
my ($q_params, $result_set) = @_; |
393 |
|
394 |
if(reftype($q_params) && reftype($q_params) eq 'HASH') { |
395 |
my $parsed_hash; |
396 |
foreach my $key (keys %{$q_params}) { |
397 |
if($key =~ /-?(not_?)?bool/i ) { |
398 |
$parsed_hash->{$key} = _from_api_param($q_params->{$key}, $result_set); |
399 |
next; |
400 |
} |
401 |
my $k = _from_api_param($key, $result_set); |
402 |
$parsed_hash->{$k} = _parse_dbic_query($q_params->{$key}, $result_set); |
403 |
} |
404 |
return $parsed_hash; |
405 |
} elsif (reftype($q_params) && reftype($q_params) eq 'ARRAY') { |
406 |
my @mapped = map{ _parse_dbic_query($_, $result_set) } @$q_params; |
407 |
return \@mapped; |
408 |
} else { |
409 |
return $q_params; |
410 |
} |
411 |
|
412 |
} |
413 |
|
343 |
1; |
414 |
1; |