From b89287d213f9ac74d6c2bdae34a66c5883fed415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tadeusz=20=E2=80=9Etadzik=E2=80=9D=20So=C5=9Bnierz?= Date: Fri, 11 Apr 2025 11:17:47 +0200 Subject: [PATCH] Bug 39600: Cleanup the changes -- tidy, document, add a missing TT filter Sponsored-by: Wiko (https://www.wiko-berlin.de/) --- Koha/ILL/Request.pm | 8 ++++--- Koha/ILL/Request/Attribute.pm | 6 +++++ Koha/REST/V1/ILL/Requests.pm | 22 +++++++++++++------ .../bootstrap/en/modules/opac-illrequests.tt | 5 ++--- opac/opac-illrequests.pl | 1 + t/db_dependent/api/v1/ill_requests.t | 21 +++++++++++------- 6 files changed, 42 insertions(+), 21 deletions(-) diff --git a/Koha/ILL/Request.pm b/Koha/ILL/Request.pm index 804f597e88..39cf029908 100644 --- a/Koha/ILL/Request.pm +++ b/Koha/ILL/Request.pm @@ -2097,9 +2097,11 @@ This method returns the list of publicly readable database fields for both API a =cut sub public_read_list { - return [qw( - illrequest_id backend status extended_attributes placed updated - )]; + return [ + qw( + illrequest_id backend status extended_attributes placed updated + ) + ]; } =head2 Internal methods diff --git a/Koha/ILL/Request/Attribute.pm b/Koha/ILL/Request/Attribute.pm index 3f1bc4e8c8..b36ae2f1c4 100644 --- a/Koha/ILL/Request/Attribute.pm +++ b/Koha/ILL/Request/Attribute.pm @@ -58,6 +58,12 @@ sub request { return Koha::ILL::Request->_new_from_dbic( $self->_result->illrequest ); } +=head3 public_read_list + +This method returns the list of publicly readable database fields for both API and UI output purposes + +=cut + sub public_read_list { return [qw(backend illrequest_id readonly type value)]; } diff --git a/Koha/REST/V1/ILL/Requests.pm b/Koha/REST/V1/ILL/Requests.pm index 55c4e59d6f..bb8eecb15e 100644 --- a/Koha/REST/V1/ILL/Requests.pm +++ b/Koha/REST/V1/ILL/Requests.pm @@ -58,22 +58,30 @@ sub list { }; } +=head3 patron_list + +Controller function that handles listing Koha::ILL::Request objects for a given patron. + +The patron must match the requesting user unless the requesting user is a superlibrarian. + +This is a public route, so some request details are omitted. + +=cut + sub patron_list { - my $c = shift->openapi->valid_input or return; + my $c = shift->openapi->valid_input or return; my $user = $c->stash('koha.user'); - $c->stash(is_public => 1); + $c->stash( is_public => 1 ); - if ($user->borrowernumber != $c->param('patron_id') and !$user->is_superlibrarian) { + if ( $user->borrowernumber != $c->param('patron_id') and !$user->is_superlibrarian ) { return $c->render( - status => 403, + status => 403, openapi => { error => "Cannot lookup ILL requests for other users" } ); } return try { - my $reqs = $c->objects->search(Koha::ILL::Requests->search( - { borrowernumber => $c->param('patron_id') } - )); + my $reqs = $c->objects->search( Koha::ILL::Requests->search( { borrowernumber => $c->param('patron_id') } ) ); return $c->render( status => 200, diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-illrequests.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-illrequests.tt index 60e58b10d0..96ce9bc5cb 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-illrequests.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-illrequests.tt @@ -145,8 +145,7 @@ - - + [% ELSIF op == 'view' %]

View interlibrary loan request

@@ -410,7 +409,7 @@ "serverSide": true, "ajax": { "cache": true, - "url": '/api/v1/patrons/[% logged_in_user.borrowernumber %]/ill/requests', + "url": '/api/v1/patrons/[% logged_in_user.borrowernumber | html %]/ill/requests', 'beforeSend': function (xhr, settings) { this._xhr = xhr; xhr.setRequestHeader('x-koha-embed', '+strings,extended_attributes'); diff --git a/opac/opac-illrequests.pl b/opac/opac-illrequests.pl index ebd79aa82e..89f38b56da 100755 --- a/opac/opac-illrequests.pl +++ b/opac/opac-illrequests.pl @@ -88,6 +88,7 @@ if ( $op eq 'list' ) { $template->param( request => $request ); } elsif ( $op eq 'cud-update' ) { $request->notesopac( $params->{notesopac} )->store; + # Send a notice to staff alerting them of the update $request->send_staff_notice('ILL_REQUEST_MODIFIED'); print $query->redirect( diff --git a/t/db_dependent/api/v1/ill_requests.t b/t/db_dependent/api/v1/ill_requests.t index 830a2def2b..2015d8b045 100755 --- a/t/db_dependent/api/v1/ill_requests.t +++ b/t/db_dependent/api/v1/ill_requests.t @@ -310,10 +310,12 @@ subtest 'patron_list() tests' => sub { my $observer_number = $observer->borrowernumber; # No requests yet, expect empty for both - $t->get_ok("//$requester_userid:$password@/api/v1/patrons/$requester_number/ill/requests")->status_is(200)->json_is( [] ); - $t->get_ok("//$observer_userid:$password@/api/v1/patrons/$observer_number/ill/requests")->status_is(200)->json_is( [] ); + $t->get_ok("//$requester_userid:$password@/api/v1/patrons/$requester_number/ill/requests")->status_is(200) + ->json_is( [] ); + $t->get_ok("//$observer_userid:$password@/api/v1/patrons/$observer_number/ill/requests")->status_is(200) + ->json_is( [] ); - for (0..25) { + for ( 0 .. 25 ) { $builder->build_object( { class => 'Koha::ILL::Requests', @@ -329,17 +331,20 @@ subtest 'patron_list() tests' => sub { } # Other user should not see anything - $t->get_ok("//$observer_userid:$password@/api/v1/patrons/$observer_number/ill/requests")->status_is(200)->json_is( [] ); + $t->get_ok("//$observer_userid:$password@/api/v1/patrons/$observer_number/ill/requests")->status_is(200) + ->json_is( [] ); # Staff notes hidden in the public API - $t->get_ok("//$requester_userid:$password@/api/v1/patrons/$requester_number/ill/requests")->status_is(200)->json_is( + $t->get_ok("//$requester_userid:$password@/api/v1/patrons/$requester_number/ill/requests")->status_is(200) + ->json_is( '/0/staff_notes' => undef, - ); + ); # Not all requests get returned, pagination works - $t->get_ok("//$requester_userid:$password@/api/v1/patrons/$requester_number/ill/requests")->status_is(200)->json_is( + $t->get_ok("//$requester_userid:$password@/api/v1/patrons/$requester_number/ill/requests")->status_is(200) + ->json_is( '/21' => undef, - ); + ); $schema->storage->txn_rollback; }; -- 2.47.2