From f34c6e468688d599f60719ca5dcf7f7a076cc6b4 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 2 Feb 2022 17:04:08 -0300 Subject: [PATCH] Bug 29570: Fix sorting orders by biblioitems columns The API representation of Koha::Biblio objects includes the biblioitems.* columns too. This proved problematic as queries had to get translated so they work (i.e. if a query passes q={"biblio.ean":"123%"} then the query needs to be tweaked so biblio.ean is translated into biblio.biblioitem.ean. This is solved, locally, in the controller. But sorting needs the same kind of tweak, and it was missing. This patch solves that by doing a similar conversion. To test: 1. Apply the regression tests patch 2. Run: $ kshell k$ prove t/db_dependent/api/v1/acquisitions_orders.t => FAIL: Tests fail, searching on a 'biblioitems' column generates a 500 error. 3. Apply this patch 4. Repeat 2 => SUCCESS: Tests pass! We can sort on those fields 5. Sign off :-D Note: you will notice the tests only cover sorting by ISBN. I consider it enough as sorting is a DB problem, and we only want to know if the generated ORDER BY is valid for the underlying query, and MySQL would complain if it wasn't the case. Signed-off-by: Tomas Cohen Arazi Signed-off-by: Lucas Gass Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall (cherry picked from commit d3dc05279cb5c3a38428aaf83d8645d38d2fe180) Signed-off-by: Andrew Fuerste-Henry --- Koha/REST/V1/Acquisitions/Orders.pm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Koha/REST/V1/Acquisitions/Orders.pm b/Koha/REST/V1/Acquisitions/Orders.pm index 3710d136dc..a1436f59e1 100644 --- a/Koha/REST/V1/Acquisitions/Orders.pm +++ b/Koha/REST/V1/Acquisitions/Orders.pm @@ -77,6 +77,14 @@ sub list { $c->stash('koha.embed', $fixed_embed); } + if ( exists $reserved_params->{_order_by} ) { + # _order_by passed, fix if required + for ( my $i = 0; $i < scalar @{$reserved_params->{_order_by}}; $i++ ) { + $reserved_params->{_order_by}->[$i] =~ s|biblio\.|biblio\.biblioitem\.|g + if $reserved_params->{_order_by}->[$i] =~ m/.*(isbn|ean|publisher).*/; + } + } + # Merge sorting into query attributes $c->dbic_merge_sorting( { -- 2.39.5