Bug 11889: (follow-up) We did not need get_shared_shelves after all
[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 get_private_shelves
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 =head3 get_public_shelves
66
67 =cut
68
69 sub get_public_shelves {
70     my ( $self, $params ) = @_;
71     my $page = $params->{page};
72     my $rows = $params->{rows};
73
74     $self->search(
75         {
76             public => 1,
77         },
78         {
79             distinct => 'shelfnumber',
80             order_by => 'shelfname',
81             ( ( $page and $rows ) ? ( page => $page, rows => $rows ) : () ),
82         }
83     );
84 }
85
86 =head3 get_some_shelves
87
88 =cut
89
90 sub get_some_shelves {
91     my ( $self, $params ) = @_;
92     my $borrowernumber = $params->{borrowernumber} || 0;
93     my $public = $params->{public} || 0;
94     my $add_allowed = $params->{add_allowed};
95
96     my @conditions;
97     my $patron;
98     my $staffuser = 0;
99     if ( $borrowernumber != 0 ) {
100         $patron = Koha::Patrons->find( $borrowernumber );
101         $staffuser = $patron->can_patron_change_staff_only_lists;
102     }
103     if ( $add_allowed ) {
104         if ( $staffuser ) {
105             push @conditions, {
106                 -or =>
107                 [
108                     {
109                         "me.owner" => $borrowernumber,
110                         "me.allow_change_from_owner" => 1,
111                     },
112                     "me.allow_change_from_others" => 1,
113                     "me.allow_change_from_staff"  => 1
114                 ]
115             };
116         } else {
117             push @conditions, {
118                 -or =>
119                 [
120                     {
121                         "me.owner" => $borrowernumber,
122                         "me.allow_change_from_owner" => 1,
123                     },
124                     "me.allow_change_from_others" => 1,
125                 ]
126             };
127         }
128     }
129     if ( !$public ) {
130         push @conditions, {
131             -or =>
132             {
133                 "virtualshelfshares.borrowernumber" => $borrowernumber,
134                 "me.owner" => $borrowernumber,
135             }
136         };
137     }
138
139     $self->search(
140         {
141             public => $public,
142             ( @conditions ? ( -and => \@conditions ) : () ),
143         },
144         {
145             join => [ 'virtualshelfshares' ],
146             distinct => 'shelfnumber',
147             order_by => { -desc => 'lastmodified' },
148         }
149     );
150 }
151
152 =head3 get_shelves_containing_record
153
154 =cut
155
156 sub get_shelves_containing_record {
157     my ( $self, $params ) = @_;
158     my $borrowernumber = $params->{borrowernumber};
159     my $biblionumber   = $params->{biblionumber};
160
161     my @conditions = ( 'virtualshelfcontents.biblionumber' => $biblionumber );
162     if ($borrowernumber) {
163         push @conditions,
164           {
165               -or => [
166                 {
167                     public => 0,
168                     -or      => {
169                         'me.owner' => $borrowernumber,
170                         -or        => {
171                             'virtualshelfshares.borrowernumber' => $borrowernumber,
172                         },
173                     }
174                 },
175                 { public => 1 },
176             ]
177           };
178     } else {
179         push @conditions, { public => 1 };
180     }
181
182     return Koha::Virtualshelves->search(
183         {
184             -and => \@conditions
185         },
186         {
187             join     => [ 'virtualshelfcontents', 'virtualshelfshares' ],
188             distinct => 'shelfnumber',
189             order_by => { -asc => 'shelfname' },
190         }
191     );
192 }
193
194 =head3 _type
195
196 =cut
197
198 sub _type {
199     return 'Virtualshelve';
200 }
201
202 =head3 object_class
203
204 =cut
205
206 sub object_class {
207     return 'Koha::Virtualshelf';
208 }
209
210 1;