Bug 7683: Fix a shift in date filter indexes
[koha.git] / Koha / Objects.pm
blob8312949fcfcafc0601875f0b73f289e1121a88f2
1 package Koha::Objects;
3 # Copyright ByWater Solutions 2014
5 # This file is part of Koha.
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.
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.
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.
20 use Modern::Perl;
22 use Carp;
24 use Koha::Database;
26 our $type;
28 =head1 NAME
30 Koha::Objects - Koha Object set base class
32 =head1 SYNOPSIS
34 use Koha::Objects;
35 my @objects = Koha::Objects->search({ borrowernumber => $borrowernumber});
37 =head1 DESCRIPTION
39 This class must be subclassed.
41 =head1 API
43 =head2 Class Methods
45 =cut
47 =head3 Koha::Objects->new();
49 my $object = Koha::Objects->new();
51 =cut
53 sub new {
54 my ($class) = @_;
55 my $self = {};
57 bless( $self, $class );
60 =head3 Koha::Objects->_new_from_dbic();
62 my $object = Koha::Objects->_new_from_dbic( $resultset );
64 =cut
66 sub _new_from_dbic {
67 my ( $class, $resultset ) = @_;
68 my $self = { _resultset => $resultset };
70 bless( $self, $class );
73 =head3 Koha::Objects->find();
75 my $object = Koha::Objects->find($id);
76 my $object = Koha::Objects->find( { keypart1 => $keypart1, keypart2 => $keypart2 } );
78 =cut
80 sub find {
81 my ( $self, $id ) = @_;
83 return unless defined($id);
85 my $result = $self->_resultset()->find($id);
87 return unless $result;
89 my $object = $self->object_class()->_new_from_dbic( $result );
91 return $object;
94 =head3 Koha::Objects->search();
96 my @objects = Koha::Objects->search($params);
98 =cut
100 sub search {
101 my ( $self, $params, $attributes ) = @_;
103 if (wantarray) {
104 my @dbic_rows = $self->_resultset()->search($params, $attributes);
106 return $self->_wrap(@dbic_rows);
109 else {
110 my $class = ref($self) ? ref($self) : $self;
111 my $rs = $self->_resultset()->search($params, $attributes);
113 return $class->_new_from_dbic($rs);
117 =head3 Koha::Objects->count();
119 my @objects = Koha::Objects->count($params);
121 =cut
123 sub count {
124 my ( $self, $params ) = @_;
126 return $self->_resultset()->count($params);
129 =head3 Koha::Objects->pager();
131 my $pager = Koha::Objects->pager;
133 =cut
135 sub pager {
136 my ( $self ) = @_;
137 return $self->_resultset->pager;
140 =head3 Koha::Objects->next();
142 my $object = Koha::Objects->next();
144 Returns the next object that is part of this set.
145 Returns undef if there are no more objects to return.
147 =cut
149 sub next {
150 my ( $self ) = @_;
152 my $result = $self->_resultset()->next();
153 return unless $result;
155 my $object = $self->object_class()->_new_from_dbic( $result );
157 return $object;
160 =head3 Koha::Objects->reset();
162 Koha::Objects->reset();
164 resets iteration so the next call to next() will start agein
165 with the first object in a set.
167 =cut
169 sub reset {
170 my ( $self ) = @_;
172 $self->_resultset()->reset();
174 return $self;
177 =head3 Koha::Objects->as_list();
179 Koha::Objects->as_list();
181 Returns an arrayref of the objects in this set.
183 =cut
185 sub as_list {
186 my ( $self ) = @_;
188 my @dbic_rows = $self->_resultset()->all();
190 my @objects = $self->_wrap(@dbic_rows);
192 return wantarray ? @objects : \@objects;
195 =head3 Koha::Objects->unblessed
197 Returns an unblessed representation of objects.
199 =cut
201 sub unblessed {
202 my ($self) = @_;
204 return [ map { $_->unblessed } $self->as_list ];
207 =head3 Koha::Objects->_wrap
209 wraps the DBIC object in a corresponding Koha object
211 =cut
213 sub _wrap {
214 my ( $self, @dbic_rows ) = @_;
216 my @objects = map { $self->object_class()->_new_from_dbic( $_ ) } @dbic_rows;
218 return @objects;
221 =head3 Koha::Objects->_resultset
223 Returns the internal resultset or creates it if undefined
225 =cut
227 sub _resultset {
228 my ($self) = @_;
230 if ( ref($self) ) {
231 $self->{_resultset} ||=
232 Koha::Database->new()->schema()->resultset( $self->type() );
234 return $self->{_resultset};
236 else {
237 return Koha::Database->new()->schema()->resultset( $self->type() );
241 =head3 type
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'.
247 =cut
249 sub type { }
251 =head3 object_class
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'.
258 =cut
260 sub object_class { }
262 sub DESTROY { }
264 =head1 AUTHOR
266 Kyle M Hall <kyle@bywatersolutions.com>
268 =cut