From e4c83341065c13ed1e7f90b249f5ed46e6736132 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 12 Dec 2013 10:42:46 +0100 Subject: [PATCH] Bug 10861: Reintroduced the cardnumber length check (client side) Previous patches has removed the pattern attribute of the input, it was not needed. This patch reintroduces it. It will only work for new browser version. Moreover, it manages with the ',XX' format (see UT). --- C4/Members.pm | 12 +++++++----- .../prog/en/modules/members/memberentrygen.tt | 8 +++++++- t/Members/cardnumber.t | 13 +++++++++++-- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index b26ed63..9cfb72d 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -1352,16 +1352,18 @@ sub checkcardnumber { } sub get_cardnumber_length { - my ( $min, $max ) = ( 0, 16 ); + my ( $min, $max ) = ( 1, 16 ); # borrowers.cardnumber is a varchar(16) if ( my $cardnumber_length = C4::Context->preference('CardnumberLength') ) { # Is integer and length match if ( $cardnumber_length =~ m|^\d+$| ) { - $min = $max = $cardnumber_length; + $min = $max = $cardnumber_length + if $cardnumber_length >= $min + and $cardnumber_length <= $max; } # Else assuming it is a range - elsif ( $cardnumber_length =~ m|(\d+),(\d*)| ) { - $min = $1; - $max = $2 || 16; # borrowers.cardnumber is a varchar(16) + elsif ( $cardnumber_length =~ m|(\d*),(\d*)| ) { + $min = $1 if $1 and $min < $1; + $max = $2 if $2 and $max > $2; } } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt index cda4e9c..1769886 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt @@ -863,7 +863,13 @@ - + [% IF minlength_cardnumber == maxlength_cardnumber %] + + [% ELSIF minlength_cardnumber && maxlength_cardnumber %] + + [% ELSE %] + + [% END %] [% IF ( mandatorycardnumber ) %]Required[% END %] [% END %] diff --git a/t/Members/cardnumber.t b/t/Members/cardnumber.t index 2fe606c..8132c93 100644 --- a/t/Members/cardnumber.t +++ b/t/Members/cardnumber.t @@ -1,7 +1,7 @@ #!/usr/bin/env perl use Modern::Perl; -use Test::More tests =>18; +use Test::More tests => 22; use Test::MockModule; use DBD::Mock; @@ -61,8 +61,17 @@ is( C4::Members::checkcardnumber( q{1234567} ), 2, "1234567 is shorter than $pre $dbh->{mock_add_resultset} = $rs; is( C4::Members::checkcardnumber( q{1234567890123456} ), 0, "1234567890123456 matches $pref"); $dbh->{mock_add_resultset} = $rs; -is( C4::Members::checkcardnumber( q{1234567890} ), 0, "12345678 matches $pref"); +is( C4::Members::checkcardnumber( q{1234567890} ), 0, "1234567890 matches $pref"); +$pref = q|,8|; # max 8 chars +set_pref( $module_context, $pref ); +is_deeply( [ C4::Members::get_cardnumber_length() ], [ 1, 8 ], ',8 => min=1 and max=8'); +$dbh->{mock_add_resultset} = $rs; +is( C4::Members::checkcardnumber( q{1234567} ), 0, "1234567 matches $pref"); +$dbh->{mock_add_resultset} = $rs; +is( C4::Members::checkcardnumber( q{1234567890123456} ), 2, "1234567890123456 is longer than $pref"); +$dbh->{mock_add_resultset} = $rs; +is( C4::Members::checkcardnumber( q{1234567890} ), 2, "1234567890 is longer than $pref"); sub set_pref { -- 1.7.10.4