# 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 <http://www.gnu.org/licenses>.
use Modern::Perl;
-use Carp;
use Koha::Database;
+use Koha::Patrons;
use Koha::Virtualshelf;
+
use base qw(Koha::Objects);
=head1 NAME
=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
$self->search(
{
- category => 1,
+ public => 0,
-or => {
'virtualshelfshares.borrowernumber' => $borrowernumber,
'me.owner' => $borrowernumber,
},
{
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 ) = @_;
$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 =>
{
$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};
{
-or => [
{
- category => 1,
+ public => 0,
-or => {
'me.owner' => $borrowernumber,
-or => {
},
}
},
- { category => 2 },
+ { public => 1 },
]
};
} else {
- push @conditions, { category => 2 };
+ push @conditions, { public => 1 };
}
return Koha::Virtualshelves->search(
},
{
join => [ 'virtualshelfcontents', 'virtualshelfshares' ],
- group_by => 'shelfnumber',
+ distinct => 'shelfnumber',
order_by => { -asc => 'shelfname' },
}
);
}
+=head3 _type
+
+=cut
+
sub _type {
return 'Virtualshelve';
}
+=head3 object_class
+
+=cut
+
sub object_class {
return 'Koha::Virtualshelf';
}