Bug 41946: Allow superlibrarians to set protected flag on patron creation

Since bug 36085, the protected flag in a patron account was removed from
the patron creation form, regardless of if the user is a superlibrarian.

- Hoist $logged_in_user lookup before the edit_form block
- Move superlibrarian capability checks after the block so they apply
  to all operations including patron creation

To test:
1. Sign in as a superlibrarian
2. Go to Patrons > New patron > choose any category
3. Without this patch: the "Protected" yes/no field is missing
   from the "Library management" section
4. Apply this patch
5. Repeat step 2
   - The "Protected" yes/no field is now visible
6. Create the patron with Protected set to "Yes"
7. Confirm the patron is saved as protected
8. Sign in as a non-superlibrarian with edit_borrowers permission
9. Repeat step 2
   - The "Protected" field should still be hidden
10. Edit an existing patron as superlibrarian
    - The "Protected" field is visible and functional
11. Edit an existing patron as non-superlibrarian
    - The "Protected" field is hidden
12. Sign off

Signed-off-by: Caroline Cyr La Rose <caroline.cyr-la-rose@inlibro.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
This commit is contained in:
Paul Derscheid 2026-02-26 18:09:54 +01:00 committed by Pedro Amorim
parent 38cbe6b195
commit fc5ce2dd7e
No known key found for this signature in database
GPG Key ID: 06B75BA7F3894D55
1 changed files with 6 additions and 6 deletions

View File

@ -165,8 +165,8 @@ foreach (@field_check) {
$template->param( "quickadd" => 1 ) if ($quickadd);
$template->param( "duplicate" => 1 ) if ( $op eq 'duplicate' );
$template->param( "checked" => 1 ) if ( defined($nodouble) && $nodouble eq 1 );
my $logged_in_user = Koha::Patrons->find($loggedinuser);
if ( $op eq 'edit_form' or $op eq 'cud-save' or $op eq 'duplicate' ) {
my $logged_in_user = Koha::Patrons->find($loggedinuser);
output_and_exit_if_error(
$input, $cookie, $template,
{ module => 'members', logged_in_user => $logged_in_user, current_patron => $patron }
@ -176,12 +176,12 @@ if ( $op eq 'edit_form' or $op eq 'cud-save' or $op eq 'duplicate' ) {
if ( $patron->is_superlibrarian && !$logged_in_user->is_superlibrarian ) {
$NoUpdateEmail = 1;
}
if ( $logged_in_user->is_superlibrarian ) {
$borrower_data = $patron->unblessed;
}
if ( $logged_in_user->is_superlibrarian ) {
$CanUpdatePasswordExpiration = 1;
$CanUpdateProtectPatron = 1;
}
$borrower_data = $patron->unblessed;
}
my $categorycode = $input->param('categorycode') || $borrower_data->{'categorycode'};