Bug 3150: (QA follow-up) Don't load unused and deleted tt files
[srvgit] / Koha / Virtualshelves.pm
index 195376c..2b82dfc 100644 (file)
@@ -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 <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
@@ -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(
@@ -154,16 +225,24 @@ sub get_shelves_containing_record {
         },
         {
             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';
 }