Compare commits

...

2 Commits

Author SHA1 Message Date
Clemens Schwaighofer
316ca106fd Composer autoload update 2022-04-15 13:57:48 +09:00
Clemens Schwaighofer
fd9b201346 Remove old GetSettings for language legacy flow 2022-04-15 13:57:26 +09:00
5 changed files with 1 additions and 468 deletions

View File

@@ -1,325 +0,0 @@
<?php // phpcs:disable Generic.Files.LineLength
declare(strict_types=1);
namespace tests;
use PHPUnit\Framework\TestCase;
/**
* Test class for Language\GetSettings
*
* @coversDefaultClass \CoreLibs\Language\GetSettings
* @testdox \CoreLibs\Language\GetSettings method tests
*/
final class CoreLibsLanguageGetSettingsTest extends TestCase
{
/**
* set all constant variables that must be set before call
*
* @return void
*/
public static function setUpBeforeClass(): void
{
define('DEFAULT_LANG', 'en_US');
// default web page encoding setting
define('DEFAULT_ENCODING', 'UTF-8');
// default lang + encoding
define('DEFAULT_LOCALE', 'en_US.UTF-8');
// site
define('SITE_LANG', DEFAULT_LANG);
// just set
define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR);
define('INCLUDES', 'includes' . DIRECTORY_SEPARATOR);
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR);
// array session
$_SESSION = [];
global $_SESSION;
}
/**
* all the test data
*
* @return array
*/
public function setLangEncodingProvider(): array
{
return [
// 0: locale/lang
// 1: domain
// 2: path
// 3: SESSION DEFAULT_CHARSE
// 4: GLOBALS: OVERRIDE_LANG
// 5: SESSION: DEFAULT_LANG
// 6: expected array
'no params, all default constants' => [
// lang, domain, path
null, null, null,
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
null, null, null,
// return array
[
0 => 'UTF-8',
1 => 'en_US',
2 => 'en',
3 => 'frontend',
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
'encoding' => 'UTF-8',
'lang' => 'en_US',
'lang_short' => 'en',
'domain' => 'frontend',
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
],
],
'no params, session charset and lang' => [
// lang, domain, path
null, null, null,
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
'UTF-8', null, 'ja_JP',
// return array
[
0 => 'UTF-8',
1 => 'ja_JP',
2 => 'ja',
3 => 'frontend',
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
'encoding' => 'UTF-8',
'lang' => 'ja_JP',
'lang_short' => 'ja',
'domain' => 'frontend',
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
],
],
'no params, session charset and lang short' => [
// lang, domain, path
null, null, null,
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
'UTF-8', null, 'ja',
// return array
[
0 => 'UTF-8',
1 => 'ja',
2 => 'ja',
3 => 'frontend',
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
'encoding' => 'UTF-8',
'lang' => 'ja',
'lang_short' => 'ja',
'domain' => 'frontend',
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
],
],
// globals override lang
'no params, session charset and lang, default lang override' => [
// lang, domain, path
null, null, null,
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
'UTF-8', 'en_US', 'ja_JP',
// return array
[
0 => 'UTF-8',
1 => 'en_US',
2 => 'en',
3 => 'frontend',
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
'encoding' => 'UTF-8',
'lang' => 'en_US',
'lang_short' => 'en',
'domain' => 'frontend',
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
],
],
// globals override lang short
'no params, session charset and lang, default lang short override' => [
// lang, domain, path
null, null, null,
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
'UTF-8', 'en', 'ja_JP',
// return array
[
0 => 'UTF-8',
1 => 'en',
2 => 'en',
3 => 'frontend',
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
'encoding' => 'UTF-8',
'lang' => 'en',
'lang_short' => 'en',
'domain' => 'frontend',
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
],
],
// param lang (no override)
'locale param only, no override' => [
// lang, domain, path
'ja.UTF-8', null, null,
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
null, null, null,
// return array
[
0 => 'UTF-8',
1 => 'ja',
2 => 'ja',
3 => 'frontend',
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
'encoding' => 'UTF-8',
'lang' => 'ja',
'lang_short' => 'ja',
'domain' => 'frontend',
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
],
],
// different locale setting
'locale complex param only, no override' => [
// lang, domain, path
'ja_JP.SJIS', null, null,
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
null, null, null,
// return array
[
0 => 'SJIS',
1 => 'ja_JP',
2 => 'ja',
3 => 'frontend',
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
'encoding' => 'SJIS',
'lang' => 'ja_JP',
'lang_short' => 'ja',
'domain' => 'frontend',
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
],
],
// param lang and domain (no override)
'locale, domain params, no override' => [
// lang, domain, path
'ja.UTF-8', 'admin', null,
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
null, null, null,
// return array
[
0 => 'UTF-8',
1 => 'ja',
2 => 'ja',
3 => 'admin',
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
'encoding' => 'UTF-8',
'lang' => 'ja',
'lang_short' => 'ja',
'domain' => 'admin',
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
],
],
// all params set (no override)
'all params, no override' => [
// lang, domain, path
'ja.UTF-8', 'admin', __DIR__ . '/locale_other/',
// global set no session
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
null, null, null,
// return array
[
0 => 'UTF-8',
1 => 'ja',
2 => 'ja',
3 => 'admin',
4 => "/^\/(.*\/)?locale_other\/$/",
'encoding' => 'UTF-8',
'lang' => 'ja',
'lang_short' => 'ja',
'domain' => 'admin',
'path' => "/^\/(.*\/)?locale_other\/$/",
],
],
// TODO invalid params (bad path) (no override)
// TODO param calls, but with override set
];
}
/**
* Undocumented function
*
* @covers ::setLangEncoding
* @dataProvider setLangEncodingProvider
* @testdox lang settings lang $language, domain $domain, path $path; null session char: $SESSION_DEFAULT_CHARSET, null global lang: $GLOBAL_OVERRIDE_LANG, null session lang: $SESSION_DEFAULT_LANG [$_dataName]
*
* @return void
*/
public function testSetLangEncoding(
?string $language,
?string $domain,
?string $path,
?string $SESSION_DEFAULT_CHARSET,
?string $GLOBAL_OVERRIDE_LANG,
?string $SESSION_DEFAULT_LANG,
array $expected,
): void {
$return_lang_settings = [];
global $_SESSION;
// set override
if ($SESSION_DEFAULT_CHARSET !== null) {
$_SESSION['DEFAULT_CHARSET'] = $SESSION_DEFAULT_CHARSET;
}
if ($GLOBAL_OVERRIDE_LANG !== null) {
$GLOBALS['OVERRIDE_LANG'] = $GLOBAL_OVERRIDE_LANG;
}
if ($SESSION_DEFAULT_LANG !== null) {
$_SESSION['DEFAULT_LANG'] = $SESSION_DEFAULT_LANG;
}
// function call
if ($language === null && $domain === null && $path === null) {
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding();
} elseif ($language !== null && $domain === null && $path === null) {
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
$language
);
} elseif ($language !== null && $domain !== null && $path === null) {
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
$language,
$domain
);
} else {
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
$language,
$domain,
$path
);
}
// print "RETURN: " . print_r($return_lang_settings, true) . "\n";
foreach (
[
0, 1, 2, 3, 4,
'encoding', 'lang', 'lang_short', 'domain', 'path'
] as $key
) {
$value = $expected[$key];
if (strpos($value, "/") === 0) {
// this is regex
$this->assertMatchesRegularExpression(
$value,
$return_lang_settings[$key]
);
} else {
// assert equal
$this->assertEquals(
$value,
$return_lang_settings[$key],
);
}
}
// unset all vars
$_SESSION = [];
unset($GLOBALS['OVERRIDE_LANG']);
}
}
// __END__

