summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitch Jackson <mitch@freeside.biz>2018-01-24 00:43:57 -0600
committerMitch Jackson <mitch@freeside.biz>2018-03-01 02:57:29 +0000
commitd476d0554f9a995a983edb014a0d7fe350e8c6ab (patch)
tree15b88c56ce186cc86fdcfacabb9fb7f8dd25057e
parent6a11197ad8040edeace3132ff40670073d5557f7 (diff)
RT# 77144 replace bytes_substr with Unicode::Truncate
-rw-r--r--FS/FS/Misc.pm26
-rw-r--r--FS/FS/pay_batch/paymentech.pm16
-rw-r--r--debian/control2
3 files changed, 24 insertions, 20 deletions
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm
index 669c44e..d84aace 100644
--- a/FS/FS/Misc.pm
+++ b/FS/FS/Misc.pm
@@ -22,7 +22,6 @@ use Encode;
generate_ps generate_pdf do_print
csv_from_fixed
ocr_image
- bytes_substr
money_pretty
);
@@ -982,23 +981,26 @@ sub ocr_image {
=item bytes_substr STRING, OFFSET[, LENGTH[, REPLACEMENT] ]
+DEPRECATED
+ Use Unicode::Truncate truncate_egc instead
+
A replacement for "substr" that counts raw bytes rather than logical
characters. Unlike "bytes::substr", will suppress fragmented UTF-8 characters
rather than output them. Unlike real "substr", is not an lvalue.
=cut
-sub bytes_substr {
- my ($string, $offset, $length, $repl) = @_;
- my $bytes = substr(
- Encode::encode('utf8', $string),
- $offset,
- $length,
- Encode::encode('utf8', $repl)
- );
- my $chk = $DEBUG ? Encode::FB_WARN : Encode::FB_QUIET;
- return Encode::decode('utf8', $bytes, $chk);
-}
+# sub bytes_substr {
+# my ($string, $offset, $length, $repl) = @_;
+# my $bytes = substr(
+# Encode::encode('utf8', $string),
+# $offset,
+# $length,
+# Encode::encode('utf8', $repl)
+# );
+# my $chk = $DEBUG ? Encode::FB_WARN : Encode::FB_QUIET;
+# return Encode::decode('utf8', $bytes, $chk);
+# }
=item money_pretty
diff --git a/FS/FS/pay_batch/paymentech.pm b/FS/FS/pay_batch/paymentech.pm
index 3cf3134..bb2c258 100644
--- a/FS/FS/pay_batch/paymentech.pm
+++ b/FS/FS/pay_batch/paymentech.pm
@@ -8,7 +8,7 @@ use Date::Format 'time2str';
use Date::Parse 'str2time';
use Tie::IxHash;
use FS::Conf;
-use FS::Misc 'bytes_substr';
+use Unicode::Truncate 'truncate_egc';
my $conf;
my ($bin, $merchantID, $terminalID, $username, $password, $with_recurringInd);
@@ -131,12 +131,14 @@ my %paymentech_countries = map { $_ => 1 } qw( US CA GB UK );
ecpBankAcctType => $paytype{lc($_->paytype)},
ecpDelvMethod => 'A',
),
- avsZip => bytes_substr($_->zip, 0, 10),
- avsAddress1 => bytes_substr($_->address1, 0, 30),
- avsAddress2 => bytes_substr($_->address2, 0, 30),
- avsCity => bytes_substr($_->city, 0, 20),
- avsState => bytes_substr($_->state, 0, 2),
- avsName => bytes_substr($_->first. ' '. $_->last, 0, 30),
+ # truncate_egc will die() on empty string
+ avsZip => $_->zip ? truncate_egc($_->zip, 10) : undef,
+ avsAddress1 => $_->address1 ? truncate_egc($_->address1, 30) : undef,
+ avsAddress2 => $_->address2 ? truncate_egc($_->address2, 30) : undef,
+ avsCity => $_->city ? truncate_egc($_->city, 20) : undef,
+ avsState => $_->state ? truncate_egc($_->state, 2) : undef,
+ avsName => ($_->first || $_->last)
+ ? truncate_egc($_->first. ' '. $_->last, 30) : undef,
( $paymentech_countries{ $_->country }
? ( avsCountryCode => $_->country )
: ()
diff --git a/debian/control b/debian/control
index 47f0210..82a84eb 100644
--- a/debian/control
+++ b/debian/control
@@ -101,7 +101,7 @@ Depends: aspell-en,gnupg,ghostscript,gsfonts,gzip,latex-xcolor,
libmap-splat-perl, libdatetime-format-ical-perl, librest-client-perl,
libgeo-streetaddress-us-perl, libbusiness-onlinepayment-perl,
libnet-vitelity-perl (>= 0.05), libnet-sslglue-perl, libexpect-perl,
- libspreadsheet-parsexlsx-perl
+ libspreadsheet-parsexlsx-perl, libunicode-truncate-perl (>= 0.303-1)
Conflicts: libparams-classify-perl (>= 0.013-6)
Replaces: freeside (<<4)
Breaks: freeside (<<4)