From eff4537ed251d8d08359ff64d6bdff1973e22dc4 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 7 Apr 2017 17:53:35 -0300 Subject: [PATCH] Bug 18403: Article requests Same as previously but for article requests. Test plan: Test article requests and make sure you do not need the requests for patrons that are attached to a group that is not part of your library's group --- Koha/ArticleRequests.pm | 39 +++++++++++++++++++++++++++++++-------- t/db_dependent/ArticleRequests.t | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 9 deletions(-) diff --git a/Koha/ArticleRequests.pm b/Koha/ArticleRequests.pm index bc47789..27be468 100644 --- a/Koha/ArticleRequests.pm +++ b/Koha/ArticleRequests.pm @@ -38,6 +38,29 @@ Koha::ArticleRequests - Koha ArticleRequests Object class =cut +=head3 search_limited + +my $article_requests = Koha::ArticleRequests->search_limited( $params, $attributes ); + +Search for article requests according to logged in patron restrictions + +=cut + +sub search_limited { + my ( $self, $params, $attributes ) = @_; + + my $userenv = C4::Context->userenv; + my @restricted_branchcodes; + if ( $userenv ) { + my $logged_in_user = Koha::Patrons->find( $userenv->{number} ); + @restricted_branchcodes = $logged_in_user->libraries_where_can_see_patrons; + } + # TODO This 'borrowernumber' relation name is confusing and needs to be renamed + $params->{'borrowernumber.branchcode'} = { -in => \@restricted_branchcodes } if @restricted_branchcodes; + $attributes->{join} = 'borrowernumber'; + return $self->search( $params, $attributes ); +} + =head3 pending =cut @@ -45,8 +68,8 @@ Koha::ArticleRequests - Koha ArticleRequests Object class sub pending { my ( $self, $branchcode ) = @_; my $params = { status => Koha::ArticleRequest::Status::Pending }; - $params->{branchcode} = $branchcode if $branchcode; - return Koha::ArticleRequests->search( $params ); + $params->{'me.branchcode'} = $branchcode if $branchcode; + return Koha::ArticleRequests->search_limited( $params ); } =head3 processing @@ -56,8 +79,8 @@ sub pending { sub processing { my ( $self, $branchcode ) = @_; my $params = { status => Koha::ArticleRequest::Status::Processing }; - $params->{branchcode} = $branchcode if $branchcode; - return Koha::ArticleRequests->search( $params ); + $params->{'me.branchcode'} = $branchcode if $branchcode; + return Koha::ArticleRequests->search_limited( $params ); } =head3 completed @@ -67,8 +90,8 @@ sub processing { sub completed { my ( $self, $branchcode ) = @_; my $params = { status => Koha::ArticleRequest::Status::Completed }; - $params->{branchcode} = $branchcode if $branchcode; - return Koha::ArticleRequests->search( $params ); + $params->{'me.branchcode'} = $branchcode if $branchcode; + return Koha::ArticleRequests->search_limited( $params ); } =head3 canceled @@ -78,8 +101,8 @@ sub completed { sub canceled { my ( $self, $branchcode ) = @_; my $params = { status => Koha::ArticleRequest::Status::Canceled }; - $params->{branchcode} = $branchcode if $branchcode; - return Koha::ArticleRequests->search( $params ); + $params->{'me.branchcode'} = $branchcode if $branchcode; + return Koha::ArticleRequests->search_limited( $params ); } =head3 _type diff --git a/t/db_dependent/ArticleRequests.t b/t/db_dependent/ArticleRequests.t index af9e1c8..951d2b6 100755 --- a/t/db_dependent/ArticleRequests.t +++ b/t/db_dependent/ArticleRequests.t @@ -19,13 +19,15 @@ use Modern::Perl; use POSIX qw(strftime); -use Test::More tests => 49; +use Test::More tests => 50; use Koha::Database; use Koha::Biblio; use Koha::Patron; use Koha::Library; +use t::lib::TestBuilder; + BEGIN { use_ok('Koha::ArticleRequest'); use_ok('Koha::ArticleRequests'); @@ -35,6 +37,7 @@ BEGIN { my $schema = Koha::Database->new()->schema(); $schema->storage->txn_begin(); +my $builder = t::lib::TestBuilder->new; my $dbh = C4::Context->dbh; $dbh->{RaiseError} = 1; @@ -65,9 +68,14 @@ my $patron = Koha::Patron->new( { categorycode => $category->id, branchcode => $branch->id, + flags => 1,# superlibrarian } )->store(); ok( $patron->id, 'Koha::Patron created' ); +my $patron_2 = $builder->build({ source => 'Borrower' }); +$patron_2 = Koha::Patrons->find( $patron_2->{borrowernumber} ); + +my $nb_article_requests = Koha::ArticleRequests->count; my $article_request = Koha::ArticleRequest->new( { @@ -173,4 +181,27 @@ ok( !$item->can_article_request($patron), 'Item is not requestable with rule t is( $item->article_request_type($patron), 'no', 'Item article request type is no' ); $rule->delete(); +subtest 'search_limited' => sub { + plan tests => 2; + C4::Context->_new_userenv('xxx'); + my $group_1 = Koha::Library::Group->new( { title => 'TEST Group 1' } )->store; + my $group_2 = Koha::Library::Group->new( { title => 'TEST Group 2' } )->store; + Koha::Library::Group->new({ parent_id => $group_1->id, branchcode => $patron->branchcode })->store(); + Koha::Library::Group->new({ parent_id => $group_2->id, branchcode => $patron_2->branchcode })->store(); + set_logged_in_user( $patron ); # Is superlibrarian + is( Koha::ArticleRequests->count, 3, 'Koha::ArticleRequests should return all article requests' ); + is( Koha::ArticleRequests->search_limited->count, 2, 'Koha::ArticleRequests->search_limited should return reviews depending on patron permissions' ); +}; + $schema->storage->txn_rollback(); + +sub set_logged_in_user { + my ($patron) = @_; + C4::Context->set_userenv( + $patron->borrowernumber, $patron->userid, + $patron->cardnumber, 'firstname', + 'surname', $patron->library->branchcode, + 'Midway Public Library', $patron->flags, + '', '' + ); +} -- 2.9.3