From 13492a9d0bcea9b8cd1ded3e2917b24a2ab228e8 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Sat, 15 Oct 2022 22:09:42 +0200 Subject: [PATCH] Change \MailSo\Base\Utils::Php2js() in improved \RainLoop\Utils::jsonEncode() --- .../0.0.0/app/libraries/MailSo/Base/Utils.php | 39 ------------------- .../0.0.0/app/libraries/RainLoop/Actions.php | 2 +- .../0.0.0/app/libraries/RainLoop/Service.php | 2 +- .../app/libraries/RainLoop/ServiceActions.php | 12 +++--- .../v/0.0.0/app/libraries/RainLoop/Utils.php | 17 ++++++++ .../app/libraries/snappymail/http/stream.php | 2 +- .../app/libraries/snappymail/repository.php | 7 ++-- 7 files changed, 29 insertions(+), 52 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php index 40a03596a..e0ef62a70 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/Utils.php @@ -802,45 +802,6 @@ abstract class Utils return false; } - private static function ClearArrayUtf8Values(array &$aInput) - { - foreach ($aInput as $mKey => $mItem) - { - if (\is_string($mItem)) - { - $aInput[$mKey] = static::Utf8Clear($mItem); - } - else if (\is_array($mItem)) - { - static::ClearArrayUtf8Values($mItem); - $aInput[$mKey] = $mItem; - } - } - } - - /** - * @param mixed $mInput - */ - public static function Php2js($mInput, ?\MailSo\Log\Logger $oLogger = null) : string - { - $sResult = \json_encode($mInput, JSON_UNESCAPED_UNICODE); - if (!\is_string($sResult) || '' === $sResult) { - \trigger_error( - 'json_encode: '.\trim( - (static::FunctionExistsAndEnabled('json_last_error') ? ' [Error Code: '.\json_last_error().']' : ''). - (static::FunctionExistsAndEnabled('json_last_error_msg') ? ' [Error Message: '.\json_last_error_msg().']' : '') - ), E_USER_WARNING - ); - if (\is_array($mInput)) { -// $oLogger->WriteDump($mInput, \LOG_INFO, 'JSON'); -// $oLogger->Write('Trying to clear Utf8 before json_encode', \LOG_INFO, 'JSON'); - static::ClearArrayUtf8Values($mInput); - $sResult = \json_encode($mInput, JSON_UNESCAPED_UNICODE); - } - } - return $sResult; - } - public static function ClearFileName(string $sFileName) : string { return static::Trim(static::ClearNullBite( diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php index 0a75fe9d0..884fe7d4b 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -1052,7 +1052,7 @@ class Actions if ($this->StorageProvider()->Put($oAccount, Providers\Storage\Enumerations\StorageType::CONFIG, 'background', - \json_encode(array( + Utils::jsonEncode(array( 'Name' => $aFile['name'], 'ContentType' => $sMimeType, 'Raw' => \base64_encode($sData) diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Service.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Service.php index e9726da0c..6dfb9646d 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Service.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Service.php @@ -176,7 +176,7 @@ abstract class Service if ($oConfig->Get('labs', 'cache_system_data', true)) { $sCacheFileName = 'TMPL:' . $sLanguage . \md5( - \json_encode(array( + Utils::jsonEncode(array( $oConfig->Get('cache', 'index', ''), $oActions->Plugins()->Hash(), $sAppJsMin, diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/ServiceActions.php b/snappymail/v/0.0.0/app/libraries/RainLoop/ServiceActions.php index 17718b54b..94911fa17 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/ServiceActions.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/ServiceActions.php @@ -138,7 +138,7 @@ class ServiceActions break; } */ - $this->Logger()->Write(\MailSo\Base\Utils::Php2js($aPost, $this->Logger()), + $this->Logger()->Write(Utils::jsonEncode($aPost), \LOG_INFO, 'POST', true); } else if (3 < \count($this->aPaths) && $this->oHttp->IsGet()) @@ -190,7 +190,7 @@ class ServiceActions \header('Content-Type: application/json; charset=utf-8'); } - $sResult = \MailSo\Base\Utils::Php2js($aResponseItem, $this->Logger()); + $sResult = Utils::jsonEncode($aResponseItem); $sObResult = \ob_get_clean(); @@ -317,7 +317,7 @@ class ServiceActions \header('Content-Type: application/json; charset=utf-8'); $this->Plugins()->RunHook('filter.upload-response', array(&$aResponseItem)); - $sResult = \MailSo\Base\Utils::Php2js($aResponseItem, $this->Logger()); + $sResult = Utils::jsonEncode($aResponseItem); $sObResult = \ob_get_clean(); if (\strlen($sObResult)) @@ -593,7 +593,7 @@ class ServiceActions } } - return $bJson ? \MailSo\Base\Utils::Php2js(array($sTheme, $sResult), $this->Logger()) : $sResult; + return $bJson ? Utils::jsonEncode(array($sTheme, $sResult)) : $sResult; } public function ServiceAppData() : string @@ -804,7 +804,7 @@ class ServiceActions } } - return \MailSo\Base\Utils::Php2js($aResult, $this->Logger()); + return Utils::jsonEncode($aResult); } $this->oActions->Location('./'); @@ -838,7 +838,7 @@ class ServiceActions $this->oHttp->ServerNoCache(); $sResult = 'rl.initData(' - .\json_encode($this->oActions->AppData($bAdmin)) + .Utils::jsonEncode($this->oActions->AppData($bAdmin)) .');'; $this->Logger()->Write($sResult, \LOG_INFO, 'APPDATA'); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Utils.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Utils.php index e880ff71b..fb16286fa 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Utils.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Utils.php @@ -23,6 +23,23 @@ class Utils */ SESSION_TOKEN = 'smsession'; + /** + * @param mixed $value + * @param int $flags Bitmask + */ + public static function jsonEncode($value, int $flags = \JSON_INVALID_UTF8_SUBSTITUTE) : string + { + try { + if (Api::Config()->Get('debug', 'enable', false)) { + $flags |= \JSON_PRETTY_PRINT; + } + return \json_encode($value, $flags | \JSON_UNESCAPED_UNICODE | \JSON_THROW_ON_ERROR); + } catch (\Throwable $e) { + Api::Logger()->WriteException($e, \LOG_ERR, 'JSON'); + } + return ''; + } + public static function EncodeKeyValuesQ(array $aValues, string $sCustomKey = '') : string { return \SnappyMail\Crypt::EncryptUrlSafe( diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/http/stream.php b/snappymail/v/0.0.0/app/libraries/snappymail/http/stream.php index 0d827f360..b01b9beba 100644 --- a/snappymail/v/0.0.0/app/libraries/snappymail/http/stream.php +++ b/snappymail/v/0.0.0/app/libraries/snappymail/http/stream.php @@ -41,7 +41,7 @@ abstract class Stream public static function JSON($data) { - echo \MailSo\Base\Utils::Php2js($data) . "\n"; + echo \RainLoop\Utils::jsonEncode($data) . "\n"; // \ob_flush(); \flush(); } diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/repository.php b/snappymail/v/0.0.0/app/libraries/snappymail/repository.php index 8560fc0a4..432f5a8f4 100644 --- a/snappymail/v/0.0.0/app/libraries/snappymail/repository.php +++ b/snappymail/v/0.0.0/app/libraries/snappymail/repository.php @@ -142,8 +142,7 @@ abstract class Repository } } } catch (\Throwable $e) { - $sError = "{$e->getCode()} {$e->getMessage()}"; - \RainLoop\Api::Logger()->Write($sError, \LOG_ERR, 'INSTALLER'); + \SnappyMail\Log::error('INSTALLER', "{$e->getCode()} {$e->getMessage()}"); } return $aResult; } @@ -246,7 +245,7 @@ abstract class Repository { empty($_ENV['SNAPPYMAIL_INCLUDE_AS_API']) && \RainLoop\Api::Actions()->IsAdminLoggined(); - \RainLoop\Api::Logger()->Write('Start package install: '.$sId.' ('.$sType.')', \LOG_INFO, 'INSTALLER'); + \SnappyMail\Log::info('INSTALLER', 'Start package install: '.$sId.' ('.$sType.')'); $sRealFile = ''; @@ -281,7 +280,7 @@ abstract class Repository } } } catch (\Throwable $e) { - \RainLoop\Api::Logger()->Write("Install package {$sRealFile} failed: {$e->getMessage()}", \LOG_ERR, 'INSTALLER'); + \SnappyMail\Log::error('INSTALLER', "Install package {$sRealFile} failed: {$e->getMessage()}"); throw $e; } finally { $sTmp && \unlink($sTmp);