Bug 26516: Don't accept incorrect values for copyrightdate/publicationyear

The previous patch rejects incorrect values when saving to the db specifically for copyrightdate
An error is thrown for the int conversion when it fails

Rather than catching things when saving we can fix the value when generated, simply returning null when parsing
the record

To test:
1 - Add a new record to Koha making sure data is valid except 260$c:
    198-
2 - Save the record
3 - It fails
4 - Apply this patch
5 - Restart all the thigns
6 - Repeat
7 - Success!

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

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

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Nick Clemens 2020-09-23 14:42:40 +00:00 committed by Jonathan Druart
parent 55835ccfaf
commit e1400890ec
2 changed files with 7 additions and 3 deletions

View file

@ -2472,6 +2472,8 @@ sub _adjust_pubyear {
/xms ) { # the form 198-? occurred in Dutch ISBD rules
my $digits = $+{year};
$retval = $digits * ( 10 ** ( 4 - length($digits) ));
} else {
$retval = undef;
}
return $retval;
}

View file

@ -94,7 +94,7 @@ subtest 'Multiple mappings for one kohafield' => sub {
};
subtest 'Testing _adjust_pubyear' => sub {
plan tests => 10;
plan tests => 12;
is( C4::Biblio::_adjust_pubyear('2004 c2000 2007'), 2000, 'First cYEAR' );
is( C4::Biblio::_adjust_pubyear('2004 2000 2007'), 2004, 'First year' );
@ -103,9 +103,11 @@ subtest 'Testing _adjust_pubyear' => sub {
is( C4::Biblio::_adjust_pubyear('197X'), 1970, '197X on its own' );
is( C4::Biblio::_adjust_pubyear('1...'), 1000, '1... on its own' );
is( C4::Biblio::_adjust_pubyear('12?? 13xx'), 1200, '12?? first' );
is( C4::Biblio::_adjust_pubyear('12? 1x'), '12? 1x', 'Too short' );
is( C4::Biblio::_adjust_pubyear('198-'), '198-', 'Missing question mark' );
is( C4::Biblio::_adjust_pubyear('12? 1x'), undef, 'Too short return nothing as data must be int' );
is( C4::Biblio::_adjust_pubyear('198-'), undef, 'Missing question mark, nothing is returned as data must be int' );
is( C4::Biblio::_adjust_pubyear('198-?'), '1980', '198-?' );
is( C4::Biblio::_adjust_pubyear('1981-'), '1981', 'Date range returns first date' );
is( C4::Biblio::_adjust_pubyear('broken'), undef, 'Non-matchign data returns nothing as the field must be int' );
};
subtest 'Test repeatable subfields' => sub {