Bugzilla – Attachment 171763 Details for
Bug 37902
Timezone ignored when passing rfc3339 formatted date (search 'q')
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 37902: Make sure we loop over if a structure is passed
Bug-37902-Make-sure-we-loop-over-if-a-structure-is.patch (text/plain), 6.22 KB, created by
Nick Clemens (kidclamp)
on 2024-09-19 13:45:11 UTC
(
hide
)
Description:
Bug 37902: Make sure we loop over if a structure is passed
Filename:
MIME Type:
Creator:
Nick Clemens (kidclamp)
Created:
2024-09-19 13:45:11 UTC
Size:
6.22 KB
patch
obsolete
>From ca44c2ba74527987296eb5da96910332b1fbc92c Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Thu, 12 Sep 2024 11:19:36 +0200 >Subject: [PATCH] Bug 37902: Make sure we loop over if a structure is passed > >Signed-off-by: Nick Clemens <nick@bywatersolutions.com> >--- > Koha/Object.pm | 60 ++++++++++++++++++++++-------------- > Koha/REST/Plugin/Objects.pm | 14 +++++---- > t/db_dependent/Koha/Object.t | 24 ++++++++++++++- > 3 files changed, 68 insertions(+), 30 deletions(-) > >diff --git a/Koha/Object.pm b/Koha/Object.pm >index ad34bbc9480..0f179044ebc 100644 >--- a/Koha/Object.pm >+++ b/Koha/Object.pm >@@ -832,45 +832,59 @@ Returns the passed params, converted from API naming into the model. > > =cut > >-sub attributes_from_api { >- my ( $self, $from_api_params ) = @_; >- >- my $from_api_mapping = $self->from_api_mapping; >+sub _recursive_fixup { >+ my ( $self, $key, $value, $column_info ) = @_; > >- my $params; >- my $columns_info = $self->_result->result_source->columns_info; >- my $dtf = $self->_result->result_source->storage->datetime_parser; >+ if ( ref($value) && ref($value) eq 'HASH' ) { >+ my $hash; >+ for my $k ( keys %$value ) { >+ $hash->{$k} = $self->_recursive_fixup( $key, $value->{$k}, $column_info ); >+ } >+ return $hash; > >- while (my ($key, $value) = each %{ $from_api_params } ) { >- my $koha_field_name = >- exists $from_api_mapping->{$key} >- ? $from_api_mapping->{$key} >- : $key; >+ } elsif ( ref($value) && ref($value) eq 'ARRAY' ) { >+ return [ map { $self->_recursive_fixup( $key, $_, $column_info ) } @$value ]; >+ } else { >+ if ( $column_info->{is_boolean} ) { > >- if ( $columns_info->{$koha_field_name}->{is_boolean} ) { > # TODO: Remove when D8 is formally deprecated > # Handle booleans gracefully >- $value = ( $value ) ? 1 : 0; >- } >- elsif ( _date_or_datetime_column_type( $columns_info->{$koha_field_name}->{data_type} ) ) { >- if (defined $value) { >+ $value = ($value) ? 1 : 0; >+ } elsif ( _date_or_datetime_column_type( $column_info->{data_type} ) ) { >+ if ( defined $value ) { > try { >- if ( $columns_info->{$koha_field_name}->{data_type} eq 'date' ) { >+ my $dtf = $self->_result->result_source->storage->datetime_parser; >+ if ( $column_info->{data_type} eq 'date' ) { > my $dt = DateTime::Format::MySQL->parse_date($value); > $value = $dtf->format_date($dt); >- } >- else { >+ } else { > my $dt = Koha::DateTime::Format::RFC3339->parse_datetime($value); > $value = $dtf->format_datetime($dt); > } >- } >- catch { >+ } catch { > Koha::Exceptions::BadParameter->throw( parameter => $key ); > }; > } > } >+ return $value; >+ } >+} >+ >+sub attributes_from_api { >+ my ( $self, $from_api_params ) = @_; >+ >+ my $from_api_mapping = $self->from_api_mapping; >+ >+ my $params; >+ my $columns_info = $self->_result->result_source->columns_info; >+ >+ while ( my ( $key, $value ) = each %{$from_api_params} ) { >+ my $koha_field_name = >+ exists $from_api_mapping->{$key} >+ ? $from_api_mapping->{$key} >+ : $key; > >- $params->{$koha_field_name} = $value; >+ $params->{$koha_field_name} = $self->_recursive_fixup( $key, $value, $columns_info->{$koha_field_name} ); > } > > return $params; >diff --git a/Koha/REST/Plugin/Objects.pm b/Koha/REST/Plugin/Objects.pm >index 2b1dbbe83ca..20c8ecca045 100644 >--- a/Koha/REST/Plugin/Objects.pm >+++ b/Koha/REST/Plugin/Objects.pm >@@ -274,13 +274,15 @@ controller, and thus shouldn't be called twice in it. > > # Apply the mapping function to the passed params > if ( defined $filtered_params ) { >- $filtered_params = >- $c->build_query_params( $filtered_params, $reserved_params ); >- } >+ $filtered_params = $c->build_query_params( $filtered_params, $reserved_params ); >+ } > >- $filtered_params = >- $c->merge_q_params( $filtered_params, $query_params, >- $result_set ); >+ if ($query_params) { >+ $filtered_params = $c->merge_q_params( >+ $filtered_params, $query_params, >+ $result_set >+ ); >+ } > > $filtered_params = > $result_set->attributes_from_api($filtered_params); >diff --git a/t/db_dependent/Koha/Object.t b/t/db_dependent/Koha/Object.t >index 68518175349..fe2c4ff54df 100755 >--- a/t/db_dependent/Koha/Object.t >+++ b/t/db_dependent/Koha/Object.t >@@ -763,7 +763,7 @@ subtest 'attributes_from_api() tests' => sub { > > subtest 'date and date-time handling tests' => sub { > >- plan tests => 12; >+ plan tests => 13; > > my $patron = Koha::Patron->new(); > >@@ -803,6 +803,28 @@ subtest 'attributes_from_api() tests' => sub { > 'Given an rfc3339 formatted date string, a date field is converted into an SQL formatted date string' > ); > >+ $attrs = $patron->attributes_from_api( >+ { >+ updated_on => { '>' => '2019-12-27T14:53:00Z' }, >+ last_seen => [ { '>' => '2019-12-27T14:53:00Z' }, { '=' => '2019-12-31T23:59:00Z' } ], >+ date_of_birth => [ { '>' => '2019-12-27' }, { '=' => '2019-12-31' } ], >+ } >+ ); >+ >+ is_deeply( >+ $attrs, >+ { >+ lastseen => [ >+ { >+ '>' => '2019-12-27 14:53:00', >+ }, >+ { '=' => '2019-12-31 23:59:00' } >+ ], >+ updated_on => { '>' => '2019-12-27 14:53:00' }, >+ dateofbirth => [ { '>', '2019-12-27'}, { '=' => '2019-12-31' } ] >+ } >+ ); >+ > $attrs = $patron->attributes_from_api( > { > last_seen => undef, >-- >2.39.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 37902
:
171389
|
171390
|
171391
|
171392
|
171402
|
171403
|
171515
|
171551
|
171652
|
171762
|
171763
|
171764
|
171765
|
171766
|
171767
|
171768
|
172105
|
172106
|
172107
|
172108
|
172109
|
172110
|
172111
|
172112