use Modern::Perl;
-use Carp;
+use Carp qw( carp );
use List::MoreUtils qw( none );
use Class::Inspector;
use Koha::Database;
+use Koha::Exceptions::Object;
+use Koha::DateUtils qw( dt_from_string );
=head1 NAME
=head1 SYNOPSIS
use Koha::Objects;
- my @objects = Koha::Objects->search({ borrowernumber => $borrowernumber});
+ my $objects = Koha::Objects->search({ borrowernumber => $borrowernumber});
=head1 DESCRIPTION
return $object;
}
-=head3 Koha::Objects->search();
+=head3 search
-my @objects = Koha::Objects->search($params);
+ # scalar context
+ my $objects = Koha::Objects->search([$params, $attributes]);
+ while (my $object = $objects->next) {
+ do_stuff($object);
+ }
+
+This B<instantiates> the I<Koha::Objects> class, and generates a resultset
+based on the query I<$params> and I<$attributes> that are passed (like in DBIC).
=cut
sub search {
my ( $self, $params, $attributes ) = @_;
- if (wantarray) {
- my @dbic_rows = $self->_resultset()->search($params, $attributes);
-
- return $self->_wrap(@dbic_rows);
-
- }
- else {
- my $class = ref($self) ? ref($self) : $self;
- my $rs = $self->_resultset()->search($params, $attributes);
+ my $class = ref($self) ? ref($self) : $self;
+ my $rs = $self->_resultset()->search($params, $attributes);
- return $class->_new_from_dbic($rs);
- }
+ return $class->_new_from_dbic($rs);
}
=head3 search_related
- my @objects = Koha::Objects->search_related( $rel_name, $cond?, \%attrs? );
my $objects = Koha::Objects->search_related( $rel_name, $cond?, \%attrs? );
Searches the specified relationship, optionally specifying a condition and attributes for matching records.
my ( $self, $rel_name, @params ) = @_;
return if !$rel_name;
- if (wantarray) {
- my @dbic_rows = $self->_resultset()->search_related($rel_name, @params);
- return if !@dbic_rows;
- my $object_class = _get_objects_class( $dbic_rows[0]->result_class );
-
- eval "require $object_class";
- return _wrap( $object_class, @dbic_rows );
- } else {
- my $rs = $self->_resultset()->search_related($rel_name, @params);
- return if !$rs;
- my $object_class = _get_objects_class( $rs->result_class );
+ my $rs = $self->_resultset()->search_related($rel_name, @params);
+ return if !$rs;
+ my $object_class = _get_objects_class( $rs->result_class );
- eval "require $object_class";
- return _new_from_dbic( $object_class, $rs );
- }
+ eval "require $object_class";
+ return _new_from_dbic( $object_class, $rs );
}
=head3 delete
sub update {
my ($self, $fields, $options) = @_;
+ Koha::Exceptions::Object::NotInstantiated->throw(
+ method => 'update',
+ class => $self
+ ) unless ref $self;
+
my $no_triggers = $options->{no_triggers};
if (
return $self->_resultset->update($fields);
}
+=head3 filter_by_last_update
+
+my $filtered_objects = $objects->filter_by_last_update
+
+days exclusive by default (will be inclusive if days_inclusive is passed and set)
+from inclusive
+to inclusive
+
+=cut
+
+sub filter_by_last_update {
+ my ( $self, $params ) = @_;
+ my $timestamp_column_name = $params->{timestamp_column_name} || 'timestamp';
+ my $days_inclusive = $params->{days_inclusive} || 0;
+ my $conditions;
+ Koha::Exceptions::MissingParameter->throw(
+ "Missing mandatory parameter: days or from or to")
+ unless exists $params->{days}
+ or exists $params->{from}
+ or exists $params->{to};
+
+ my $dtf = Koha::Database->new->schema->storage->datetime_parser;
+ if ( exists $params->{days} ) {
+ my $dt = Koha::DateUtils::dt_from_string();
+ my $operator = $days_inclusive ? '<=' : '<';
+ $conditions->{$operator} = $dtf->format_date( $dt->subtract( days => $params->{days} ) );
+ }
+ if ( exists $params->{from} ) {
+ my $from = ref($params->{from}) ? $params->{from} : dt_from_string($params->{from});
+ $conditions->{'>='} = $dtf->format_date( $from );
+ }
+ if ( exists $params->{to} ) {
+ my $to = ref($params->{to}) ? $params->{to} : dt_from_string($params->{to});
+ $conditions->{'<='} = $dtf->format_date( $to );
+ }
+
+ return $self->search(
+ {
+ $timestamp_column_name => $conditions
+ }
+ );
+}
+
=head3 single
my $object = Koha::Objects->search({}, { rows => 1 })->single
sub empty {
my ($self) = @_;
- unless (ref($self)) {
- $self = $self->new;
- }
+ Koha::Exceptions::Object::NotInstantiated->throw(
+ method => 'empty',
+ class => $self
+ ) unless ref $self;
+ $self = $self->search(\'0 = 1');
$self->_resultset()->set_cache([]);
return $self;