[Koha-patches] [PATCH] Bug 10996 Allow numeric subfields to be stripped on export

Colin Campbell colin.campbell at ptfs-europe.com
Fri Oct 4 12:49:03 CEST 2013


Regex assumed all numeric characters were part of the tag number
This is obviously false as $9 would be a likely candidate
to be removed on export. Constrain the tag by length

The code can be any printing ascii character other than space
according to LoC's website

Also changed regexp to no longer allow a zero length tag number
which is nonsensical.
The old regex would accept shorter than 3 digit tags but these were
not stripped so I've removed that option considering it a bug
not a feature

NB assumption that the code makes that a tag is always numeric is
incorrect but works in practice. Handling non-numeric tags is
a 'To be done'

Made code dependent on the regex succeeding. Picking up results
from a previous regex on failure can lead to weird hard to
identify bugs
---
 tools/export.pl | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/tools/export.pl b/tools/export.pl
index 40c3b9b..a9e54ec 100755
--- a/tools/export.pl
+++ b/tools/export.pl
@@ -360,17 +360,19 @@ if ( $op eq "export" ) {
                 if ($export_remove_fields) {
                     my @fields = split " ", $export_remove_fields;
                     foreach (@fields) {
-                        /^(\d*)(\w)?$/;
-                        my $field    = $1;
-                        my $subfield = $2;
-
-                        # skip if this record doesn't have this field
-                        next if not defined $record->field($field);
-                        if ($subfield) {
-                            $record->field($field)->delete_subfields($subfield);
-                        }
-                        else {
-                            $record->delete_field( $record->field($field) );
+                        if (/^(\d{3})(.)?$/) {
+                            my $field    = $1;
+                            my $subfield = $2;
+
+                            # skip if this record doesn't have this field
+                            next if not defined $record->field($field);
+                            if ($subfield) {
+                                $record->field($field)
+                                  ->delete_subfields($subfield);
+                            }
+                            else {
+                                $record->delete_field( $record->field($field) );
+                            }
                         }
                     }
                 }
-- 
1.8.3.1



More information about the Koha-patches mailing list