Bug 30477: Add new UNIMARC installer translation files
[koha.git] / Koha / Virtualshelves.pm
1 package Koha::Virtualshelves;
2
3 # This file is part of Koha.
4 #
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18 use Modern::Perl;
19
20
21 use Koha::Database;
22
23 use Koha::Virtualshelf;
24
25
26 use base qw(Koha::Objects);
27
28 =head1 NAME
29
30 Koha::Virtualshelf - Koha Virtualshelf Object class
31
32 =head1 API
33
34 =head2 Class Methods
35
36 =cut
37
38 =head3 type
39
40 =cut
41
42 sub get_private_shelves {
43     my ( $self, $params ) = @_;
44     my $page = $params->{page};
45     my $rows = $params->{rows};
46     my $borrowernumber = $params->{borrowernumber} || 0;
47
48     $self->search(
49         {
50             public => 0,
51             -or => {
52                 'virtualshelfshares.borrowernumber' => $borrowernumber,
53                 'me.owner' => $borrowernumber,
54             }
55         },
56         {
57             join => [ 'virtualshelfshares' ],
58             distinct => 'shelfnumber',
59             order_by => 'shelfname',
60             ( ( $page and $rows ) ? ( page => $page, rows => $rows ) : () ),
61         }
62     );
63 }
64
65
66 sub get_public_shelves {
67     my ( $self, $params ) = @_;
68     my $page = $params->{page};
69     my $rows = $params->{rows};
70
71     $self->search(
72         {
73             public => 1,
74         },
75         {
76             distinct => 'shelfnumber',
77             order_by => 'shelfname',
78             ( ( $page and $rows ) ? ( page => $page, rows => $rows ) : () ),
79         }
80     );
81 }
82
83 sub get_some_shelves {
84     my ( $self, $params ) = @_;
85     my $borrowernumber = $params->{borrowernumber} || 0;
86     my $public = $params->{public} || 0;
87     my $add_allowed = $params->{add_allowed};
88
89     my @conditions;
90     my $patron;
91     my $staffuser = 0;
92     if ( $borrowernumber != 0 ) {
93         $patron = Koha::Patrons->find( $borrowernumber );
94         $staffuser = $patron->can_patron_change_staff_only_lists;
95     }
96     if ( $add_allowed ) {
97         if ( $staffuser ) {
98             push @conditions, {
99                 -or =>
100                 [
101                     {
102                         "me.owner" => $borrowernumber,
103                         "me.allow_change_from_owner" => 1,
104                     },
105                     "me.allow_change_from_others" => 1,
106                     "me.allow_change_from_staff"  => 1
107                 ]
108             };
109         } else {
110             push @conditions, {
111                 -or =>
112                 [
113                     {
114                         "me.owner" => $borrowernumber,
115                         "me.allow_change_from_owner" => 1,
116                     },
117                     "me.allow_change_from_others" => 1,
118                 ]
119             };
120         }
121     }
122     if ( !$public ) {
123         push @conditions, {
124             -or =>
125             {
126                 "virtualshelfshares.borrowernumber" => $borrowernumber,
127                 "me.owner" => $borrowernumber,
128             }
129         };
130     }
131
132     $self->search(
133         {
134             public => $public,
135             ( @conditions ? ( -and => \@conditions ) : () ),
136         },
137         {
138             join => [ 'virtualshelfshares' ],
139             distinct => 'shelfnumber',
140             order_by => { -desc => 'lastmodified' },
141         }
142     );
143 }
144
145 sub get_shelves_containing_record {
146     my ( $self, $params ) = @_;
147     my $borrowernumber = $params->{borrowernumber};
148     my $biblionumber   = $params->{biblionumber};
149
150     my @conditions = ( 'virtualshelfcontents.biblionumber' => $biblionumber );
151     if ($borrowernumber) {
152         push @conditions,
153           {
154               -or => [
155                 {
156                     public => 0,
157                     -or      => {
158                         'me.owner' => $borrowernumber,
159                         -or        => {
160                             'virtualshelfshares.borrowernumber' => $borrowernumber,
161                         },
162                     }
163                 },
164                 { public => 1 },
165             ]
166           };
167     } else {
168         push @conditions, { public => 1 };
169     }
170
171     return Koha::Virtualshelves->search(
172         {
173             -and => \@conditions
174         },
175         {
176             join     => [ 'virtualshelfcontents', 'virtualshelfshares' ],
177             distinct => 'shelfnumber',
178             order_by => { -asc => 'shelfname' },
179         }
180     );
181 }
182
183 sub _type {
184     return 'Virtualshelve';
185 }
186
187 sub object_class {
188     return 'Koha::Virtualshelf';
189 }
190
191 1;