Bug 30933: (follow-up) Use cannot_be_transferred in shelves scripts

Test plan:
Verify if transfer shared list on OPAC still works as expected.
Same for intranet counterpart for public lists.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Marcel de Rooy 2022-06-22 12:14:37 +00:00 committed by Tomas Cohen Arazi
parent 773779e792
commit b70ae1d50f
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F
2 changed files with 22 additions and 24 deletions

View file

@ -262,13 +262,11 @@ if ( $op eq 'add_form' ) {
$shelfnumber = $query->param('shelfnumber');
$shelf = Koha::Virtualshelves->find($shelfnumber) if $shelfnumber;
my $new_owner = $query->param('new_owner'); # borrowernumber or undef
my $error_code = $shelf
? $shelf->cannot_be_transferred({ by => $loggedinuser, to => $new_owner, interface => 'opac' })
: 'does_not_exist';
$op = 'list';
if( !$shelf ) {
push @messages, { type => 'error', code => 'does_not_exist' };
} elsif( $shelf->public or !$shelf->is_shared or !$shelf->can_be_managed($loggedinuser) ) {
push @messages, { type => 'error', code => 'unauthorized_transfer' };
} elsif( !$new_owner ) {
if( !$new_owner && $error_code eq 'missing_to_parameter' ) { # show transfer form
my $patrons = [];
my $shares = $shelf->get_shares->search({ borrowernumber => { '!=' => undef } });
while( my $share = $shares->next ) {
@ -281,17 +279,16 @@ if ( $op eq 'add_form' ) {
} else {
push @messages, { type => 'error', code => 'no_email_found' };
}
} elsif( !Koha::Patrons->find($new_owner) ) {
push @messages, { type => 'error', code => 'new_owner_not_found' };
} elsif( !$shelf->get_shares->search({ borrowernumber => $new_owner })->count ) {
push @messages, { type => 'error', code => 'new_owner_has_no_share' };
} else {
# Remove from virtualshelfshares new_owner, add loggedinuser
} elsif( $error_code ) {
push @messages, { type => 'error', code => $error_code };
$op = 'list';
} else { # transfer; remove new_owner from virtualshelfshares, add loggedinuser
$shelf->_result->result_source->schema->txn_do( sub {
$shelf->get_shares->search({ borrowernumber => $new_owner })->delete;
Koha::Virtualshelfshare->new({ shelfnumber => $shelfnumber, borrowernumber => $loggedinuser, sharedate => dt_from_string })->store;
$shelf->owner($new_owner)->store;
});
$op = 'list';
}
}

View file

@ -60,6 +60,7 @@ my $referer = $query->param('referer') || $op;
my $public = $query->param('public') ? 1 : 0;
my ( $shelf, $shelfnumber, @messages, $allow_transfer );
# PART1: Perform a few actions
if ( $op eq 'add_form' ) {
# Only pass default
$shelf = { allow_change_from_owner => 1 };
@ -239,23 +240,22 @@ if ( $op eq 'add_form' ) {
$shelfnumber = $query->param('shelfnumber');
$shelf = Koha::Virtualshelves->find($shelfnumber) if $shelfnumber;
my $new_owner = $query->param('new_owner'); # is a borrowernumber
my $error_code = $shelf
? $shelf->cannot_be_transferred({ by => $loggedinuser, to => $new_owner, interface => 'intranet' })
: 'does_not_exist';
if( $new_owner ) {
if( !$new_owner && $error_code eq 'missing_to_parameter' ) {
# show form
} elsif( $error_code ) {
push @messages, { type => 'error', code => $error_code };
$op = 'list';
} else {
$shelf->owner($new_owner)->store;
$op = 'list';
# First check: shelf found, permission, patron found?
if( !$shelf ) {
push @messages, { type => 'alert', code => 'does_not_exist' };
} elsif( !haspermission(C4::Context->userenv->{id}, { lists => 'edit_public_lists' }) ) {
push @messages, { type => 'alert', code => 'unauthorized_transfer' };
} elsif( !Koha::Patrons->find($new_owner) ) {
push @messages, { type => 'alert', code => 'new_owner_not_found' };
$op = 'transfer'; # find again..
} else { # success
$shelf->owner($new_owner)->store;
}
}
}
# PART2: After a possible action, further prepare form
if ( $op eq 'view' ) {
$shelfnumber ||= $query->param('shelfnumber');
$shelf = Koha::Virtualshelves->find($shelfnumber);
@ -375,6 +375,7 @@ if ( $op eq 'view' ) {
}
} elsif( $op eq 'list' ) {
$allow_transfer = haspermission( C4::Context->userenv->{id}, { lists => 'edit_public_lists' } ) ? 1 : 0;
# this check only serves for button display
}
$template->param(