Bug 25498: Add a transfer form for public lists

Test plan:
[1] Valid transfer:
    Log in with staff patron C having edit_public_lists.
    Pick a public list. Choose Transfer. Select a patron.
    Submit and check if transfer was successful.
[2] Permission problem:
    Pick a staff user D. Temporary enable edit_public_lists.
    Add another private tab. Login with D.
    Pick a public list. Transfer. Choose another patron. Wait.
    Switch tab: remove added permission from D.
    Switch tab again: Submit transfer form. Error? Close tab.
[3] Bonus test - Shelf disappeared:
    Pick a public list. Transfer. Choose another patron. Wait.
    Open another tab. Delete the selected public list.
    Close tab. Submit the transfer. Not exist error?
[4] Bonus test - Patron not found:
    Pick a public list. Transfer. Choose another patron. Wait.
    Open another tab. Delete selected patron.
    Close tab. Submit transfer. Patron not found error?

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Owen Leonard <oleonard@myacpl.org>
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-10 08:26:16 +00:00 committed by Tomas Cohen Arazi
parent ad83180fb0
commit 92e7bcf751
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F
2 changed files with 90 additions and 1 deletions

View file

@ -114,6 +114,10 @@
</a>
</li>
[% END %]
[% IF op == 'transfer' %]
<li><a href="#" aria-current="page">Transfer list <em>[% shelf.shelfname | html %]</em></a></li>
[% END %]
</ol>
</nav>
@ -122,7 +126,7 @@
<div class="col-sm-10 col-sm-push-1">
<main>
[% INCLUDE 'virtualshelves-toolbar.inc' %]
[% IF op != 'transfer' %][% INCLUDE 'virtualshelves-toolbar.inc' %][% END %]
[% FOR m IN messages %]
<div class="dialog [% m.type | html %]">
@ -169,20 +173,57 @@
<span>You do not have permission to delete this list.</span>
[% CASE 'unauthorized_on_add_biblio' %]
<span>You do not have permission to add a record to this list.</span>
[% CASE 'unauthorized_transfer' %]
<span>You do not have permission to transfer ownership of this list.</span>
[% CASE 'new_owner_not_found' %]
<span>The new owner could not be found anymore.</span>
[% CASE 'no_biblio_removed' %]
<span>No record was removed.</span>
[% CASE 'Koha::Exceptions::Virtualshelf::DuplicateObject' %]
<span>An error occurred when creating this list. The name [% shelfname | html %] already exists.</span>
[% CASE 'Koha::Exceptions::Virtualshelf::UseDbAdminAccount' %]
<span>List could not be created. (Do not use the database administrator account.)</span>
[% CASE 'DBIx::Class::Exception' %]
[% m.msg | html %]
[% CASE %]
[% m.code | html %] [% m.msg | html %]
[% END %]
</div>
[% END %]
[% IF op == 'transfer' %]
<h1>Transfer ownership of public list [% shelf.shelfname | html %]</h1>
<form action="/cgi-bin/koha/virtualshelves/shelves.pl" id="transferform" method="post">
<fieldset>
<input type="hidden" name="op" value="transfer" />
<input type="hidden" name="public" value="1" />
<input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" />
<div>
<label for="find_patron">Search for new owner: </label>
<input autocomplete="off" id="find_patron" type="text" style="width:150px" class="noEnterSubmit" />
</div>
<br/>
<div>
<label for="find_patron">New owner: </label>
<span id="new_owner_name"></span>
<input type="hidden" id="new_owner" name="new_owner" value="" />
</div>
<br/>
<fieldset class="action">
<input type="submit" value="Transfer" class="submit" />
<a href="/cgi-bin/koha/virtualshelves/shelves.pl?op=list&amp;public=1" class="cancel">Cancel</a>
</fieldset>
</fieldset>
</form>
[% END %]
[% IF op == 'view' %]
<h1>Contents of <em>[% shelf.shelfname | html %]</em></h1>
[% IF itemsloop %]
@ -848,6 +889,35 @@
});
[% END %]
[% IF op == 'transfer' %]
$(document).ready(function() {
$('#find_patron').autocomplete({
source: "/cgi-bin/koha/circ/ysearch.pl",
minLength: 3,
select: function( event, ui ) {
$('#new_owner_name').html( ui.item.firstname + " " + ui.item.surname );
$('#new_owner').val( ui.item.borrowernumber );
$('#find_patron').val('').focus();
return false;
},
}).data('ui-autocomplete')._renderItem = function( ul, item ) {
return $('<li></li>')
.data( 'ui-autocomplete-item', item )
.append( '<a>' + item.surname + ', ' + item.firstname + '</a>' )
.appendTo(ul);
};
$('#transferform').submit(function() {
if( $('#new_owner').val() == '' ) {
alert( _("Please select a new owner first") );
return false;
}
return true;
});
});
[% END %]
</script>
[% END %]

View file

@ -235,6 +235,25 @@ if ( $op eq 'add_form' ) {
push @messages, { type => 'alert', code => 'does_not_exist' };
}
$op = $referer;
} elsif ( $op eq 'transfer' ) {
$shelfnumber = $query->param('shelfnumber');
$shelf = Koha::Virtualshelves->find($shelfnumber) if $shelfnumber;
my $new_owner = $query->param('new_owner'); # is a borrowernumber
if( $new_owner ) {
$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;
}
}
}
if ( $op eq 'view' ) {