From ad94da6a8b46ba0cb915a69307810c8a5bcf6749 Mon Sep 17 00:00:00 2001 From: Mitch Jackson Date: Wed, 24 Jan 2018 00:43:57 -0600 Subject: [PATCH] RT# 77144 replace bytes_substr with Unicode::Truncate --- FS/FS/Misc.pm | 26 ++++++++++++++------------ FS/FS/pay_batch/paymentech.pm | 16 +++++++++------- debian/control | 3 ++- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index 66b3dda59..5eb304ad9 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 ); @@ -1007,23 +1006,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 7ddaff258..96a05f003 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); @@ -127,12 +127,14 @@ my %paymentech_countries = map { $_ => 1 } qw( US CA GB UK ); ecpBankAcctType => $paytype{lc($_->cust_main->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 8e92bf6d7..2d463db88 100644 --- a/debian/control +++ b/debian/control @@ -90,7 +90,8 @@ Depends: aspell-en,gnupg,ghostscript,gsfonts,gzip,latex-xcolor, libxml-writer-perl, libio-socket-ssl-perl, libmap-splat-perl, libdatetime-format-ical-perl, librest-client-perl, libbusiness-onlinepayment-perl, - libnet-vitelity-perl (>= 0.05), libnet-sslglue-perl, libexpect-perl + libnet-vitelity-perl (>= 0.05), libnet-sslglue-perl, libexpect-perl, + libunicode-truncate-perl (>= 0.303-1) Suggests: libbusiness-onlinepayment-perl Description: Libraries for Freeside billing and trouble ticketing Freeside is a web-based billing and trouble ticketing application. -- 2.11.0