View | Details | Raw Unified | Return to bug 30933
Collapse All | Expand All

(-)a/opac/opac-shelves.pl (-12 / +9 lines)
Lines 262-274 if ( $op eq 'add_form' ) { Link Here
262
    $shelfnumber = $query->param('shelfnumber');
262
    $shelfnumber = $query->param('shelfnumber');
263
    $shelf = Koha::Virtualshelves->find($shelfnumber) if $shelfnumber;
263
    $shelf = Koha::Virtualshelves->find($shelfnumber) if $shelfnumber;
264
    my $new_owner = $query->param('new_owner'); # borrowernumber or undef
264
    my $new_owner = $query->param('new_owner'); # borrowernumber or undef
265
    my $error_code = $shelf
266
        ? $shelf->cannot_be_transferred({ by => $loggedinuser, to => $new_owner, interface => 'opac' })
267
        : 'does_not_exist';
265
268
266
    $op = 'list';
269
    if( !$new_owner && $error_code eq 'missing_to_parameter' ) { # show transfer form
267
    if( !$shelf ) {
268
        push @messages, { type => 'error', code => 'does_not_exist' };
269
    } elsif( $shelf->public or !$shelf->is_shared or !$shelf->can_be_managed($loggedinuser) ) {
270
        push @messages, { type => 'error', code => 'unauthorized_transfer' };
271
    } elsif( !$new_owner ) {
272
        my $patrons = [];
270
        my $patrons = [];
273
        my $shares = $shelf->get_shares->search({ borrowernumber => { '!=' => undef } });
271
        my $shares = $shelf->get_shares->search({ borrowernumber => { '!=' => undef } });
274
        while( my $share = $shares->next ) {
272
        while( my $share = $shares->next ) {
Lines 281-297 if ( $op eq 'add_form' ) { Link Here
281
        } else {
279
        } else {
282
            push @messages, { type => 'error', code => 'no_email_found' };
280
            push @messages, { type => 'error', code => 'no_email_found' };
283
        }
281
        }
284
    } elsif( !Koha::Patrons->find($new_owner) ) {
282
    } elsif( $error_code ) {
285
        push @messages, { type => 'error', code => 'new_owner_not_found' };
283
        push @messages, { type => 'error', code => $error_code };
286
    } elsif( !$shelf->get_shares->search({ borrowernumber => $new_owner })->count ) {
284
        $op = 'list';
287
        push @messages, { type => 'error', code => 'new_owner_has_no_share' };
285
    } else { # transfer; remove new_owner from virtualshelfshares, add loggedinuser
288
    } else {
289
        # Remove from virtualshelfshares new_owner, add loggedinuser
290
        $shelf->_result->result_source->schema->txn_do( sub {
286
        $shelf->_result->result_source->schema->txn_do( sub {
291
            $shelf->get_shares->search({ borrowernumber => $new_owner })->delete;
287
            $shelf->get_shares->search({ borrowernumber => $new_owner })->delete;
292
            Koha::Virtualshelfshare->new({ shelfnumber => $shelfnumber, borrowernumber => $loggedinuser, sharedate => dt_from_string })->store;
288
            Koha::Virtualshelfshare->new({ shelfnumber => $shelfnumber, borrowernumber => $loggedinuser, sharedate => dt_from_string })->store;
293
            $shelf->owner($new_owner)->store;
289
            $shelf->owner($new_owner)->store;
294
        });
290
        });
291
        $op = 'list';
295
    }
292
    }
296
}
293
}
297
294
(-)a/virtualshelves/shelves.pl (-13 / +13 lines)
Lines 60-65 my $referer = $query->param('referer') || $op; Link Here
60
my $public   = $query->param('public') ? 1 : 0;
60
my $public   = $query->param('public') ? 1 : 0;
61
my ( $shelf, $shelfnumber, @messages, $allow_transfer );
61
my ( $shelf, $shelfnumber, @messages, $allow_transfer );
62
62
63
# PART1: Perform a few actions
63
if ( $op eq 'add_form' ) {
64
if ( $op eq 'add_form' ) {
64
    # Only pass default
65
    # Only pass default
65
    $shelf = { allow_change_from_owner => 1 };
66
    $shelf = { allow_change_from_owner => 1 };
Lines 239-261 if ( $op eq 'add_form' ) { Link Here
239
    $shelfnumber = $query->param('shelfnumber');
240
    $shelfnumber = $query->param('shelfnumber');
240
    $shelf = Koha::Virtualshelves->find($shelfnumber) if $shelfnumber;
241
    $shelf = Koha::Virtualshelves->find($shelfnumber) if $shelfnumber;
241
    my $new_owner = $query->param('new_owner'); # is a borrowernumber
242
    my $new_owner = $query->param('new_owner'); # is a borrowernumber
243
    my $error_code = $shelf
244
        ? $shelf->cannot_be_transferred({ by => $loggedinuser, to => $new_owner, interface => 'intranet' })
245
        : 'does_not_exist';
242
246
243
    if( $new_owner ) {
247
    if( !$new_owner && $error_code eq 'missing_to_parameter' ) {
248
        # show form
249
    } elsif( $error_code ) {
250
        push @messages, { type => 'error', code => $error_code };
251
        $op = 'list';
252
    } else {
253
        $shelf->owner($new_owner)->store;
244
        $op = 'list';
254
        $op = 'list';
245
        # First check: shelf found, permission, patron found?
246
        if( !$shelf ) {
247
            push @messages, { type => 'alert', code => 'does_not_exist' };
248
        } elsif( !haspermission(C4::Context->userenv->{id}, { lists => 'edit_public_lists' }) ) {
249
            push @messages, { type => 'alert', code => 'unauthorized_transfer' };
250
        } elsif( !Koha::Patrons->find($new_owner) ) {
251
            push @messages, { type => 'alert', code => 'new_owner_not_found' };
252
            $op = 'transfer'; # find again..
253
        } else { # success
254
            $shelf->owner($new_owner)->store;
255
        }
256
    }
255
    }
257
}
256
}
258
257
258
# PART2: After a possible action, further prepare form
259
if ( $op eq 'view' ) {
259
if ( $op eq 'view' ) {
260
    $shelfnumber ||= $query->param('shelfnumber');
260
    $shelfnumber ||= $query->param('shelfnumber');
261
    $shelf = Koha::Virtualshelves->find($shelfnumber);
261
    $shelf = Koha::Virtualshelves->find($shelfnumber);
Lines 375-380 if ( $op eq 'view' ) { Link Here
375
    }
375
    }
376
} elsif( $op eq 'list' ) {
376
} elsif( $op eq 'list' ) {
377
    $allow_transfer = haspermission( C4::Context->userenv->{id}, { lists => 'edit_public_lists' } ) ? 1 : 0;
377
    $allow_transfer = haspermission( C4::Context->userenv->{id}, { lists => 'edit_public_lists' } ) ? 1 : 0;
378
        # this check only serves for button display
378
}
379
}
379
380
380
$template->param(
381
$template->param(
381
- 

Return to bug 30933