| 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; |