Lines 22-27
use Mojo::Base 'Mojolicious::Controller';
Link Here
|
22 |
use Koha::Acquisition::Orders; |
22 |
use Koha::Acquisition::Orders; |
23 |
|
23 |
|
24 |
use Clone qw( clone ); |
24 |
use Clone qw( clone ); |
|
|
25 |
use JSON; |
25 |
use Scalar::Util qw( blessed ); |
26 |
use Scalar::Util qw( blessed ); |
26 |
use Try::Tiny qw( catch try ); |
27 |
use Try::Tiny qw( catch try ); |
27 |
|
28 |
|
Lines 78-85
sub list {
Link Here
|
78 |
if ( exists $reserved_params->{_order_by} ) { |
79 |
if ( exists $reserved_params->{_order_by} ) { |
79 |
# _order_by passed, fix if required |
80 |
# _order_by passed, fix if required |
80 |
for my $p ( @{$reserved_params->{_order_by}} ) { |
81 |
for my $p ( @{$reserved_params->{_order_by}} ) { |
81 |
$p =~ s|biblio\.|biblio\.biblioitem\.|g |
82 |
$p = $c->table_name_fixer($p); |
82 |
if $p =~ m/.*(isbn|ean|publisher).*/; |
|
|
83 |
} |
83 |
} |
84 |
} |
84 |
} |
85 |
|
85 |
|
Lines 132-155
sub list {
Link Here
|
132 |
} |
132 |
} |
133 |
} |
133 |
} |
134 |
|
134 |
|
135 |
if ( defined $reserved_params->{q} || defined $reserved_params->{query} || defined $reserved_params->{'x-koha-query'}) { |
135 |
if ( defined $reserved_params->{q} |
|
|
136 |
|| defined $reserved_params->{query} |
137 |
|| defined $reserved_params->{'x-koha-query'} ) |
138 |
{ |
139 |
|
136 |
$filtered_params //={}; |
140 |
$filtered_params //={}; |
|
|
141 |
|
137 |
my @query_params_array; |
142 |
my @query_params_array; |
138 |
my $query_params; |
|
|
139 |
|
143 |
|
140 |
# FIXME The following lines are an ugly fix to deal with isbn and ean searches |
144 |
my $json = JSON->new; |
141 |
# This must NOT be reused or extended |
145 |
|
142 |
# Instead we need a better and global solution in a Koha::*Biblio method |
146 |
# q is defined as multi => JSON::Validator generates an array |
143 |
for my $q ( qw( q query x-koha-query ) ) { |
147 |
# containing the string |
144 |
next unless $reserved_params->{$q}; |
148 |
foreach my $q ( @{ $reserved_params->{q} } ) { |
145 |
for my $f ( qw( isbn ean publisher ) ) { |
149 |
push @query_params_array, |
146 |
$reserved_params->{$q} =~ s|"biblio.$f":|"biblio.biblioitem.$f":|g; |
150 |
$json->decode( $c->table_name_fixer($q) ) |
147 |
} |
151 |
if $q; # skip if exists but is empty |
148 |
push @query_params_array, $reserved_params->{$q}; |
|
|
149 |
} |
152 |
} |
150 |
|
153 |
|
151 |
if(scalar(@query_params_array) > 1) { |
154 |
# x-koha-query contains a string |
152 |
$query_params = {'-and' => \@query_params_array}; |
155 |
push @query_params_array, |
|
|
156 |
$json->decode( |
157 |
$c->table_name_fixer( $reserved_params->{'x-koha-query'} ) ) |
158 |
if $reserved_params->{'x-koha-query'}; |
159 |
|
160 |
# query is already decoded by JSON::Validator at this point |
161 |
push @query_params_array, |
162 |
$json->decode( |
163 |
$c->table_name_fixer( |
164 |
$json->encode( $reserved_params->{query} ) |
165 |
) |
166 |
) if $reserved_params->{query}; |
167 |
|
168 |
my $query_params; |
169 |
|
170 |
if ( scalar(@query_params_array) > 1 ) { |
171 |
$query_params = { '-and' => \@query_params_array }; |
153 |
} |
172 |
} |
154 |
else { |
173 |
else { |
155 |
$query_params = $query_params_array[0]; |
174 |
$query_params = $query_params_array[0]; |
Lines 309-312
sub delete {
Link Here
|
309 |
}; |
328 |
}; |
310 |
} |
329 |
} |
311 |
|
330 |
|
|
|
331 |
=head2 Internal methods |
332 |
|
333 |
=head3 table_name_fixer |
334 |
|
335 |
$q = $c->table_name_fixer( $q ); |
336 |
|
337 |
The Koha::Biblio representation includes the biblioitem.* attributes. This is handy |
338 |
for API consumers but as they are different tables, converting the queries that mention |
339 |
biblioitem columns can be tricky. This method renames known column names as used on Koha's |
340 |
UI. |
341 |
|
342 |
=cut |
343 |
|
344 |
sub table_name_fixer { |
345 |
my ( $self, $q ) = @_; |
346 |
|
347 |
$q =~ s|biblio\.|biblio\.biblioitem\.|g |
348 |
if $q =~ m/.*(isbn|ean|publisher).*/; |
349 |
|
350 |
return $q; |
351 |
} |
352 |
|
312 |
1; |
353 |
1; |
313 |
- |
|
|