From 19badb2db47b4f142e76be39d09b5afa95a0c85a Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Wed, 29 Jan 2014 09:37:18 +0200 Subject: [PATCH] Bug 11630: improve parsing of age restriction markers MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This patch makes the parsing of AgeRestrictionMarker values consider the case where the marker is immediately followed by the age, e.g. "K16" in Finland. How I tested: [1] Configure Age Restricition (see Syspref AgeRestrictionMarker) and have a biblio record with e.g. PEGI 99 in age restriction field. [2] Try to check out to a patron with age < 99 [3] Check out should be blocked [4] Change entry in age restriction field to PEGI99 [5] Checkout should be possible [6] Apply patch [7] Checkout schould now be blocked Signed-off-by: Marc Véron Signed-off-by: Jonathan Druart Signed-off-by: Galen Charlton --- C4/Circulation.pm | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 91056e57ad..cddab0a85c 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -982,30 +982,29 @@ sub CanBookBeIssued { if (($markers)&&($bibvalues)) { # Split $bibvalues to something like FSK 16 or PEGI 6 - my @values = split ' ', $bibvalues; + my @values = split ' ', uc($bibvalues); # Search first occurence of one of the markers - my @markers = split /\|/, $markers; + my @markers = split /\|/, uc($markers); my $index = 0; - my $take = -1; + my $restrictionyear = 0; for my $value (@values) { $index ++; for my $marker (@markers) { $marker =~ s/^\s+//; #remove leading spaces $marker =~ s/\s+$//; #remove trailing spaces - if (uc($marker) eq uc($value)) { - $take = $index; + if ($marker eq $value) { + if ($index <= $#values) { + $restrictionyear += $values[$index]; + } + last; + } elsif ($value =~ /^\Q$marker\E(\d+)$/) { + # Perhaps it is something like "K16" (as in Finland) + $restrictionyear += $1; last; } } - if ($take > -1) { - last; - } - } - # Index points to the next value - my $restrictionyear = 0; - if (($take <= $#values) && ($take >= 0)){ - $restrictionyear += $values[$take]; + last if ($restrictionyear > 0); } if ($restrictionyear > 0) { -- 2.39.5