X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=Koha%2FVirtualshelves.pm;h=2b82dfc73243dd5126ca8adf6a62aba0f72c4c04;hb=a426134fe33728d96fef911bc0e937d58f0951cb;hp=bb7db677898c2154359fb14e261ea2edfa27d028;hpb=7e220e0d8f107cce63f32bfaa1919c04b4dea6e2;p=srvgit diff --git a/Koha/Virtualshelves.pm b/Koha/Virtualshelves.pm index bb7db67789..2b82dfc732 100644 --- a/Koha/Virtualshelves.pm +++ b/Koha/Virtualshelves.pm @@ -2,27 +2,28 @@ package Koha::Virtualshelves; # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 3 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . use Modern::Perl; -use Carp; use Koha::Database; +use Koha::Patrons; use Koha::Virtualshelf; + use base qw(Koha::Objects); =head1 NAME @@ -31,11 +32,50 @@ Koha::Virtualshelf - Koha Virtualshelf Object class =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 -=head3 type +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') ); + + if( !$new_owner && C4::Context->userenv ) { + $new_owner = C4::Context->userenv->{number}; + } + + while ( my $list = $self->next ) { + if ( $new_owner && ( $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 @@ -47,7 +87,7 @@ sub get_private_shelves { $self->search( { - category => 1, + public => 0, -or => { 'virtualshelfshares.borrowernumber' => $borrowernumber, 'me.owner' => $borrowernumber, @@ -55,13 +95,16 @@ sub get_private_shelves { }, { join => [ 'virtualshelfshares' ], - group_by => 'shelfnumber', + distinct => 'shelfnumber', order_by => 'shelfname', ( ( $page and $rows ) ? ( page => $page, rows => $rows ) : () ), } ); } +=head3 get_public_shelves + +=cut sub get_public_shelves { my ( $self, $params ) = @_; @@ -70,36 +113,60 @@ sub get_public_shelves { $self->search( { - category => 2, + public => 1, }, { - group_by => 'shelfnumber', + distinct => 'shelfnumber', order_by => 'shelfname', ( ( $page and $rows ) ? ( page => $page, rows => $rows ) : () ), } ); } +=head3 get_some_shelves + +=cut + sub get_some_shelves { my ( $self, $params ) = @_; my $borrowernumber = $params->{borrowernumber} || 0; - my $category = $params->{category} || 1; + my $public = $params->{public} || 0; my $add_allowed = $params->{add_allowed}; my @conditions; + my $patron; + my $staffuser = 0; + if ( $borrowernumber != 0 ) { + $patron = Koha::Patrons->find( $borrowernumber ); + $staffuser = $patron->can_patron_change_staff_only_lists; + } if ( $add_allowed ) { - push @conditions, { - -or => - [ - { - "me.owner" => $borrowernumber, - "me.allow_change_from_owner" => 1, - }, - "me.allow_change_from_others" => 1, - ] - }; + if ( $staffuser ) { + push @conditions, { + -or => + [ + { + "me.owner" => $borrowernumber, + "me.allow_change_from_owner" => 1, + }, + "me.allow_change_from_others" => 1, + "me.allow_change_from_staff" => 1 + ] + }; + } else { + push @conditions, { + -or => + [ + { + "me.owner" => $borrowernumber, + "me.allow_change_from_owner" => 1, + }, + "me.allow_change_from_others" => 1, + ] + }; + } } - if ( $category == 1 ) { + if ( !$public ) { push @conditions, { -or => { @@ -111,17 +178,21 @@ sub get_some_shelves { $self->search( { - category => $category, + public => $public, ( @conditions ? ( -and => \@conditions ) : () ), }, { join => [ 'virtualshelfshares' ], - group_by => 'shelfnumber', + distinct => 'shelfnumber', order_by => { -desc => 'lastmodified' }, } ); } +=head3 get_shelves_containing_record + +=cut + sub get_shelves_containing_record { my ( $self, $params ) = @_; my $borrowernumber = $params->{borrowernumber}; @@ -133,7 +204,7 @@ sub get_shelves_containing_record { { -or => [ { - category => 1, + public => 0, -or => { 'me.owner' => $borrowernumber, -or => { @@ -141,11 +212,11 @@ sub get_shelves_containing_record { }, } }, - { category => 2 }, + { public => 1 }, ] }; } else { - push @conditions, { category => 2 }; + push @conditions, { public => 1 }; } return Koha::Virtualshelves->search( @@ -160,10 +231,18 @@ sub get_shelves_containing_record { ); } +=head3 _type + +=cut + sub _type { return 'Virtualshelve'; } +=head3 object_class + +=cut + sub object_class { return 'Koha::Virtualshelf'; }