Skip to content

Commit b130c28

Browse files
authored
Merge pull request #24 from mambax7/master
3.1.3 FINAL
2 parents e44adc6 + d07f398 commit b130c28

11 files changed

Lines changed: 225 additions & 99 deletions

File tree

api.php

Lines changed: 78 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -28,93 +28,100 @@
2828
/** @var LanguageHandler $languageHandler */
2929

3030
global $xlanguage, $xoopsConfig;
31-
require_once XOOPS_ROOT_PATH . '/modules/xlanguage/include/vars.php';
3231

33-
//$cookie_prefix = preg_replace("/[^a-z_0-9]+/i", "_", preg_replace("/(http(s)?:\/\/)?(www.)?/i","",XOOPS_URL));
34-
$cookie_var = XLANGUAGE_LANG_TAG;
35-
$utility = new Utility();
32+
$helper = Helper::getInstance();
33+
34+
require $helper->path( 'include/vars.php');
35+
36+
//$cookie_prefix = preg_replace("/[^a-z_0-9]+/i", "_", preg_replace("/(http(s)?:\/\/)?(www.)?/i", "", XOOPS_URL));
37+
$cookie_var = XLANGUAGE_LANG_TAG;
38+
$utility = new Utility();
3639

3740
$xlanguage['action'] = false;
3841
$langTag = Request::getString(XLANGUAGE_LANG_TAG, '', 'GET');
3942
if (!empty($langTag)) {
40-
$cookie_path = '/';
41-
setcookie($cookie_var, $langTag, time() + 3600 * 24 * 30, $cookie_path, '', 0);
42-
$xlanguage['lang'] = $langTag;
43-
} elseif (!empty($_COOKIE[$cookie_var])) {
44-
$xlanguage['lang'] = $_COOKIE[$cookie_var];
43+
if (!empty($_GET[XLANGUAGE_LANG_TAG])) {
44+
$cookie_path = '/';
45+
setcookie($cookie_var, $langTag, time() + 3600 * 24 * 30, $cookie_path, '', 0);
46+
$xlanguage['lang'] = $langTag;
47+
} elseif (!empty($_COOKIE[$cookie_var])) {
48+
$xlanguage['lang'] = $_COOKIE[$cookie_var];
4549

46-
/* FIXME: shall we remove it? */
50+
/* FIXME: shall we remove it? */
4751

48-
// if (preg_match("/[&|\?]\b".XLANGUAGE_LANG_TAG."\b=/i",$_SERVER['REQUEST_URI'])) {
49-
// } elseif (strpos($_SERVER['REQUEST_URI'], "?")) {
50-
// $_SERVER['REQUEST_URI'] .= "&".XLANGUAGE_LANG_TAG."=".$xlanguage["lang"];
51-
// } else {
52-
// $_SERVER['REQUEST_URI'] .= "?".XLANGUAGE_LANG_TAG."=".$xlanguage["lang"];
53-
// }
54-
55-
} elseif ($lang = $utility::detectLang()) {
56-
$xlanguage['lang'] = $lang;
57-
} else {
58-
$xlanguage['lang'] = $xoopsConfig['language'];
59-
}
52+
// if (preg_match("/[&|\?]\b".XLANGUAGE_LANG_TAG."\b=/i",$_SERVER['REQUEST_URI'])) {
53+
// } elseif (strpos($_SERVER['REQUEST_URI'], "?")) {
54+
// $_SERVER['REQUEST_URI'] .= "&".XLANGUAGE_LANG_TAG."=".$xlanguage["lang"];
55+
// } else {
56+
// $_SERVER['REQUEST_URI'] .= "?".XLANGUAGE_LANG_TAG."=".$xlanguage["lang"];
57+
// }
6058

61-
$helper = Helper::getInstance();
62-
$languageHandler = $helper->getHandler('Language');
63-
$languageHandler->loadConfig();
64-
$lang = $languageHandler->getByName($xlanguage['lang']);
65-
if (is_object($lang) && strcasecmp($lang->getVar('lang_name'), $xoopsConfig['language'])) {
66-
if ($lang->hasBase()) {
67-
$xoopsConfig['language'] = $lang->getVar('lang_name');
59+
} elseif ($lang = $utility::detectLang()) {
60+
$xlanguage['lang'] = $lang;
6861
} else {
69-
$lang_base = $languageHandler->getByName($lang->getVar('lang_base'));
70-
if (is_object($lang_base)) {
71-
$xlanguage['charset_base'] = $lang_base->getVar('lang_charset');
72-
$xlanguage['action'] = true;
73-
$xoopsConfig['language'] = $lang_base->getVar('lang_name');
74-
unset($lang_base);
75-
}
76-
}
77-
if ($lang->getVar('lang_charset')) {
78-
$xlanguage['charset'] = $lang->getVar('lang_charset');
62+
$xlanguage['lang'] = $xoopsConfig['language'];
7963
}
80-
if ($lang->getVar('lang_code')) {
81-
$xlanguage['code'] = $lang->getVar('lang_code');
64+
65+
$helper = Helper::getInstance();
66+
$languageHandler = $helper->getHandler('Language');
67+
$languageHandler->loadConfig();
68+
$lang = $languageHandler->getByName($xlanguage['lang']);
69+
if (is_object($lang) && strcasecmp($lang->getVar('lang_name'), $xoopsConfig['language'])) {
70+
if ($lang->hasBase()) {
71+
$xoopsConfig['language'] = $lang->getVar('lang_name');
72+
} else {
73+
$lang_base = $languageHandler->getByName($lang->getVar('lang_base'));
74+
if (is_object($lang_base)) {
75+
$xlanguage['charset_base'] = $lang_base->getVar('lang_charset');
76+
$xlanguage['charset'] = $lang->getVar('lang_charset') ?? '';
77+
$xlanguage['code'] = $lang->getVar('lang_code' ?? '');
78+
$xlanguage['action'] = true;
79+
$xoopsConfig['language'] = $lang_base->getVar('lang_name');
80+
unset($lang_base);
81+
}
82+
}
83+
// if ($lang->getVar('lang_charset')) {
84+
// $xlanguage['charset'] = $lang->getVar('lang_charset');
85+
// }
86+
// if ($lang->getVar('lang_code')) {
87+
// $xlanguage['code'] = $lang->getVar('lang_code');
88+
// }
8289
}
83-
}
84-
unset($lang);
90+
unset($lang);
8591

86-
$GLOBALS['xlanguageHandler'] = $languageHandler;
92+
$GLOBALS['xlanguageHandler'] = $languageHandler;
8793

88-
if ($xlanguage['action']) {
89-
//if (CONV_REQUEST && (!empty($_GET)||!empty($_POST))) {
90-
if (!empty($_POST)) {
91-
$in_charset = $xlanguage['charset'];
92-
$out_charset = $xlanguage['charset_base'];
94+
if ($xlanguage['action']) {
95+
//if (CONV_REQUEST && (!empty($_GET)||!empty($_POST))) {
96+
if (!empty($_POST)) {
97+
$in_charset = $xlanguage['charset'];
98+
$out_charset = $xlanguage['charset_base'];
9399

94-
//$CONV_REQUEST_array=array("_GET", "_POST");
95-
$CONV_REQUEST_array = ['_POST'];
96-
foreach ($CONV_REQUEST_array as $HV) {
97-
if (!empty(${$HV})) {
98-
${$HV} = $utility::convertEncoding(${$HV}, $out_charset, $in_charset);
100+
//$CONV_REQUEST_array=array("_GET", "_POST");
101+
$CONV_REQUEST_array = ['_POST'];
102+
foreach ($CONV_REQUEST_array as $HV) {
103+
if (!empty(${$HV})) {
104+
${$HV} = $utility::convertEncoding(${$HV}, $out_charset, $in_charset);
105+
}
106+
$GLOBALS['HTTP' . $HV . '_VARS'] = ${$HV};
99107
}
100-
$GLOBALS['HTTP' . $HV . '_VARS'] = ${$HV};
101108
}
109+
ob_start('XoopsModules\Xlanguage\Utility::encodeCharSet');
110+
} else {
111+
ob_start('XoopsModules\Xlanguage\Utility::cleanMultiLang');
102112
}
103-
ob_start('XoopsModules\Xlanguage\Utility::encodeCharSet');
104-
} else {
105-
ob_start('XoopsModules\Xlanguage\Utility::cleanMultiLang');
106-
}
107113

108-
/*
109-
* hardcoded scripts for language switching in theme html files
110-
*
111-
* To use it:
112-
* 1 set "$xlanguage_theme_enable = true;"
113-
* 2 config options "$options = array("images", " ", 5); // display mode, delimitor, number per line"; Options for display mode: image - flag; text - text; dropdown - dropdown selection box with text
114-
* 3 insert "<{$smarty.const.XLANGUAGE_SWITCH_CODE}>" into your theme html anywhere you would like to see it present
115-
*/
116-
$xlanguage_theme_enable = true;
117-
if (!empty($xlanguage_theme_enable)) {
118-
$options = ['dropdown', ' ', 5]; // display mode, delimitor, number per line
119-
$utility::showSelectedLanguage($options);
114+
/*
115+
* hardcoded scripts for language switching in theme html files
116+
*
117+
* To use it:
118+
* 1 set "$xlanguage_theme_enable = true;"
119+
* 2 config options "$options = array("images", " ", 5); // display mode, delimitor, number per line"; Options for display mode: image - flag; text - text; dropdown - dropdown selection box with text
120+
* 3 insert "<{$smarty.const.XLANGUAGE_SWITCH_CODE}>" into your theme html anywhere you would like to see it present
121+
*/
122+
$xlanguage_theme_enable = true;
123+
if (!empty($xlanguage_theme_enable)) {
124+
$options = ['dropdown', ' ', 5]; // display mode, delimitor, number per line
125+
$utility::showSelectedLanguage($options);
126+
}
120127
}

blocks/xlanguage_blocks.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function b_xlanguage_select_show($options)
8484
$block['display'] = $options[0];
8585
$block['delimitor'] = $options[1];
8686
$block['number'] = $options[2];
87-
$block['selected'] = $xlanguage['lang'];
87+
$block['selected'] = $xlanguage['lang']??'';
8888
if ('images' === $options[0] || 'text' === $options[0]) {
8989
$query_string = htmlspecialchars(implode('&', $QUERY_STRING_new), ENT_QUOTES | ENT_HTML5);
9090
$query_string .= empty($query_string) ? '' : '&amp;';

class/Utility.php

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
};
77
use Xmf\Request;
88

9-
10-
119
/** @var Helper $helper */
1210
/** @var LanguageHandler $languageHandler */
1311

@@ -101,7 +99,7 @@ public static function loadConfig()
10199
*/
102100
public static function langDetect($str = '', $envType = '')
103101
{
104-
global $available_languages;
102+
require dirname(__DIR__) . '/include/vars.php';
105103
$lang = '';
106104

107105
if (!empty($available_languages)) {
@@ -126,12 +124,11 @@ public static function langDetect($str = '', $envType = '')
126124
}
127125

128126
/**
129-
* @return string
127+
* @return string|bool
130128
*/
131129
public static function detectLang()
132130
{
133-
global $available_languages, $_SERVER;
134-
131+
global $_SERVER;
135132
// if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
136133
if (Request::hasVar('HTTP_ACCEPT_LANGUAGE', 'SERVER')) {
137134
$HTTP_ACCEPT_LANGUAGE = Request::getString('HTTP_ACCEPT_LANGUAGE', '', 'SERVER');
@@ -146,17 +143,16 @@ public static function detectLang()
146143
$xoops_lang = '';
147144
// 1. try to findout user's language by checking its HTTP_ACCEPT_LANGUAGE variable
148145

149-
// if (empty($lang) && !empty($HTTP_ACCEPT_LANGUAGE)) {
150-
// $accepted = explode(',', $HTTP_ACCEPT_LANGUAGE);
151-
// $acceptedCnt = count($accepted);
152-
// reset($accepted);
153-
// for ($i = 0; $i < $acceptedCnt; ++$i) {
154-
// $lang = static::langDetect($accepted[$i], 1);
155-
// if (strncasecmp($lang, 'en', 2)) {
156-
// break;
157-
// }
158-
// }
159-
// }
146+
if (empty($lang) && !empty($HTTP_ACCEPT_LANGUAGE)) {
147+
$accepted = explode(',', $HTTP_ACCEPT_LANGUAGE);
148+
reset($accepted);
149+
foreach ($accepted as $iValue) {
150+
$lang = static::langDetect($iValue, 1);
151+
if (strncasecmp($lang, 'en', 2)) {
152+
break;
153+
}
154+
}
155+
}
160156

161157
//This returns the most preferred language "q=1"
162158
$lang = static::getPreferredLanguage();
@@ -166,16 +162,16 @@ public static function detectLang()
166162
$lang = static::langDetect($HTTP_USER_AGENT, 2);
167163
}
168164
// 3. If we catch a valid language, configure it
169-
if (!empty($lang)) {
170-
$xoops_lang = $available_languages[$lang][1];
165+
if (!empty($lang)) {
166+
$xoops_lang = isset($available_languages[$lang][1])?:'';
171167
}
172168

173169
return $xoops_lang;
174170
}
175171

176172
/**
177173
* @param $output
178-
* @return array|mixed|string
174+
* @return array|string|null
179175
*/
180176
public static function encodeCharSet($output)
181177
{

docs/changelog.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
<h5>3.1.3 FINAL [2021-08-20]</h5> Dev: XOOPS 2.5.11, PHP 7.4.22, PHP 8.0.9
2+
<hr>
3+
4+
5+
<h5>3.1.3 RC-1 [2021-08-18]</h5> Dev: XOOPS 2.5.11, PHP 7.4.22, PHP 8.0.9
6+
<hr>
7+
- fix site stays on English instead of going to local default language (liomj/mamba)
8+
19
<h5>3.1.2 Final [2021-08-13]</h5> Dev: XOOPS 2.5.11, PHP 7.4.22, PHP 8.0.9
210
<hr>
311
- set 'hasMain' in xoops_version.php to 0 (alain01/geekwright)
Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,56 @@
11
-
2-
lang_id: '1'
3-
weight: '1'
2+
lang_id: '13'
3+
weight: '3'
4+
lang_name: french
5+
lang_desc: French
6+
lang_code: fr
7+
lang_charset: UTF-8
8+
lang_image: french.gif
9+
-
10+
lang_id: '11'
11+
weight: '2'
412
lang_name: english
513
lang_desc: English
614
lang_code: en
715
lang_charset: UTF-8
816
lang_image: usa.gif
917
-
10-
lang_id: '2'
11-
weight: '2'
18+
lang_id: '12'
19+
weight: '4'
20+
lang_name: german
21+
lang_desc: Germany
22+
lang_code: de
23+
lang_charset: UTF-8
24+
lang_image: german.gif
25+
-
26+
lang_id: '14'
27+
weight: '1'
28+
lang_name: italian
29+
lang_desc: Italian
30+
lang_code: it
31+
lang_charset: UTF-8
32+
lang_image: italian.gif
33+
-
34+
lang_id: '17'
35+
weight: '1'
36+
lang_name: polish
37+
lang_desc: Polish
38+
lang_code: pl
39+
lang_charset: UTF-8
40+
lang_image: poland.gif
41+
-
42+
lang_id: '18'
43+
weight: '1'
1244
lang_name: spanish
1345
lang_desc: Spanish
1446
lang_code: es
1547
lang_charset: UTF-8
1648
lang_image: spanish.gif
49+
-
50+
lang_id: '19'
51+
weight: '1'
52+
lang_name: portuguese
53+
lang_desc: Portuguese
54+
lang_code: pr
55+
lang_charset: UTF-8
56+
lang_image: brazil.gif

testdata/english/xlanguage_ext.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
{ }
1+
-
2+
lang_id: '1'
3+
weight: '999'
4+
lang_name: Canada
5+
lang_desc: Canada
6+
lang_code: en
7+
lang_charset: UTF-8
8+
lang_image: canada.gif
9+
lang_base: english
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ }

testdata/french/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<script>history.go(-1);</script>

0 commit comments

Comments
 (0)