Bug 28567: Fix 0 vs "" vs undef on the admin library form

There are two things here:
* Branches.pickup_location has a default = 1 in DB, we should not set to undef if 0
or it will be set to 1 when stored.
* The other fields are all text (varchar, mediumtext or longtext) and
can be NULL. They are correct set to NULL when a new library is created
but set to an empty string when the library is modified. That's not
consistent

Test plan:
0. Don't apply the patch
1. Create a new library, set pickup location to "No"
2. Save
=> Pickup location is set to YES
=> In DB notice that the different values you didn't fill in are set to
NULL
3. Edit the library
4. Save
=> In DB notice that the different values you didn't fill in are now set
to an empty string
5. Apply the patch, restart_all
6. Run the updatedatabase script
=> In DB all the empty string values are set to NULL
7. Repeat 1 to 4 and confirm that everything is now working as expected

Signed-off-by: Owen Leonard <oleonard@myacpl.org>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Jonathan Druart 2021-06-25 12:44:19 +02:00 committed by Kyle M Hall
parent a09f673471
commit a844a2211f
2 changed files with 50 additions and 4 deletions

View file

@ -91,7 +91,12 @@ if ( $op eq 'add_form' ) {
if ($is_a_modif) {
my $library = Koha::Libraries->find($branchcode);
for my $field (@fields) {
$library->$field( scalar $input->param($field) );
if ( $field eq 'pickup_location' ) {
# Don't fallback to undef/NULL, default is 1 in DB
$library->$field( scalar $input->param($field) );
} else {
$library->$field( scalar $input->param($field) || undef );
}
}
try {
@ -119,12 +124,19 @@ if ( $op eq 'add_form' ) {
}
catch {
push @messages, { type => 'alert', code => 'error_on_update' };
}
};
} else {
$branchcode =~ s|\s||g;
my $library = Koha::Library->new(
{ branchcode => $branchcode,
( map { $_ => scalar $input->param($_) || undef } @fields )
{
branchcode => $branchcode,
(
map {
$_ eq 'pickup_location' # Don't fallback to undef/NULL, default is 1 in DB
? ( $_ => scalar $input->param($_) )
: ( $_ => scalar $input->param($_) || undef )
} @fields
)
}
);

View file

@ -0,0 +1,34 @@
$DBversion = 'XXX'; # will be replaced by the RM
if( CheckVersion( $DBversion ) ) {
my @fields = qw(
branchname
branchaddress1
branchaddress2
branchaddress3
branchzip
branchcity
branchstate
branchcountry
branchphone
branchfax
branchemail
branchillemail
branchreplyto
branchreturnpath
branchurl
branchip
branchnotes
opac_info
marcorgcode
);
for my $f ( @fields ) {
$dbh->do(qq{
UPDATE branches
SET $f = NULL
WHERE $f = ""
});
}
NewVersion( $DBversion, 28567, "Set to NULL empty branches fields");
}