|
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); |
| 197 |
|
| 198 |
my $params = _parse_dbic_query($q_params, $result_set); |
| 199 |
|
| 200 |
return $params unless scalar(keys %{$filtered_params}); |
| 201 |
return {'-and' => [$params, $filtered_params ]}; |
| 202 |
} |
| 203 |
); |
| 204 |
|
| 182 |
=head3 stash_embed |
205 |
=head3 stash_embed |
| 183 |
|
206 |
|
| 184 |
$c->stash_embed( $c->match->endpoint->pattern->defaults->{'openapi.op_spec'} ); |
207 |
$c->stash_embed( $c->match->endpoint->pattern->defaults->{'openapi.op_spec'} ); |
|
Lines 229-235
is raised.
Link Here
|
| 229 |
|
252 |
|
| 230 |
sub _reserved_words { |
253 |
sub _reserved_words { |
| 231 |
|
254 |
|
| 232 |
my @reserved_words = qw( _match _order_by _page _per_page ); |
255 |
my @reserved_words = qw( _match _order_by _page _per_page q ); |
| 233 |
return \@reserved_words; |
256 |
return \@reserved_words; |
| 234 |
} |
257 |
} |
| 235 |
|
258 |
|
|
Lines 340-343
sub _parse_prefetch {
Link Here
|
| 340 |
return $prefetch; |
363 |
return $prefetch; |
| 341 |
} |
364 |
} |
| 342 |
|
365 |
|
|
|
366 |
sub _from_api_param { |
| 367 |
my ($key, $result_set) = @_; |
| 368 |
|
| 369 |
if($key =~ /\./) { |
| 370 |
|
| 371 |
my ($curr, $next) = split /\s*\.\s*/, $key, 2; |
| 372 |
|
| 373 |
my $ko_class = $result_set->prefetch_whitelist->{$curr}; |
| 374 |
|
| 375 |
Koha::Exceptions::BadParameter->throw("Cannot find Koha::Object class for $curr") |
| 376 |
unless defined $ko_class; |
| 377 |
|
| 378 |
$result_set = $ko_class->new; |
| 379 |
|
| 380 |
if ($next =~ /\./) { |
| 381 |
return _from_api_param($next, $result_set); |
| 382 |
} else { |
| 383 |
return $curr.'.'.(defined $result_set->from_api_mapping ? $result_set->from_api_mapping->{$next}:$next); |
| 384 |
} |
| 385 |
} else { |
| 386 |
return defined $result_set->from_api_mapping->{$key} ? $result_set->from_api_mapping->{$key} : $key; |
| 387 |
} |
| 388 |
} |
| 389 |
|
| 390 |
sub _parse_dbic_query { |
| 391 |
my ($q_params, $result_set) = @_; |
| 392 |
|
| 393 |
if(reftype($q_params) && reftype($q_params) eq 'HASH') { |
| 394 |
my $parsed_hash; |
| 395 |
foreach my $key (keys %{$q_params}) { |
| 396 |
if($key =~ /-?(not_?)?bool/i ) { |
| 397 |
$parsed_hash->{$key} = _from_api_param($q_params->{$key}, $result_set); |
| 398 |
next; |
| 399 |
} |
| 400 |
my $k = _from_api_param($key, $result_set); |
| 401 |
$parsed_hash->{$k} = _parse_dbic_query($q_params->{$key}, $result_set); |
| 402 |
} |
| 403 |
return $parsed_hash; |
| 404 |
} elsif (reftype($q_params) && reftype($q_params) eq 'ARRAY') { |
| 405 |
my @mapped = map{ _parse_dbic_query($_, $result_set) } @$q_params; |
| 406 |
return \@mapped; |
| 407 |
} else { |
| 408 |
return $q_params; |
| 409 |
} |
| 410 |
|
| 411 |
} |
| 412 |
|
| 343 |
1; |
413 |
1; |