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 187-192
Generates the DBIC join attribute based on extended_attributes query entries, an
Link Here
|
187 |
} |
188 |
} |
188 |
); |
189 |
); |
189 |
|
190 |
|
|
|
191 |
=head3 dbic_validate_operators |
192 |
|
193 |
$attributes = $c->dbic_validate_operators( { filtered_params => $filtered_params } ); |
194 |
|
195 |
Validate operators in the passed query. |
196 |
|
197 |
=cut |
198 |
|
199 |
$app->helper( |
200 |
'dbic_validate_operators' => sub { |
201 |
my ( $c, $args ) = @_; |
202 |
_validate_query( $args->{filtered_params} ); |
203 |
} |
204 |
); |
205 |
|
190 |
=head3 _build_query_params_from_api |
206 |
=head3 _build_query_params_from_api |
191 |
|
207 |
|
192 |
my $params = _build_query_params_from_api( $filtered_params, $reserved_params ); |
208 |
my $params = _build_query_params_from_api( $filtered_params, $reserved_params ); |
Lines 641-644
sub _rewrite_related_metadata_query {
Link Here
|
641 |
return $extended_attributes_entries; |
657 |
return $extended_attributes_entries; |
642 |
} |
658 |
} |
643 |
|
659 |
|
|
|
660 |
=head3 _validate_operator |
661 |
|
662 |
=cut |
663 |
|
664 |
sub _validate_operator { |
665 |
my ($operator) = @_; |
666 |
my %allowed_operators = map { $_ => 1 } qw(= != < > <= >= like -not_like -in -ident -bool -not_bool -or); |
667 |
Koha::Exceptions::REST::Query::InvalidOperator->throw( operator => $operator ) |
668 |
unless exists $allowed_operators{$operator}; |
669 |
return; |
670 |
} |
671 |
|
672 |
=head3 _validate_query |
673 |
|
674 |
=cut |
675 |
|
676 |
sub _validate_query { |
677 |
my ($query) = @_; |
678 |
|
679 |
if ( ref $query eq 'HASH' ) { |
680 |
for my $field ( keys %$query ) { |
681 |
my $value = $query->{$field}; |
682 |
|
683 |
if ( ref $value eq 'HASH' ) { |
684 |
|
685 |
# Hash reference with operators |
686 |
for my $operator ( keys %$value ) { |
687 |
_validate_operator($operator); |
688 |
} |
689 |
} elsif ( ref $value eq 'ARRAY' ) { |
690 |
|
691 |
# Array reference with operator as the first element |
692 |
_validate_query($value); |
693 |
} else { |
694 |
|
695 |
# Simple key-value pairs (no operator to validate) |
696 |
} |
697 |
} |
698 |
} elsif ( ref $query eq 'ARRAY' ) { |
699 |
|
700 |
# Top-level OR combination or nested AND combination |
701 |
for my $element (@$query) { |
702 |
if ( ref $element eq 'ARRAY' && $element->[0] eq '-and' ) { |
703 |
_validate_query( $element->[1] ); |
704 |
} else { |
705 |
_validate_query($element); |
706 |
} |
707 |
} |
708 |
} |
709 |
} |
710 |
|
644 |
1; |
711 |
1; |
645 |
- |
|
|