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

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

Return to bug 30933