View File

@@ -57,6 +57,7 @@ foreach (['admin', 'frontend'] as $folder) {
}
}
// if content path is empty, fallback is default
/** @phpstan-ignore-next-line can be empty */
if (empty($folder)) {
$folder = 'default';
}

View File

@@ -1,141 +0,0 @@
<?php
/*
* Internal function for getting languange and encodig settings
*/
declare(strict_types=1);
namespace CoreLibs\Language;
class GetSettings
{
/**
* Sets encoding and language
* Can be overridden with language + path to mo file
* If locale is set it must be in the format of:
* <lang>.<encoding>
* <lang>_<country>.<encoding>
* <lang>_<country>.<encoding>@<subset>
* If no encoding is set in the is, UTF-8 is assumed
*
* Returned is an array with array indes and dictionary index
* 0~4 array are
* encoding: 0
* lang: 1
* lang_short: 2
* domain: 3
* path: 4
*
* @param string|null $locale A valid locale name
* @param string|null $path A valid path where the mo files will be based
* @return array<int|string,string> Settings as array/dictionary
* @deprecated Use CoreLibs\Language\GetLocale::setLocale()
*/
public static function setLangEncoding(
?string $locale = null,
?string $domain = null,
?string $path = null
): array {
$lang = '';
$lang_short = '';
$encoding = '';
// if is is set, extract
if (!empty($locale)) {
preg_match(
// language code
'/^(?P<lang>[a-z]{2,3})'
// _ country code
. '(?:_(?P<country>[A-Z]{2}))?'
// . charset
. '(?:\\.(?P<charset>[-A-Za-z0-9_]+))?'
// @ modifier
. '(?:@(?P<modifier>[-A-Za-z0-9_]+))?$/',
$locale,
$matches
);
// lang short part
$lang_short = $matches['lang'] ?? '';
$lang = $lang_short;
// lang + country if country is set
if (!empty($matches['country'])) {
$lang = sprintf('%s_%s', $lang_short, $matches['country']);
}
// encoding if set
$encoding = strtoupper($matches['charset'] ?? 'UTF-8');
}
// if domain is set, must be alphanumeric, if not unset
if (
!empty($domain) &&
!preg_match("/^\w+$/", $domain)
) {
$domain = '';
}
// path checks if set, if not valid path unset
if (
!empty($path) &&
!is_dir($path)
) {
$path = '';
}
// just emergency fallback for language
// set encoding
if (empty($encoding)) {
if (!empty($_SESSION['DEFAULT_CHARSET'])) {
$encoding = $_SESSION['DEFAULT_CHARSET'];
} else {
$encoding = DEFAULT_ENCODING;
}
}
// gobal override
if (empty($lang)) {
if (!empty($GLOBALS['OVERRIDE_LANG'])) {
$lang = $GLOBALS['OVERRIDE_LANG'];
} elseif (!empty($_SESSION['DEFAULT_LANG'])) {
// session (login)
$lang = $_SESSION['DEFAULT_LANG'];
} else {
// mostly default SITE LANG or DEFAULT LANG
$lang = defined('SITE_LANG') && !empty(SITE_LANG) ?
SITE_LANG :
DEFAULT_LANG;
}
}
// create the char lang encoding
if (empty($lang_short)) {
$lang_short = substr($lang, 0, 2);
}
// set the language folder
if (empty($path)) {
// LEGACY
$path = BASE . INCLUDES . LANG . CONTENT_PATH;
// will be BASE . INCLUDES . LANG . $language . /LC_MESSAGES/
// so CONTENT_PATH has to be removed
}
// if no domain is set, fall back to content path
if (empty($domain)) {
$domain = str_replace('/', '', CONTENT_PATH);
}
// return
return [
// as array
0 => $encoding,
1 => $lang,
2 => $lang_short,
3 => $domain,
4 => $path,
// with index name
// encoding
'encoding' => $encoding,
// language full string, eg en_US
'lang' => $lang,
// lang short, if eg en_US only en
'lang_short' => $lang_short,
// translation domain (CONTENT_PATH)
'domain' => $domain,
// folder BASE ONLY
'path' => $path,
];
}
}

