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

(-)a/Koha/Patron.pm (-3 / +8 lines)
Lines 368-385 sub delete { Link Here
368
                $hold->cancel;
368
                $hold->cancel;
369
            }
369
            }
370
370
371
            # FIXME Could be $patron->get_lists
371
            # If ListOwnershipUponPatronDeletion = transfer, change ownership of all
372
            # If ListOwnershipUponPatronDeletion = transfer, change ownership of all
372
            # public and shared lists to the user who deleted them.
373
            # public and shared lists to the user who deleted them.
373
            if ( C4::Context->preference('ListOwnershipUponPatronDeletion') eq 'transfer' ) {
374
            if ( C4::Context->preference('ListOwnershipUponPatronDeletion') eq 'transfer' ) {
374
                my $userenv = C4::Context->userenv();
375
                my $userenv = C4::Context->userenv();
375
                my $usernumber = (ref($userenv) eq 'HASH') ? $userenv->{'number'} : 0;
376
                my $usernumber = (ref($userenv) eq 'HASH') ? $userenv->{'number'} : 0;
376
                my @publiclists = Koha::Virtualshelves->get_public_shelves;
377
                my @publiclists = Koha::Virtualshelves->get_public_shelves;
377
                my @sharedlists = Koha::Virtualshelves->search({ 'me.owner' => $self->borrowernumber, 'me.shelfnumber' => { -ident => 'virtualshelfshares.shelfnumber' }  }, { prefetch => 'virtualshelfshares' });
378
                my @sharedlists = Koha::Virtualshelves->get_shared_shelves({ borrowernumber => $self->borrowernumber });
378
                foreach my $plist ( @publiclists ) {
379
                foreach my $plist ( @publiclists ) {
379
                    $plist->set({ owner => $usernumber })->store;
380
                    if ( $plist->owner == $self->borrowernumber ) {
381
                        my $unique_name = $plist->shelfname . '_' . $self->borrowernumber;
382
                        $plist->set({ owner => $usernumber, shelfname => $unique_name })->store;
383
                    }
380
                }
384
                }
381
                foreach my $slist ( @sharedlists ) {
385
                foreach my $slist ( @sharedlists ) {
382
                    $slist->set({ owner => $usernumber })->store;
386
                    my $unique_name = $slist->shelfname . '_' . $self->borrowernumber;
387
                    $slist->set({ owner => $usernumber, shelfname => $unique_name })->store;
383
                    # if staff member had a share, remove it
388
                    # if staff member had a share, remove it
384
                    $slist->remove_share( $usernumber );
389
                    $slist->remove_share( $usernumber );
385
                }
390
                }
(-)a/Koha/Virtualshelves.pm (+13 lines)
Lines 160-165 sub get_shelves_containing_record { Link Here
160
    );
160
    );
161
}
161
}
162
162
163
sub get_shared_shelves {
164
    my ( $self, $params ) = @_;
165
    my $borrowernumber = $params->{borrowernumber} || 0;
166
167
    $self->search(
168
        {
169
            'me.owner' => $borrowernumber,
170
            'me.shelfnumber' => { -ident => 'virtualshelfshares.shelfnumber' }
171
        },
172
        { prefetch => 'virtualshelfshares' }
173
    );
174
}
175
163
sub _type {
176
sub _type {
164
    return 'Virtualshelve';
177
    return 'Virtualshelve';
165
}
178
}
(-)a/t/db_dependent/Koha/Patrons.t (-8 / +60 lines)
Lines 43-48 use Koha::Patron::Categories; Link Here
43
use Koha::Patron::Relationship;
43
use Koha::Patron::Relationship;
44
use Koha::Database;
44
use Koha::Database;
45
use Koha::DateUtils;
45
use Koha::DateUtils;
46
use Koha::Virtualshelf;
46
use Koha::Virtualshelves;
47
use Koha::Virtualshelves;
47
48
48
use t::lib::TestBuilder;
49
use t::lib::TestBuilder;
Lines 475-496 subtest "move_to_deleted" => sub { Link Here
475
};
476
};
476
477
477
subtest "delete" => sub {
478
subtest "delete" => sub {
478
    plan tests => 7;
479
    plan tests => 11;
479
    t::lib::Mocks::mock_preference( 'BorrowersLog', 1 );
480
    t::lib::Mocks::mock_preference( 'BorrowersLog', 1 );
481
    t::lib::Mocks::mock_preference( 'ListOwnershipUponPatronDeletion', 'transfer' );
482
    Koha::Virtualshelves->search({})->delete;
483
    my $userenv = C4::Context->userenv();
480
    my $patron           = $builder->build( { source => 'Borrower' } );
484
    my $patron           = $builder->build( { source => 'Borrower' } );
485
    my $patron_for_sharing = (ref($userenv) eq 'HASH' ) ? $userenv->{'number'} : 0;
481
    my $retrieved_patron = Koha::Patrons->find( $patron->{borrowernumber} );
486
    my $retrieved_patron = Koha::Patrons->find( $patron->{borrowernumber} );
482
    my $hold             = $builder->build(
487
    my $hold             = $builder->build(
483
        {   source => 'Reserve',
488
        {   source => 'Reserve',
484
            value  => { borrowernumber => $patron->{borrowernumber} }
489
            value => { borrowernumber => $patron->{borrowernumber} }
485
        }
486
    );
487
    my $list = $builder->build(
488
        {   source => 'Virtualshelve',
489
            value  => { owner => $patron->{borrowernumber} }
490
        }
490
        }
491
    );
491
    );
492
    my $modification = $builder->build_object({ class => 'Koha::Patron::Modifications', value => { borrowernumber => $patron->{borrowernumber} } });
492
    my $modification = $builder->build_object({ class => 'Koha::Patron::Modifications', value => { borrowernumber => $patron->{borrowernumber} } });
493
    my $private_list = Koha::Virtualshelf->new({
494
            shelfname => "private",
495
            owner => $patron->{borrowernumber},
496
            category => 1
497
        }
498
    )->store;
499
    my $public_list = Koha::Virtualshelf->new({
500
            shelfname => "public",
501
            owner => $patron->{borrowernumber},
502
            category => 2
503
        }
504
    )->store;
505
    my $list_to_share = Koha::Virtualshelf->new({
506
            shelfname => "shared",
507
            owner => $patron->{borrowernumber},
508
            category => 1
509
        }
510
    )->store;
493
511
512
    my $shared_shelf = eval { $list_to_share->share("valid key")->accept("valid key", $patron_for_sharing) };
494
    my $deleted = $retrieved_patron->delete;
513
    my $deleted = $retrieved_patron->delete;
495
    is( ref($deleted), 'Koha::Patron', 'Koha::Patron->delete should return the deleted patron object if the patron has been correctly deleted' );
514
    is( ref($deleted), 'Koha::Patron', 'Koha::Patron->delete should return the deleted patron object if the patron has been correctly deleted' );
496
515
Lines 500-511 subtest "delete" => sub { Link Here
500
519
501
    is( Koha::Holds->search( { borrowernumber => $patron->{borrowernumber} } )->count, 0, q|Koha::Patron->delete should have cancelled patron's holds 2| );
520
    is( Koha::Holds->search( { borrowernumber => $patron->{borrowernumber} } )->count, 0, q|Koha::Patron->delete should have cancelled patron's holds 2| );
502
521
503
    is( Koha::Virtualshelves->search( { owner => $patron->{borrowernumber} } )->count, 0, q|Koha::Patron->delete should have deleted patron's lists| );
522
    my $transferred_lists = Koha::Virtualshelves->search({ owner => $patron_for_sharing })->count;
523
    is( $transferred_lists, 2, 'Public and shared lists should stay in database under a different owner with a unique name, while private lists delete, with ListOwnershipPatronDeletion set to Transfer');
524
    is( Koha::Virtualshelfshares->search({ borrowernumber => $patron_for_sharing })->count, 0, "New owner of list should have shares removed" );
525
    is( Koha::Virtualshelves->search({ owner => $patron->{borrowernumber} })->count, 0, q|Koha::Patron->delete should have deleted patron's lists/removed their ownership| );
504
526
505
    is( Koha::Patron::Modifications->search( { borrowernumber => $patron->{borrowernumber} } )->count, 0, q|Koha::Patron->delete should have deleted patron's modifications| );
527
    is( Koha::Patron::Modifications->search( { borrowernumber => $patron->{borrowernumber} } )->count, 0, q|Koha::Patron->delete should have deleted patron's modifications| );
506
528
507
    my $number_of_logs = $schema->resultset('ActionLog')->search( { module => 'MEMBERS', action => 'DELETE', object => $retrieved_patron->borrowernumber } )->count;
529
    my $number_of_logs = $schema->resultset('ActionLog')->search( { module => 'MEMBERS', action => 'DELETE', object => $retrieved_patron->borrowernumber } )->count;
508
    is( $number_of_logs, 1, 'With BorrowerLogs, Koha::Patron->delete should have logged' );
530
    is( $number_of_logs, 1, 'With BorrowerLogs, Koha::Patron->delete should have logged' );
531
532
    t::lib::Mocks::mock_preference( 'ListOwnershipUponPatronDeletion', 'delete' );
533
    Koha::Virtualshelves->search({})->delete;
534
    my $patron2           = $builder->build( { source => 'Borrower' } );
535
    my $retrieved_patron2 = Koha::Patrons->find( $patron2->{borrowernumber} );
536
    my $private_list2 = Koha::Virtualshelf->new({
537
            shelfname => "private",
538
            owner => $patron2->{borrowernumber},
539
            category => 1
540
        }
541
    )->store;
542
    my $public_list2 = Koha::Virtualshelf->new({
543
            shelfname => "public",
544
            owner => $patron2->{borrowernumber},
545
            category => 2
546
        }
547
    )->store;
548
    my $list_to_share2 = Koha::Virtualshelf->new({
549
            shelfname => "shared",
550
            owner => $patron2->{borrowernumber},
551
            category => 1
552
        }
553
    )->store;
554
555
    my $shared_shelf2 = eval { $list_to_share2->share("valid key") };
556
    my $deleted2 = $retrieved_patron2->delete;
557
558
    is( Koha::Virtualshelves->search( { owner => $patron2->{borrowernumber} } )->count, 0, q|Koha::Patron->delete should have deleted patron's lists| );
559
    $transferred_lists = Koha::Virtualshelves->search({})->count;
560
    is( $transferred_lists, 0, 'All lists should be deleted with ListOwnershipUponPatronDeletion set to Delete');
509
};
561
};
510
562
511
subtest 'Koha::Patrons->delete' => sub {
563
subtest 'Koha::Patrons->delete' => sub {
(-)a/t/db_dependent/Virtualshelves.t (-4 / +13 lines)
Lines 353-359 subtest 'Shelf permissions' => sub { Link Here
353
};
353
};
354
354
355
subtest 'Get shelves' => sub {
355
subtest 'Get shelves' => sub {
356
    plan tests => 4;
356
    plan tests => 5;
357
    my $patron1 = $builder->build({
357
    my $patron1 = $builder->build({
358
        source => 'Borrower',
358
        source => 'Borrower',
359
    });
359
    });
Lines 391-409 subtest 'Get shelves' => sub { Link Here
391
            category => 2,
391
            category => 2,
392
        }
392
        }
393
    )->store;
393
    )->store;
394
    my $shelf_to_share = Koha::Virtualshelf->new({
395
            shelfname => "shared shelf",
396
            owner => $patron1->{borrowernumber},
397
            category => 1,
398
        }
399
    )->store;
394
400
395
    my $private_shelves = Koha::Virtualshelves->get_private_shelves;
401
    my $private_shelves = Koha::Virtualshelves->get_private_shelves;
396
    is( $private_shelves->count, 0, 'Without borrowernumber given, get_private_shelves should not return any shelf' );
402
    is( $private_shelves->count, 0, 'Without borrowernumber given, get_private_shelves should not return any shelf' );
397
    $private_shelves = Koha::Virtualshelves->get_private_shelves({ borrowernumber => $patron1->{borrowernumber} });
403
    $private_shelves = Koha::Virtualshelves->get_private_shelves({ borrowernumber => $patron1->{borrowernumber} });
398
    is( $private_shelves->count, 2, 'get_private_shelves should return all shelves for a given patron' );
404
    is( $private_shelves->count, 3, 'get_private_shelves should return all shelves for a given patron' );
399
405
400
    $private_shelf2_1->share('a key')->accept('a key', $patron1->{borrowernumber});
406
    $private_shelf2_1->share('a key')->accept('a key', $patron1->{borrowernumber});
401
    $private_shelves = Koha::Virtualshelves->get_private_shelves({ borrowernumber => $patron1->{borrowernumber} });
407
    $private_shelves = Koha::Virtualshelves->get_private_shelves({ borrowernumber => $patron1->{borrowernumber} });
402
    is( $private_shelves->count, 3, 'get_private_shelves should return all shelves for a given patron, even the shared ones' );
408
    is( $private_shelves->count, 4, 'get_private_shelves should return all shelves for a given patron, even the shared ones' );
403
409
404
    my $public_shelves = Koha::Virtualshelves->get_public_shelves;
410
    my $public_shelves = Koha::Virtualshelves->get_public_shelves;
405
    is( $public_shelves->count, 2, 'get_public_shelves should return all public shelves, no matter who is the owner' );
411
    is( $public_shelves->count, 2, 'get_public_shelves should return all public shelves, no matter who is the owner' );
406
412
413
    my $shared_shelf = eval { $shelf_to_share->share("valid key") };
414
    my $shared_shelves = Koha::Virtualshelves->get_shared_shelves({ borrowernumber => $patron1->{borrowernumber} });
415
    is( $shared_shelves->count, 1, 'get_shared_shelves should return shared shelves' );
416
407
    teardown();
417
    teardown();
408
};
418
};
409
419
410
- 

Return to bug 11889