}
# Handle lists (virtualshelves)
- my $new_owner = _new_owner();
- my $lists = $self->virtualshelves;
- while( my $list = $lists->next ) {
- if( $new_owner && ( $list->is_public || $list->is_shared )) {
- # if new_owner had a share, remove it
- $list->remove_share( $new_owner ) if $list->is_private;
- $list->set({ owner => $new_owner })->store; # transfer ownership of public/shared list
- } else { # delete
- $list->delete;
- }
- }
+ $self->virtualshelves->disown_or_delete;
# We cannot have a FK on borrower_modifications.borrowernumber, the table is also used
# for patron selfreg
return $self;
}
-sub _new_owner {
- if( C4::Context->preference('ListOwnershipUponPatronDeletion') eq 'transfer' ) {
- # designated owner overrides userenv
- my $designated_owner = C4::Context->preference('ListOwnerDesignated');
- return $designated_owner if Koha::Patrons->find($designated_owner);
- my $userenv = C4::Context->userenv;
- return $userenv->{'number'} if $userenv;
- }
-}
-
=head3 category
my $patron_category = $patron->category
use Koha::Patrons;
use Koha::Database;
use Koha::DateUtils qw( dt_from_string );
+use Koha::Exceptions;
use Koha::Exceptions::Virtualshelf;
use Koha::Virtualshelfshare;
use Koha::Virtualshelfshares;
return 0; # serving as green light
}
+=head3 transfer_ownership
+
+ $list->transfer_ownership( $patron_id );
+
+This method transfers the list ownership to the passed I<$patron_id>.
+
+=cut
+
+sub transfer_ownership {
+ my ( $self, $patron_id ) = @_;
+
+ Koha::Exceptions::MissingParameter->throw( "Mandatory parameter 'patron' missing" )
+ unless $patron_id;
+
+ $self->remove_share( $patron_id ) if $self->is_private;
+ return $self->set({ owner => $patron_id })->store;
+}
+
=head2 Internal methods
=head3 _type
use Koha::Database;
+use Koha::Patrons;
use Koha::Virtualshelf;
=head1 API
-=head2 Class Methods
+=head2 Class methods
+
+=head3 disown_or_delete
+
+ $lists->disown_or_delete;
+
+This method will transfer public/shared lists to the appropriate patron or
+just delete them if not possible.
=cut
+sub disown_or_delete {
+ my ($self) = @_;
+
+ $self->_resultset->result_source->schema->txn_do(
+ sub {
+ if ( C4::Context->preference('ListOwnershipUponPatronDeletion') eq 'transfer' ) {
+ my $new_owner;
+
+ $new_owner = C4::Context->preference('ListOwnerDesignated')
+ if C4::Context->preference('ListOwnerDesignated')
+ and Koha::Patrons->find( C4::Context->preference('ListOwnerDesignated') );
+
+ unless ($new_owner) {
+ $new_owner = C4::Context->userenv->{number};
+ }
+
+ while ( my $list = $self->next ) {
+ if ( $list->is_public or $list->is_shared ) {
+ $list->transfer_ownership($new_owner);
+ } else {
+ $list->delete;
+ }
+ }
+ } else { # 'delete'
+ $_->delete for $self->as_list;
+ }
+ }
+ );
+
+ return $self;
+}
+
=head3 get_private_shelves
=cut