From 59d3e2848975a39830077f752be46c2d406e9791 Mon Sep 17 00:00:00 2001 From: osaajani <> Date: Mon, 6 Feb 2023 20:18:35 +0100 Subject: [PATCH] Add a setting to force gsm alphabet conversion --- composer.json | 5 ++--- controllers/internals/Scheduled.php | 5 +++++ controllers/internals/Tool.php | 15 +++++++++++++++ controllers/publics/Templating.php | 6 ++++++ env.php.dist | 1 + templates/setting/show.php | 19 +++++++++++++++++++ 6 files changed, 48 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 935f689..403cedf 100644 --- a/composer.json +++ b/composer.json @@ -14,8 +14,7 @@ "symfony/yaml": "^5.0", "phpmailer/phpmailer": "^6.1", "xantios/mimey": ">=2.1", - "kreait/firebase-php": "^5.14" - }, - "require-dev": { + "kreait/firebase-php": "^5.14", + "benmorel/gsm-charset-converter": "^0.3.0" } } diff --git a/controllers/internals/Scheduled.php b/controllers/internals/Scheduled.php index b31e7bd..a89f38e 100644 --- a/controllers/internals/Scheduled.php +++ b/controllers/internals/Scheduled.php @@ -601,6 +601,11 @@ use Monolog\Logger; continue; } + // If we must force GSM 7 alphabet + if ((int) ($users_settings[$id_user]['force_gsm_alphabet'] ?? false)) + { + $text = Tool::convert_to_gsm0338($text); + } /* Choose phone if no phone defined for message diff --git a/controllers/internals/Tool.php b/controllers/internals/Tool.php index fef0375..a09fab6 100644 --- a/controllers/internals/Tool.php +++ b/controllers/internals/Tool.php @@ -11,6 +11,8 @@ namespace controllers\internals; +use BenMorel\GsmCharsetConverter\Converter; + /** * Some tools frequently used. * Not a standard controller as it's not linked to a model in any way. @@ -412,4 +414,17 @@ namespace controllers\internals; return "{$scheme}{$user}{$pass}{$host}{$port}{$path}{$query}{$fragment}"; } + + + /** + * Transform an UTF-8 string into a valid GSM 7 string (GSM 03.38), remplacing invalid chars with best equivalent whenever possible + * + * @param string $text : Input text to convert into gsm string + * @return string : An UTF-8 string with GSM alphabet only + */ + public static function convert_to_gsm0338(string $text): string + { + $converter = new Converter(); + return $converter->cleanUpUtf8String($text, true, '?'); + } } diff --git a/controllers/publics/Templating.php b/controllers/publics/Templating.php index 026622e..a667ee7 100644 --- a/controllers/publics/Templating.php +++ b/controllers/publics/Templating.php @@ -83,6 +83,12 @@ namespace controllers\publics; $result = $this->internal_templating->render($template, $data); $return = $result; + // If we must force GSM 7 alphabet + if ((int) ($_SESSION['user']['settings']['force_gsm_alphabet'] ?? false)) + { + $return['result'] = \controllers\internals\Tool::convert_to_gsm0338($return['result']); + } + if (!trim($result['result'])) { $return['result'] = 'Message vide, il ne sera pas envoyé.'; diff --git a/env.php.dist b/env.php.dist index 8f7091b..c544ba0 100644 --- a/env.php.dist +++ b/env.php.dist @@ -82,6 +82,7 @@ 'alert_quota_limit_reached' => 1, 'alert_quota_limit_close' => 0.9, 'hide_menus' => '', + 'force_gsm_alphabet' => 0, ], ]; diff --git a/templates/setting/show.php b/templates/setting/show.php index 7a6325a..afe8cff 100644 --- a/templates/setting/show.php +++ b/templates/setting/show.php @@ -54,6 +54,25 @@ +
+
+

Alphabet SMS optimisé

+
+
+
+
+ + +
+
+ +
+
+
+

Support des MMS