|
Lines 23-28
use Scalar::Util qw( reftype );
Link Here
|
| 23 |
use JSON qw( decode_json ); |
23 |
use JSON qw( decode_json ); |
| 24 |
|
24 |
|
| 25 |
use Koha::Exceptions; |
25 |
use Koha::Exceptions; |
|
|
26 |
use Koha::Exceptions::REST; |
| 26 |
|
27 |
|
| 27 |
=head1 NAME |
28 |
=head1 NAME |
| 28 |
|
29 |
|
|
Lines 159-164
Generates the DBIC prefetch attribute based on embedded relations, and merges in
Link Here
|
| 159 |
} |
160 |
} |
| 160 |
); |
161 |
); |
| 161 |
|
162 |
|
|
|
163 |
=head3 dbic_validate_operators |
| 164 |
|
| 165 |
$attributes = $c->dbic_validate_operators( { filtered_params => $filtered_params } ); |
| 166 |
|
| 167 |
Validate operators in the passed query. |
| 168 |
|
| 169 |
=cut |
| 170 |
|
| 171 |
$app->helper( |
| 172 |
'dbic_validate_operators' => sub { |
| 173 |
my ( $c, $args ) = @_; |
| 174 |
_validate_query( $args->{filtered_params} ); |
| 175 |
} |
| 176 |
); |
| 177 |
|
| 162 |
=head3 _build_query_params_from_api |
178 |
=head3 _build_query_params_from_api |
| 163 |
|
179 |
|
| 164 |
my $params = _build_query_params_from_api( $filtered_params, $reserved_params ); |
180 |
my $params = _build_query_params_from_api( $filtered_params, $reserved_params ); |
|
Lines 489-492
sub _parse_dbic_query {
Link Here
|
| 489 |
|
505 |
|
| 490 |
} |
506 |
} |
| 491 |
|
507 |
|
|
|
508 |
=head3 _validate_operator |
| 509 |
|
| 510 |
=cut |
| 511 |
|
| 512 |
sub _validate_operator { |
| 513 |
my ($operator) = @_; |
| 514 |
my %allowed_operators = map { $_ => 1 } qw(= != < > <= >= like -not_like -in -ident -bool -not_bool -or); |
| 515 |
Koha::Exceptions::REST::Query::InvalidOperator->throw( operator => $operator ) |
| 516 |
unless exists $allowed_operators{$operator}; |
| 517 |
return; |
| 518 |
} |
| 519 |
|
| 520 |
=head3 _validate_query |
| 521 |
|
| 522 |
=cut |
| 523 |
|
| 524 |
sub _validate_query { |
| 525 |
my ($query) = @_; |
| 526 |
|
| 527 |
if ( ref $query eq 'HASH' ) { |
| 528 |
for my $field ( keys %$query ) { |
| 529 |
my $value = $query->{$field}; |
| 530 |
|
| 531 |
if ( ref $value eq 'HASH' ) { |
| 532 |
|
| 533 |
# Hash reference with operators |
| 534 |
for my $operator ( keys %$value ) { |
| 535 |
_validate_operator($operator); |
| 536 |
} |
| 537 |
} elsif ( ref $value eq 'ARRAY' ) { |
| 538 |
|
| 539 |
# Array reference with operator as the first element |
| 540 |
_validate_query($value); |
| 541 |
} else { |
| 542 |
|
| 543 |
# Simple key-value pairs (no operator to validate) |
| 544 |
} |
| 545 |
} |
| 546 |
} elsif ( ref $query eq 'ARRAY' ) { |
| 547 |
|
| 548 |
# Top-level OR combination or nested AND combination |
| 549 |
for my $element (@$query) { |
| 550 |
if ( ref $element eq 'ARRAY' && $element->[0] eq '-and' ) { |
| 551 |
_validate_query( $element->[1] ); |
| 552 |
} else { |
| 553 |
_validate_query($element); |
| 554 |
} |
| 555 |
} |
| 556 |
} |
| 557 |
} |
| 558 |
|
| 492 |
1; |
559 |
1; |
| 493 |
- |
|
|