Filename | /home/vagrant/kohaclone/Koha/Objects.pm |
Statements | Executed 0 statements in 3.62ms |
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Koha::Objects; | ||||
2 | |||||
3 | # Copyright ByWater Solutions 2014 | ||||
4 | # | ||||
5 | # This file is part of Koha. | ||||
6 | # | ||||
7 | # Koha is free software; you can redistribute it and/or modify it under the | ||||
8 | # terms of the GNU General Public License as published by the Free Software | ||||
9 | # Foundation; either version 3 of the License, or (at your option) any later | ||||
10 | # version. | ||||
11 | # | ||||
12 | # Koha is distributed in the hope that it will be useful, but WITHOUT ANY | ||||
13 | # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | ||||
14 | # A PARTICULAR PURPOSE. See the GNU General Public License for more details. | ||||
15 | # | ||||
16 | # You should have received a copy of the GNU General Public License along | ||||
17 | # with Koha; if not, write to the Free Software Foundation, Inc., | ||||
18 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
19 | |||||
20 | use Modern::Perl; | ||||
21 | |||||
22 | use Carp; | ||||
23 | |||||
24 | use Koha::Database; | ||||
25 | |||||
26 | our $type; | ||||
27 | |||||
28 | =head1 NAME | ||||
29 | |||||
30 | Koha::Objects - Koha Object set base class | ||||
31 | |||||
32 | =head1 SYNOPSIS | ||||
33 | |||||
34 | use Koha::Objects; | ||||
35 | my @objects = Koha::Objects->search({ borrowernumber => $borrowernumber}); | ||||
36 | |||||
37 | =head1 DESCRIPTION | ||||
38 | |||||
39 | This class must be subclassed. | ||||
40 | |||||
41 | =head1 API | ||||
42 | |||||
43 | =head2 Class Methods | ||||
44 | |||||
45 | =cut | ||||
46 | |||||
47 | =head3 Koha::Objects->new(); | ||||
48 | |||||
49 | my $object = Koha::Objects->new(); | ||||
50 | |||||
51 | =cut | ||||
52 | |||||
53 | sub new { | ||||
54 | my ($class) = @_; | ||||
55 | my $self = {}; | ||||
56 | |||||
57 | bless( $self, $class ); | ||||
58 | } | ||||
59 | |||||
60 | =head3 Koha::Objects->_new_from_dbic(); | ||||
61 | |||||
62 | my $object = Koha::Objects->_new_from_dbic( $resultset ); | ||||
63 | |||||
64 | =cut | ||||
65 | |||||
66 | sub _new_from_dbic { | ||||
67 | my ( $class, $resultset ) = @_; | ||||
68 | my $self = { _resultset => $resultset }; | ||||
69 | |||||
70 | bless( $self, $class ); | ||||
71 | } | ||||
72 | |||||
73 | =head3 Koha::Objects->find(); | ||||
74 | |||||
75 | my $object = Koha::Objects->find($id); | ||||
76 | my $object = Koha::Objects->find( { keypart1 => $keypart1, keypart2 => $keypart2 } ); | ||||
77 | |||||
78 | =cut | ||||
79 | |||||
80 | sub find { | ||||
81 | my ( $self, $id ) = @_; | ||||
82 | |||||
83 | return unless $id; | ||||
84 | |||||
85 | 1 | 3.49ms | my $result = $self->_resultset()->find($id); | ||
86 | |||||
87 | return unless $result; | ||||
88 | |||||
89 | my $object = $self->object_class()->_new_from_dbic( $result ); | ||||
90 | |||||
91 | return $object; | ||||
92 | } | ||||
93 | |||||
94 | =head3 Koha::Objects->search(); | ||||
95 | |||||
96 | my @objects = Koha::Objects->search($params); | ||||
97 | |||||
98 | =cut | ||||
99 | |||||
100 | sub search { | ||||
101 | my ( $self, $params, $attributes ) = @_; | ||||
102 | |||||
103 | if (wantarray) { | ||||
104 | my @dbic_rows = $self->_resultset()->search($params, $attributes); | ||||
105 | |||||
106 | return $self->_wrap(@dbic_rows); | ||||
107 | |||||
108 | } | ||||
109 | else { | ||||
110 | my $class = ref($self) ? ref($self) : $self; | ||||
111 | my $rs = $self->_resultset()->search($params, $attributes); | ||||
112 | |||||
113 | return $class->_new_from_dbic($rs); | ||||
114 | } | ||||
115 | } | ||||
116 | |||||
117 | =head3 Koha::Objects->count(); | ||||
118 | |||||
119 | my @objects = Koha::Objects->count($params); | ||||
120 | |||||
121 | =cut | ||||
122 | |||||
123 | sub count { | ||||
124 | my ( $self, $params ) = @_; | ||||
125 | |||||
126 | return $self->_resultset()->count($params); | ||||
127 | } | ||||
128 | |||||
129 | =head3 Koha::Objects->pager(); | ||||
130 | |||||
131 | my $pager = Koha::Objects->pager; | ||||
132 | |||||
133 | =cut | ||||
134 | |||||
135 | sub pager { | ||||
136 | my ( $self ) = @_; | ||||
137 | return $self->_resultset->pager; | ||||
138 | } | ||||
139 | |||||
140 | =head3 Koha::Objects->next(); | ||||
141 | |||||
142 | my $object = Koha::Objects->next(); | ||||
143 | |||||
144 | Returns the next object that is part of this set. | ||||
145 | Returns undef if there are no more objects to return. | ||||
146 | |||||
147 | =cut | ||||
148 | |||||
149 | sub next { | ||||
150 | my ( $self ) = @_; | ||||
151 | |||||
152 | my $result = $self->_resultset()->next(); | ||||
153 | return unless $result; | ||||
154 | |||||
155 | my $object = $self->object_class()->_new_from_dbic( $result ); | ||||
156 | |||||
157 | return $object; | ||||
158 | } | ||||
159 | |||||
160 | =head3 Koha::Objects->reset(); | ||||
161 | |||||
162 | Koha::Objects->reset(); | ||||
163 | |||||
164 | resets iteration so the next call to next() will start agein | ||||
165 | with the first object in a set. | ||||
166 | |||||
167 | =cut | ||||
168 | |||||
169 | sub reset { | ||||
170 | my ( $self ) = @_; | ||||
171 | |||||
172 | $self->_resultset()->reset(); | ||||
173 | |||||
174 | return $self; | ||||
175 | } | ||||
176 | |||||
177 | =head3 Koha::Objects->as_list(); | ||||
178 | |||||
179 | Koha::Objects->as_list(); | ||||
180 | |||||
181 | Returns an arrayref of the objects in this set. | ||||
182 | |||||
183 | =cut | ||||
184 | |||||
185 | sub as_list { | ||||
186 | my ( $self ) = @_; | ||||
187 | |||||
188 | my @dbic_rows = $self->_resultset()->all(); | ||||
189 | |||||
190 | my @objects = $self->_wrap(@dbic_rows); | ||||
191 | |||||
192 | return wantarray ? @objects : \@objects; | ||||
193 | } | ||||
194 | |||||
195 | =head3 Koha::Objects->unblessed | ||||
196 | |||||
197 | Returns an unblessed representation of objects. | ||||
198 | |||||
199 | =cut | ||||
200 | |||||
201 | sub unblessed { | ||||
202 | my ($self) = @_; | ||||
203 | |||||
204 | return [ map { $_->unblessed } $self->as_list ]; | ||||
205 | } | ||||
206 | |||||
207 | =head3 Koha::Objects->_wrap | ||||
208 | |||||
209 | wraps the DBIC object in a corresponding Koha object | ||||
210 | |||||
211 | =cut | ||||
212 | |||||
213 | sub _wrap { | ||||
214 | my ( $self, @dbic_rows ) = @_; | ||||
215 | |||||
216 | my @objects = map { $self->object_class()->_new_from_dbic( $_ ) } @dbic_rows; | ||||
217 | |||||
218 | return @objects; | ||||
219 | } | ||||
220 | |||||
221 | =head3 Koha::Objects->_resultset | ||||
222 | |||||
223 | Returns the internal resultset or creates it if undefined | ||||
224 | |||||
225 | =cut | ||||
226 | |||||
227 | sub _resultset { | ||||
228 | my ($self) = @_; | ||||
229 | |||||
230 | if ( ref($self) ) { | ||||
231 | 1 | 24µs | $self->{_resultset} ||= # spent 24µs making 1 call to DBIx::Class::ResultSet::_bool | ||
232 | Koha::Database->new()->schema()->resultset( $self->type() ); | ||||
233 | |||||
234 | return $self->{_resultset}; | ||||
235 | } | ||||
236 | else { | ||||
237 | 1 | 131µs | return Koha::Database->new()->schema()->resultset( $self->type() ); | ||
238 | } | ||||
239 | } | ||||
240 | |||||
241 | =head3 type | ||||
242 | |||||
243 | The type method must be set for all child classes. | ||||
244 | The value returned by it should be the DBIC resultset name. | ||||
245 | For example, for holds, type should return 'Reserve'. | ||||
246 | |||||
247 | =cut | ||||
248 | |||||
249 | sub type { } | ||||
250 | |||||
251 | =head3 object_class | ||||
252 | |||||
253 | This method must be set for all child classes. | ||||
254 | The value returned by it should be the name of the Koha | ||||
255 | object class that is returned by this class. | ||||
256 | For example, for holds, object_class should return 'Koha::Hold'. | ||||
257 | |||||
258 | =cut | ||||
259 | |||||
260 | sub object_class { } | ||||
261 | |||||
262 | sub DESTROY { } | ||||
263 | |||||
264 | =head1 AUTHOR | ||||
265 | |||||
266 | Kyle M Hall <kyle@bywatersolutions.com> | ||||
267 | |||||
268 | =cut | ||||
269 | |||||
270 | 1; |