From a0bf5ae3f8a8faa2e262077747cc3320e0724b2a Mon Sep 17 00:00:00 2001
From: Aleisha Amohia <aleishaamohia@hotmail.com>
Date: Fri, 25 Mar 2022 03:12:31 +0000
Subject: [PATCH] Bug 30358: Strip leading/trailing whitespace characters from
 input fields when cataloguing

WIP
---
 C4/Biblio.pm                                                 | 11 +++++++++++
 .../bug_30358_-_add_StripWhitespaceChars_syspref.pl          | 12 ++++++++++++
 installer/data/mysql/mandatory/sysprefs.sql                  |  1 +
 .../prog/en/modules/admin/preferences/cataloguing.pref       |  6 ++++++
 4 files changed, 30 insertions(+)
 create mode 100644 installer/data/mysql/atomicupdate/bug_30358_-_add_StripWhitespaceChars_syspref.pl

diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index c4de6b064d..e2e38d970a 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -2892,6 +2892,17 @@ sub ModBiblioMarc {
       $f005->update(sprintf("%4d%02d%02d%02d%02d%04.1f",@a)) if $f005;
     }
 
+    if ( C4::Context->preference('StripWhitespaceChars') ) {
+        foreach my $field ( $record->fields ) {
+            foreach my $subfield ( $field->subfields ) {
+                my $key = $subfield->[0];
+                my $value = $subfield->[1];
+                $value =~ s/^\s+|\s+$|\n+$|\r+$|\t+$//g;
+                $field->update( $key => $value );
+            }
+        }
+    }
+
     my $metadata = {
         biblionumber => $biblionumber,
         format       => 'marcxml',
diff --git a/installer/data/mysql/atomicupdate/bug_30358_-_add_StripWhitespaceChars_syspref.pl b/installer/data/mysql/atomicupdate/bug_30358_-_add_StripWhitespaceChars_syspref.pl
new file mode 100644
index 0000000000..80957d8145
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_30358_-_add_StripWhitespaceChars_syspref.pl
@@ -0,0 +1,12 @@
+use Modern::Perl;
+
+return {
+    bug_number => "30358",
+    description => "Add new system preference StripWhitespaceChars",
+    up => sub {
+        my ($args) = @_;
+        my ($dbh, $out) = @$args{qw(dbh out)};
+
+        $dbh->do(q{INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('StripWhitespaceChars', '0', NULL, 'Strip leading and trailing whitespace characters from input fields when cataloguing bibliographic and authority records.', 'YesNo') });
+    },
+};
diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql
index deaf6b6fc2..e476f23535 100644
--- a/installer/data/mysql/mandatory/sysprefs.sql
+++ b/installer/data/mysql/mandatory/sysprefs.sql
@@ -642,6 +642,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
 ('StatisticsFields','location|itype|ccode', NULL, 'Define Fields (from the items table) used for statistics members','Free'),
 ('StockRotation','0',NULL,'If ON, enables the stock rotation module','YesNo'),
 ('StoreLastBorrower','0','','If ON, the last borrower to return an item will be stored in items.last_returned_by','YesNo'),
+('StripWhitespaceChars','0',NULL,'Strip leading and trailing whitespace characters from input fields when cataloguing bibliographic and authority records.','YesNo'),
 ('SubfieldsToAllowForRestrictedBatchmod','','Define a list of subfields for which edition is authorized when items_batchmod_restricted permission is enabled, separated by spaces. Example: 995\$f 995\$h 995\$j',NULL,'Free'),
 ('SubfieldsToAllowForRestrictedEditing','','Define a list of subfields for which edition is authorized when edit_items_restricted permission is enabled, separated by spaces. Example: 995\$f 995\$h 995\$j',NULL,'Free'),
 ('SubfieldsToUseWhenPrefill','','','Define a list of subfields to use when prefilling items (separated by space)','Free'),
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref
index 86840eff5a..f1d7218177 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref
@@ -165,6 +165,12 @@ Cataloging:
             - and record's last modifier name in MARC subfield
             - pref: MarcFieldForModifierName
             - ". <br/><strong>NOTE:</strong> Use a dollar sign between field and subfield like 123$a."
+        -
+            - pref: StripWhitespaceChars
+              choices:
+                  1: Strip
+                  0: "Don't strip"
+            - leading and trailing whitespace characters from input fields when cataloguing bibliographic and authority records.
     Display:
         -
             - 'Separate main entry and subdivisions with '
-- 
2.11.0