Bug 11221: ensure that SQLHelper uses NULL rather than 0000-00-00 as default date...
authorJonathan Druart <jonathan.druart@biblibre.com>
Tue, 12 Nov 2013 14:07:54 +0000 (15:07 +0100)
committerGalen Charlton <gmc@esilibrary.com>
Tue, 19 Nov 2013 15:29:08 +0000 (15:29 +0000)
The default values for date fields is undef, so if a date field contains
an empty string, we should insert NULL in the DB, not 0000-00-00.
The format_date_in_iso routine should be only called if a date is
defined, is not equal to an empty string and does not match the iso
regex.

This patch fixes a bug where editing or creating a patron record
without setting the birth date results in 0000-00-00 rather than null
being set as the dateofbirth value.

Partial test plan:
1. Create a new patron. Leave dateofbirth empty.
2. Save the record.
3. Open the record for editing.
4. Save the record without making changes.
5. Koha gives no error.

Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Passes all tests and QA script.
Now when no date is given NULL is saved to the database.

Tested:
- Adding a patron without date of birth
- Editing the patron, entering a date of birth
- Editing the patron, deleting date of birth
All worked as expected.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
C4/SQLHelper.pm

index f1fa7b5..b867094 100644 (file)
@@ -404,9 +404,15 @@ sub _filter_hash{
     my $elements=join "|",@columns_filtered;
        foreach my $field (grep {/\b($elements)\b/} keys %$filter_input){
                ## supposed to be a hash of simple values, hashes of arrays could be implemented
-               $filter_input->{$field}=format_date_in_iso($filter_input->{$field})
-          if $columns->{$field}{Type}=~/date/ &&
-             ($filter_input->{$field} && $filter_input->{$field} !~C4::Dates->regexp("iso"));
+        if ( $columns->{$field}{Type}=~/date/ ) {
+            if ( defined $filter_input->{$field} ) {
+                if ( $filter_input->{$field} eq q{} ) {
+                    $filter_input->{$field} = undef;
+                } elsif ( $filter_input->{$field} !~ C4::Dates->regexp("iso") ) {
+                    $filter_input->{$field} = format_date_in_iso($filter_input->{$field});
+                }
+            }
+        }
                my ($tmpkeys, $localvalues)=_Process_Operands($filter_input->{$field},"$tablename.$field",$searchtype,$columns);
                if (@$tmpkeys){
                        push @values, @$localvalues;