1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-04 13:47:31 +02:00

Language selection simplification

Bug #4325 fixed
USERLAN deprecated
Bug #3485 possible fix
work in progress
This commit is contained in:
marj
2009-08-03 21:12:45 +00:00
parent 3969281f30
commit 5e093d018e
2 changed files with 110 additions and 53 deletions

View File

@@ -9,9 +9,9 @@
* General purpose file * General purpose file
* *
* $Source: /cvs_backup/e107_0.8/class2.php,v $ * $Source: /cvs_backup/e107_0.8/class2.php,v $
* $Revision: 1.117 $ * $Revision: 1.118 $
* $Date: 2009-08-03 19:51:24 $ * $Date: 2009-08-03 21:12:44 $
* $Author: e107steved $ * $Author: marj_nl_fr $
* *
*/ */
// //
@@ -456,14 +456,14 @@ define('e_COOKIE', $pref['cookie_name']);
// let the subdomain determine the language (when enabled). // let the subdomain determine the language (when enabled).
if(varset($pref['multilanguage_subdomain']) && ($pref['user_tracking'] == 'session') && e_DOMAIN && MULTILANG_SUBDOMAIN !== false) if(varset($pref['multilanguage_subdomain']) && ($pref['user_tracking'] == 'session') && e_DOMAIN && MULTILANG_SUBDOMAIN !== FALSE)
{ {
$mtmp = explode("\n",$pref['multilanguage_subdomain']); $mtmp = explode("\n", $pref['multilanguage_subdomain']);
foreach($mtmp as $val) foreach($mtmp as $val)
{ {
if(e_DOMAIN == trim($val)) if(e_DOMAIN == trim($val))
{ {
$domain_active = true; $domain_active = TRUE;
break; break;
} }
} }
@@ -491,7 +491,8 @@ if ($pref['user_tracking'] == 'session')
session_start(); session_start();
if (!isset($_SESSION['challenge'])) if (!isset($_SESSION['challenge']))
{ // New session { // New session
$_SESSION['challenge'] = sha1(time().session_id()); // Create a unique challenge string for CHAP login // Create a unique challenge string for CHAP login
$_SESSION['challenge'] = sha1(time().session_id());
} }
$ubrowser = md5('E107'.$_SERVER['HTTP_USER_AGENT']); $ubrowser = md5('E107'.$_SERVER['HTTP_USER_AGENT']);
if (!isset($_SESSION['ubrowser'])) if (!isset($_SESSION['ubrowser']))
@@ -559,9 +560,10 @@ define('e_PAGE', $page);
// sort out the users language selection // sort out the users language selection
if (isset($_POST['setlanguage']) || isset($_GET['elan']) || isset($GLOBALS['elan'])) if (isset($_POST['setlanguage']) || isset($_GET['elan']) || isset($GLOBALS['elan']))
{ {
if($_GET['elan']) // query support, for language selection splash pages. etc // query support, for language selection splash pages. etc
if($_GET['elan'])
{ {
$_POST['sitelanguage'] = str_replace(array(".","/","%"),"",$_GET['elan']); $_POST['sitelanguage'] = str_replace(array(".", "/", "%"), "", $_GET['elan']);
} }
if($GLOBALS['elan'] && !isset($_POST['sitelanguage'])) if($GLOBALS['elan'] && !isset($_POST['sitelanguage']))
{ {
@@ -570,6 +572,7 @@ if (isset($_POST['setlanguage']) || isset($_GET['elan']) || isset($GLOBALS['elan
$sql->mySQLlanguage = $_POST['sitelanguage']; $sql->mySQLlanguage = $_POST['sitelanguage'];
$sql2->mySQLlanguage = $_POST['sitelanguage']; $sql2->mySQLlanguage = $_POST['sitelanguage'];
session_set('e107language_'.e_COOKIE, $_POST['sitelanguage'], time() + 86400); session_set('e107language_'.e_COOKIE, $_POST['sitelanguage'], time() + 86400);
if ($pref['user_tracking'] != 'session' && (strpos(e_SELF, ADMINDIR) === false)) if ($pref['user_tracking'] != 'session' && (strpos(e_SELF, ADMINDIR) === false))
{ {
@@ -599,12 +602,13 @@ if (isset($pref['multilanguage']) && $pref['multilanguage'])
} }
// Get Language List for rights checking. // Get Language List for rights checking.
if(!$tmplan = getcachedvars('language-list')) if( ! $tmplan = getcachedvars('language-list'))
{ {
$handle=opendir(e_LANGUAGEDIR); $handle = opendir(e_LANGUAGEDIR);
while ($file = readdir($handle)) while ($file = readdir($handle))
{ {
if (is_dir(e_LANGUAGEDIR.$file) && $file != '.' && $file != '..' && $file != 'CVS') // add only if e_LANGUAGEDIR.e_LANGUAGE/e_LANGUAGE
if ($file != '.' && $file != '..' && is_readable(e_LANGUAGEDIR.$file.'/'.$file.'.php'))
{ {
$lanlist[] = $file; $lanlist[] = $file;
} }
@@ -613,21 +617,69 @@ if(!$tmplan = getcachedvars('language-list'))
$tmplan = implode(',', $lanlist); $tmplan = implode(',', $lanlist);
cachevars('language-list', $tmplan); cachevars('language-list', $tmplan);
} }
// Save language flat list
define('e_LANLIST', $tmplan);
define('e_LANLIST', (isset($tmplan) ? $tmplan : '')); // Set $language fallback to $pref['sitelanguage'] for the time being
$language = $pref['sitelanguage'];
$language=(isset($_COOKIE['e107language_'.e_COOKIE]) ? $_COOKIE['e107language_'.e_COOKIE] : ($pref['sitelanguage'] ? $pref['sitelanguage'] : 'English')); // Get user language choice
$language = preg_replace('#\W#', '', $language); /// Force no multilingual sites to keep there preset languages? if (varset($pref['multilanguage']))
define('USERLAN', ($user_language && (strpos(e_SELF, $PLUGINS_DIRECTORY) !== FALSE || (strpos(e_SELF, $ADMIN_DIRECTORY) === FALSE && file_exists(e_LANGUAGEDIR.$user_language."/lan_".e_PAGE)) || (strpos(e_SELF, $ADMIN_DIRECTORY) !== FALSE && file_exists(e_LANGUAGEDIR.$user_language."/admin/lan_".e_PAGE)) || file_exists(dirname($_SERVER['SCRIPT_FILENAME'])."/languages/".$user_language."/lan_".e_PAGE) || ( (strpos(e_SELF, $ADMIN_DIRECTORY) == FALSE) && (strpos(e_SELF, $PLUGINS_DIRECTORY) == FALSE) && file_exists(e_LANGUAGEDIR.$user_language.'/'.$user_language.'.php') ) ) ? $user_language : FALSE)); {
define('e_LANGUAGE', (!USERLAN || !defined('USERLAN') ? $language : USERLAN)); if ($pref['user_tracking'] == 'session')
{
$user_language = (array_key_exists('e107language_'.$pref['cookie_name'], $_SESSION) ? $_SESSION['e107language_'.$pref['cookie_name']] : '');
}
else
{
$user_language= (isset($_COOKIE['e107language_'.$pref['cookie_name']])) ? $_COOKIE['e107language_'.$pref['cookie_name']] : '';
}
// Strip $user_language
//TODO allow [a-z][A-Z][0-9]_
$user_language = preg_replace('#\W#', '', $user_language);
e107_include(e_LANGUAGEDIR.e_LANGUAGE.'/'.e_LANGUAGE.'.php'); // Is user language choice available?
if( ! in_array($user_language, $lanlist))
{
// Reset session
if(array_key_exists('e107language_'.$pref['cookie_name'], $_SESSION))
{
unset($_SESSION['e107language_'.$pref['cookie_name']]);
}
// Reset cookie
if(isset($_COOKIE['e107language_'.$pref['cookie_name']]))
{
unset($_COOKIE['e107language_'.$pref['cookie_name']]);
}
$user_language = '';
}
else
{
$language = $user_language;
}
// Ensure db got the proper language - default is empty
if (varset($pref['multilanguage']))
{
$sql->mySQLlanguage = $user_language;
$sql2->mySQLlanguage = $user_language;
}
}
// We should have the language by now
define('e_LANGUAGE', $language);
// Keep USERLAN for backward compatibility
define('USERLAN', e_LANGUAGE);
//TODO do it only once and with the proper function
e107_include_once(e_LANGUAGEDIR.e_LANGUAGE.'/'.e_LANGUAGE.'.php');
e107_include_once(e_LANGUAGEDIR.e_LANGUAGE."/".e_LANGUAGE.'_custom.php'); e107_include_once(e_LANGUAGEDIR.e_LANGUAGE."/".e_LANGUAGE.'_custom.php');
// Now we know the site CHARSET, define how to handle utf-8 as necessary // Now we know the site CHARSET, define how to handle utf-8 as necessary
$tp->initCharset(); $tp->initCharset();
if($pref['sitelanguage'] != e_LANGUAGE && isset($pref['multilanguage']) && $pref['multilanguage'] && !$pref['multilanguage_subdomain']) if($pref['sitelanguage'] != e_LANGUAGE && varset($pref['multilanguage']) && !$pref['multilanguage_subdomain'])
{ {
list($clc) = explode("_",CORE_LC); list($clc) = explode("_",CORE_LC);
define('e_LAN', strtolower($clc)); define('e_LAN', strtolower($clc));

View File

@@ -1,43 +1,48 @@
// $Id: languagelinks.sc,v 1.2 2007-10-30 23:34:01 e107coders Exp $ //<? $Id: languagelinks.sc,v 1.3 2009-08-03 21:12:45 marj_nl_fr Exp $
global $pref; global $pref;
$sep = (defined("LANGLINKS_SEPARATOR")) ? LANGLINKS_SEPARATOR : "|&nbsp;"; if( ! defined('LANGLINKS_SEPARATOR'))
$cursub = explode(".",$_SERVER['HTTP_HOST']); {
define('LANGLINKS_SEPARATOR', '&nbsp;|&nbsp;');
}
//$cursub = explode('.', $_SERVER['HTTP_HOST']);
require_once(e_HANDLER."language_class.php"); require_once(e_HANDLER.'language_class.php');
$lng = new language; $slng = new language;
if($parm) if($parm)
{
$languageList = explode(',', $parm);
}
else
{
$languageList = explode(',', e_LANLIST);
sort($languageList);
}
if(count($languageList) < 2)
{
return;
}
foreach($languageList as $languageFolder)
{
$code = $slng->convert($languageFolder);
$name = $slng->toNative($languageFolder);
//$subdom = (isset($cursub[2])) ? $cursub[0] : '';
if(varset($pref['multilanguage_subdomain']))
{ {
$tmp = explode(",",$parm); $code = ($languageFolder == $pref['sitelanguage']) ? 'www.' : $code;
$link = (e_QUERY)
? str_replace($_SERVER['HTTP_HOST'], $code.'.'.e_DOMAIN, e_SELF).'?'.e_QUERY
: str_replace($_SERVER['HTTP_HOST'], $code.'.'.e_DOMAIN, e_SELF);
} }
else else
{ {
$tmp = explode(",",e_LANLIST); $link = (e_QUERY) ? e_SELF.'?['.$code.']'.e_QUERY : e_SELF.'?['.$code.']';
sort($tmp);
} }
$class = ($languageFolder == e_LANGUAGE) ? 'languagelink_active' : 'languagelink';
$ret[] = "\n<a class='{$class}' href='{$link}'>{$name}</a>";
}
if(count($tmp) < 2) return implode(LANGLINKS_SEPARATOR, $ret);
{
return;
}
foreach($tmp as $val)
{
$code = $lng->convert($val);
$name = $lng->toNative($val);
$subdom = (isset($cursub[2])) ? $cursub[0] : "";
if(isset($pref['multilanguage_subdomain']) && $pref['multilanguage_subdomain']){
$link = (e_QUERY) ? str_replace($_SERVER['HTTP_HOST'],$code.".".e_DOMAIN,e_SELF)."?".e_QUERY : str_replace($_SERVER['HTTP_HOST'],$code.".".e_DOMAIN,e_SELF);
}
else{
$link = (e_QUERY) ? e_SELF."?[".$code."]".e_QUERY : e_SELF."?[".$code."]";
}
if(isset($pref['multilanguage_subdomain']) && $pref['multilanguage_subdomain'] && $val == $pref['sitelanguage']){
$link = str_replace($code.".".e_DOMAIN,"www.".e_DOMAIN,$link);
}
$class = ($val == e_LANGUAGE) ? "languagelink_active" : "languagelink";
$ret[] = "<a class='{$class}' href='{$link}' title=\"".$name."\">".$name."</a>\n";
}
return implode($sep,$ret);