diff --git a/4dev/tests/CoreLibsDBIOTest.php b/4dev/tests/CoreLibsDBIOTest.php index 66d77975..cf80906d 100644 --- a/4dev/tests/CoreLibsDBIOTest.php +++ b/4dev/tests/CoreLibsDBIOTest.php @@ -2709,7 +2709,8 @@ final class CoreLibsDBIOTest extends TestCase // comarep all, except timestamp that is a regex foreach ($expected_history as $key => $value) { // check if starts with / because this is regex (timestamp) - if (strpos($value, "/") === 0) { + // if (substr($expected_2, 0, 1) == '/) { + if (strpos($value, '/') === 0) { // this is regex $this->assertMatchesRegularExpression( $value, diff --git a/4dev/tests/CoreLibsGetSystemTest.php b/4dev/tests/CoreLibsGetSystemTest.php index db604309..26ea383a 100644 --- a/4dev/tests/CoreLibsGetSystemTest.php +++ b/4dev/tests/CoreLibsGetSystemTest.php @@ -90,11 +90,16 @@ final class CoreLibsGetSystemTest extends TestCase public function getPageNameProvider(): array { return [ + // 0: input + // 1: expected default/WITH_EXTENSION + // 2: expected NO_EXTENSION + // 3: expected FULL_PATH, if first and last character are / use regex 'original set' => [ - 0 => null, // input + 0 => null, 1 => 'phpunit', 2 => 'phpunit', - 3 => 'www/vendor/bin/phpunit', // NOTE: this can change + // NOTE: this can change, so it is a regex check + 3 => "/^(\/?.*\/?)?www\/vendor\/bin\/phpunit$/", ], 'some path with extension' => [ 0 => '/some/path/to/file.txt', @@ -147,11 +152,13 @@ final class CoreLibsGetSystemTest extends TestCase list ($host, $port) = \CoreLibs\Get\System::getHostName(); $this->assertEquals( $expected_host, - $host + $host, + 'failed expected host assert' ); $this->assertEquals( $expected_port, - $port + $port, + 'faile expected port assert' ); } @@ -176,20 +183,38 @@ final class CoreLibsGetSystemTest extends TestCase // default 0, $this->assertEquals( $expected_0, - \CoreLibs\Get\System::getPageName() + \CoreLibs\Get\System::getPageName(), + 'failed default assert' ); $this->assertEquals( $expected_0, - \CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::WITH_EXTENSION) + \CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::WITH_EXTENSION), + 'failed WITH_EXTESION assert' ); $this->assertEquals( $expected_1, - \CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::NO_EXTENSION) - ); - $this->assertEquals( - $expected_2, - \CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::FULL_PATH) + \CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::NO_EXTENSION), + 'failed NO_EXTENSION assert' ); + // FULL PATH check can be equals or regex + $page_name_full_path = \CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::FULL_PATH); + if ( + substr($expected_2, 0, 1) == '/' && + substr($expected_2, -1, 1) == '/' + ) { + // this is regex + $this->assertMatchesRegularExpression( + $expected_2, + $page_name_full_path, + 'failed FULL_PATH assert regex' + ); + } else { + $this->assertEquals( + $expected_2, + $page_name_full_path, + 'failed FULL_PATH assert equals' + ); + } } } diff --git a/4dev/tests/CoreLibsLanguageL10nTest.php b/4dev/tests/CoreLibsLanguageL10nTest.php index 1b77751f..fa85cce3 100644 --- a/4dev/tests/CoreLibsLanguageL10nTest.php +++ b/4dev/tests/CoreLibsLanguageL10nTest.php @@ -994,10 +994,10 @@ final class CoreLibsLanguageL10nTest extends TestCase string $translated ): void { \CoreLibs\Language\L10n::loadFunctions(); - __setlocale(LC_MESSAGES, $locale); - __textdomain($domain); - __bindtextdomain($domain, $path); - __bind_textdomain_codeset($domain, $encoding); + _setlocale(LC_MESSAGES, $locale); + _textdomain($domain); + _bindtextdomain($domain, $path); + _bind_textdomain_codeset($domain, $encoding); $this->assertEquals( $translated, __($original), @@ -1005,7 +1005,7 @@ final class CoreLibsLanguageL10nTest extends TestCase ); $this->assertEquals( $translated, - __gettext($original), + _gettext($original), 'function gettext assert failed' ); } diff --git a/www/admin/class_test.lang.php b/www/admin/class_test.lang.php index 9aec8c54..0dd599e8 100644 --- a/www/admin/class_test.lang.php +++ b/www/admin/class_test.lang.php @@ -138,6 +138,7 @@ echo "LOAD ERROR: " . $l->getLoadError() . "
"; echo "INPUT TEST: " . $string . " => " . $l->__($string) . "
"; echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "
"; +$lang = 'en'; $domain = 'admin'; echo "
STATIC TYPE TEST
"; // static tests from l10n_load @@ -154,17 +155,17 @@ echo "
FUNCTIONS
"; // real statisc test L10n::loadFunctions(); $locale = 'ja'; -__setlocale(LC_MESSAGES, $locale); -__textdomain($domain); -__bindtextdomain($domain, $path); -__bind_textdomain_codeset($domain, $encoding); +_setlocale(LC_MESSAGES, $locale); +_textdomain($domain); +_bindtextdomain($domain, $path); +_bind_textdomain_codeset($domain, $encoding); echo "INPUT TEST $locale: " . $string . " => " . __($string) . "
"; $locale = 'en_US.UTF-8'; -__setlocale(LC_MESSAGES, $locale); -__textdomain($domain); -__bindtextdomain($domain, $path); -__bind_textdomain_codeset($domain, $encoding); +_setlocale(LC_MESSAGES, $locale); +_textdomain($domain); +_bindtextdomain($domain, $path); +_bind_textdomain_codeset($domain, $encoding); echo "INPUT TEST $locale: " . $string . " => " . __($string) . "
"; print ""; diff --git a/www/admin/class_test.smarty.php b/www/admin/class_test.smarty.php index f390d37e..eae993aa 100644 --- a/www/admin/class_test.smarty.php +++ b/www/admin/class_test.smarty.php @@ -74,7 +74,7 @@ $smarty->setSmartyPaths(); // smarty test $smarty->DATA['SMARTY_TEST'] = 'Test Data'; $smarty->DATA['TRANSLATE_TEST'] = $l10n->__('Are we translated?'); -$smarty->DATA['TRANSLATE_TEST_FUNCTION'] = __gettext('Are we translated?'); +$smarty->DATA['TRANSLATE_TEST_FUNCTION'] = _gettext('Are we translated?'); $smarty->DATA['TRANSLATE_TEST_SMARTY'] = $smarty->l10n->__('Are we translated?'); $smarty->DATA['replace'] = 'Replaced'; // variable variables diff --git a/www/lib/CoreLibs/Language/L10n.php b/www/lib/CoreLibs/Language/L10n.php index a86065bc..7303f0fc 100644 --- a/www/lib/CoreLibs/Language/L10n.php +++ b/www/lib/CoreLibs/Language/L10n.php @@ -14,7 +14,7 @@ * __ : returns string (translated or original if not found) * __n : plural string * __p : string with context -* __pb: string with context and plural +* __np: string with context and plural * * HISTORY: * 2022/4/15 (cs) drop all old folder layout support, new folder base diff --git a/www/lib/CoreLibs/Language/l10n_functions.php b/www/lib/CoreLibs/Language/l10n_functions.php index 93a3188c..83480afe 100644 --- a/www/lib/CoreLibs/Language/l10n_functions.php +++ b/www/lib/CoreLibs/Language/l10n_functions.php @@ -1,8 +1,16 @@ setLocale +* bindtextdomain -> setTextDomain +* textdomain -> setDomain +*********************************************************************/ + declare(strict_types=1); -use CoreLibs\Language\L10n; +use CoreLibs\Language\L10n as Loader; /** * Sets a requested locale. @@ -12,9 +20,9 @@ use CoreLibs\Language\L10n; * * @return string Set or current locale */ -function __setlocale(int $category, string $locale): string +function _setlocale(int $category, string $locale): string { - return L10n::getInstance()->setLocale($locale); + return Loader::getInstance()->setLocale($locale); } /** @@ -23,9 +31,9 @@ function __setlocale(int $category, string $locale): string * @param string $domain Domain name * @param string $path Path where to find locales */ -function __bindtextdomain(string $domain, string $path): void +function _bindtextdomain(string $domain, string $path): void { - L10n::getInstance()->setTextDomain($domain, $path); + Loader::getInstance()->setTextDomain($domain, $path); } /** @@ -39,7 +47,7 @@ function __bindtextdomain(string $domain, string $path): void * @param string $domain Domain where to set character set * @param string $codeset Character set to set */ -function __bind_textdomain_codeset(string $domain, string $codeset): void +function _bind_textdomain_codeset(string $domain, string $codeset): void { } @@ -48,9 +56,9 @@ function __bind_textdomain_codeset(string $domain, string $codeset): void * * @param string $domain Domain name */ -function __textdomain(string $domain): void +function _textdomain(string $domain): void { - L10n::getInstance()->setDomain($domain); + Loader::getInstance()->setDomain($domain); } /** @@ -60,9 +68,9 @@ function __textdomain(string $domain): void * * @return string translated string (or original, if not found) */ -function __gettext(string $msgid): string +function _gettext(string $msgid): string { - return L10n::getInstance()->getTranslator()->gettext( + return Loader::getInstance()->getTranslator()->gettext( $msgid ); } @@ -76,7 +84,7 @@ function __gettext(string $msgid): string */ function __(string $msgid): string { - return L10n::getInstance()->getTranslator()->gettext( + return Loader::getInstance()->getTranslator()->gettext( $msgid ); } @@ -90,9 +98,9 @@ function __(string $msgid): string * * @return string translated plural form */ -function __ngettext(string $msgid, string $msgidPlural, int $number): string +function _ngettext(string $msgid, string $msgidPlural, int $number): string { - return L10n::getInstance()->getTranslator()->ngettext( + return Loader::getInstance()->getTranslator()->ngettext( $msgid, $msgidPlural, $number @@ -107,9 +115,9 @@ function __ngettext(string $msgid, string $msgidPlural, int $number): string * * @return string translated plural form */ -function __pgettext(string $msgctxt, string $msgid): string +function _pgettext(string $msgctxt, string $msgid): string { - return L10n::getInstance()->getTranslator()->pgettext( + return Loader::getInstance()->getTranslator()->pgettext( $msgctxt, $msgid ); @@ -125,9 +133,9 @@ function __pgettext(string $msgctxt, string $msgid): string * * @return string translated plural form */ -function __npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $number): string +function _npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $number): string { - return L10n::getInstance()->getTranslator()->npgettext( + return Loader::getInstance()->getTranslator()->npgettext( $msgctxt, $msgid, $msgidPlural, @@ -143,9 +151,9 @@ function __npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $n * * @return string translated string (or original, if not found) */ -function __dgettext(string $domain, string $msgid): string +function _dgettext(string $domain, string $msgid): string { - return L10n::getInstance()->getTranslator('', '', $domain)->gettext( + return Loader::getInstance()->getTranslator('', '', $domain)->gettext( $msgid ); } @@ -160,9 +168,9 @@ function __dgettext(string $domain, string $msgid): string * * @return string translated plural form */ -function __dngettext(string $domain, string $msgid, string $msgidPlural, int $number): string +function _dngettext(string $domain, string $msgid, string $msgidPlural, int $number): string { - return L10n::getInstance()->getTranslator('', '', $domain)->ngettext( + return Loader::getInstance()->getTranslator('', '', $domain)->ngettext( $msgid, $msgidPlural, $number @@ -178,9 +186,9 @@ function __dngettext(string $domain, string $msgid, string $msgidPlural, int $nu * * @return string translated plural form */ -function __dpgettext(string $domain, string $msgctxt, string $msgid): string +function _dpgettext(string $domain, string $msgctxt, string $msgid): string { - return L10n::getInstance()->getTranslator('', '', $domain)->pgettext( + return Loader::getInstance()->getTranslator('', '', $domain)->pgettext( $msgctxt, $msgid ); @@ -197,9 +205,9 @@ function __dpgettext(string $domain, string $msgctxt, string $msgid): string * * @return string translated plural form */ -function __dnpgettext(string $domain, string $msgctxt, string $msgid, string $msgidPlural, int $number): string +function _dnpgettext(string $domain, string $msgctxt, string $msgid, string $msgidPlural, int $number): string { - return L10n::getInstance()->getTranslator('', '', $domain)->npgettext( + return Loader::getInstance()->getTranslator('', '', $domain)->npgettext( $msgctxt, $msgid, $msgidPlural, diff --git a/www/lib/CoreLibs/Template/SmartyExtend.php b/www/lib/CoreLibs/Template/SmartyExtend.php index 8497b005..af2de46f 100644 --- a/www/lib/CoreLibs/Template/SmartyExtend.php +++ b/www/lib/CoreLibs/Template/SmartyExtend.php @@ -173,11 +173,11 @@ class SmartyExtend extends \Smarty $this->lang_dir = $this->l10n->getBaseLocalePath(); // opt load functions so we can use legacy init for smarty run perhaps - $this->l10n->loadFunctions(); - __setlocale(LC_MESSAGES, $locale['locale']); - __textdomain($this->domain); - __bindtextdomain($this->domain, $this->lang_dir); - __bind_textdomain_codeset($this->domain, $this->encoding); + \CoreLibs\Language\L10n::loadFunctions(); + _setlocale(LC_MESSAGES, $locale['locale']); + _textdomain($this->domain); + _bindtextdomain($this->domain, $this->lang_dir); + _bind_textdomain_codeset($this->domain, $this->encoding); // register smarty variable $this->registerPlugin('modifier', 'getvar', [&$this, 'getTemplateVars']); diff --git a/www/lib/smarty-4.1.0/libs/plugins/block.t.php b/www/lib/smarty-4.1.0/libs/plugins/block.t.php index 8cba787c..0bc1a7d6 100644 --- a/www/lib/smarty-4.1.0/libs/plugins/block.t.php +++ b/www/lib/smarty-4.1.0/libs/plugins/block.t.php @@ -3,30 +3,19 @@ /** * smarty-gettext.php - Gettext support for smarty * - * ------------------------------------------------------------------------- * - * This library is free software; you can redistribute it and/or * - * modify it under the terms of the GNU Lesser General Public * - * License as published by the Free Software Foundation; either * - * version 2.1 of the License, or (at your option) any later version. * - * * - * This library is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * ------------------------------------------------------------------------- * - * * To register as a smarty block function named 't', use: * $smarty->register_block('t', 'smarty_translate'); * + * NOTE: native php support for conext sensitive does not exist + * Those jumps are disabled + * * @package smarty-gettext * @version $Id: block.t.php 4738 2022-05-06 01:28:48Z clemens $ * @link http://smarty-gettext.sf.net/ * @author Sagi Bashari * @copyright 2004 Sagi Bashari + * @copyright Elan Ruusamäe + * @copyright Clemens Schwaighofer */ /** @@ -39,7 +28,7 @@ */ function smarty_gettext_strarg($str/*, $varargs... */) { - $tr = array(); + $tr = []; $p = 0; $nargs = func_num_args(); @@ -120,55 +109,54 @@ function smarty_block_t($params, $text, $template, &$repeat) // use plural if required parameters are set if (isset($count) && isset($plural)) { if (isset($domain) && isset($context)) { - if (is_callable('__dnpgettext')) { - $text = __dnpgettext($domain, $context, $text, $plural, $count); - } + if (is_callable('_dnpgettext')) { + $text = _dnpgettext($domain, $context, $text, $plural, $count); + }/* elseif (is_callable('dnpgettext')) { + $text = dnpgettext($domain, $context, $text, $plural, $count); + } */ } elseif (isset($domain)) { - if (is_callable('__dngettext')) { - $text = __dngettext($domain, $text, $plural, $count); + if (is_callable('_dngettext')) { + $text = _dngettext($domain, $text, $plural, $count); + } elseif (is_callable('dngettext')) { + $text = dngettext($domain, $text, $plural, $count); } } elseif (isset($context)) { - if (is_callable('__npgettext')) { - $text == __npgettext($context, $text, $plural, $count); - } elseif ( - $template->l10n instanceof \CoreLibs\Language\L10n && - method_exists($template->l10n, '__pn') - ) { - $text = $template->l10n->__pn($text, $plural, $count); + if (is_callable('_npgettext')) { + $text == _npgettext($context, $text, $plural, $count); + }/* elseif (is_callable('npgettext')) { + $text = npgettext($context, $text, $plural, $count); + } */ + } else { + if (is_callable('_ngettext')) { + $text == _ngettext($text, $plural, $count); + } elseif (is_callable('ngettext')) { + $text == ngettext($text, $plural, $count); } - } elseif ( - $template->l10n instanceof \CoreLibs\Language\L10n && - method_exists($template->l10n, '__n') - ) { - $text = $template->l10n->__n($text, $plural, $count); - // $text == __ngettext($text, $plural, $count); } } else { // use normal if (isset($domain) && isset($context)) { - if (is_callable('__dpgettext')) { - $text = __dpgettext($domain, $context, $text); - } + if (is_callable('_dpgettext')) { + $text = _dpgettext($domain, $context, $text); + }/* elseif (is_callable('dpgettext')) { + $text = dpgettext($domain, $context, $text); + } */ } elseif (isset($domain)) { - if (is_callable('__dgettext')) { - $text = __dgettext($domain, $text); + if (is_callable('_dgettext')) { + $text = _dgettext($domain, $text); + } elseif (is_callable('dpgettext')) { + $text = dgettext($domain, $text); } } elseif (isset($context)) { - if (is_callable('__pgettext')) { - $text = __pgettext($context, $text); - } elseif ( - $template->l10n instanceof \CoreLibs\Language\L10n && - method_exists($template->l10n, '__p') - ) { - $text = $template->l10n->__p($context, $text); - } + if (is_callable('_pgettext')) { + $text = _pgettext($context, $text); + }/* elseif (is_callable('pgettext')) { + $text = pgettext($context, $text); + } */ } else { - if (is_callable('__gettext')) { - $text = __gettext($text); - } elseif ( - $template->l10n instanceof \CoreLibs\Language\L10n && - method_exists($template->l10n, '__') - ) { - $text = $template->l10n->__($text); + if (is_callable('_gettext')) { + $text = _gettext($text); + } elseif (is_callable('gettext')) { + $text = gettext($text); } } } @@ -180,6 +168,7 @@ function smarty_block_t($params, $text, $template, &$repeat) switch ($escape) { case 'html': + // default $text = nl2br(htmlspecialchars($text)); break; case 'javascript': @@ -187,13 +176,29 @@ function smarty_block_t($params, $text, $template, &$repeat) // javascript escape $text = strtr( $text, - array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', ' '<\/') + [ + '\\' => '\\\\', + "'" => "\\'", + '"' => '\\"', + "\r" => '\\r', + "\n" => '\\n', + ' '<\/' + ] ); break; case 'url': // url escape $text = urlencode($text); break; + // below is a list for explicit OFF + case 'no': + case 'off': + case 'false': + case '0': + case 0: + // explicit OFF + default: + break; } return $text;