View File

@@ -48,7 +48,6 @@ return array(
'CoreLibs\\Language\\Core\\StringReader' => $baseDir . '/lib/CoreLibs/Language/Core/StringReader.php',
'CoreLibs\\Language\\Encoding' => $baseDir . '/lib/CoreLibs/Language/Encoding.php',
'CoreLibs\\Language\\GetLocale' => $baseDir . '/lib/CoreLibs/Language/GetLocale.php',
'CoreLibs\\Language\\GetSettings' => $baseDir . '/lib/CoreLibs/Language/GetSettings.php',
'CoreLibs\\Language\\L10n' => $baseDir . '/lib/CoreLibs/Language/L10n.php',
'CoreLibs\\Output\\Form\\Elements' => $baseDir . '/lib/CoreLibs/Output/Form/Elements.php',
'CoreLibs\\Output\\Form\\Generate' => $baseDir . '/lib/CoreLibs/Output/Form/Generate.php',

View File

@@ -113,7 +113,6 @@ class ComposerStaticInit10fe8fe2ec4017b8644d2b64bcf398b9
'CoreLibs\\Language\\Core\\StringReader' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/Core/StringReader.php',
'CoreLibs\\Language\\Encoding' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/Encoding.php',
'CoreLibs\\Language\\GetLocale' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/GetLocale.php',
'CoreLibs\\Language\\GetSettings' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/GetSettings.php',
'CoreLibs\\Language\\L10n' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/L10n.php',
'CoreLibs\\Output\\Form\\Elements' => __DIR__ . '/../..' . '/lib/CoreLibs/Output/Form/Elements.php',
'CoreLibs\\Output\\Form\\Generate' => __DIR__ . '/../..' . '/lib/CoreLibs/Output/Form/Generate.php',