Skip to content

Commit

Permalink
Speep up the language override feature
Browse files Browse the repository at this point in the history
  • Loading branch information
mystralkk committed Aug 16, 2019
1 parent 33a522f commit 64d50e8
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 11 deletions.
1 change: 1 addition & 0 deletions public_html/lib-common.php
Expand Up @@ -431,6 +431,7 @@
}

// Override language items (since v2.1.2)
Language::init();
$language_overrides = array(
'LANG01', 'LANG03', 'LANG04', 'LANG_MYACCOUNT', 'LANG05', 'LANG08', 'LANG09',
'LANG10', 'LANG11', 'LANG12', 'LANG_LOGVIEW', 'LANG_ENVCHECK', 'LANG20',
Expand Down
58 changes: 47 additions & 11 deletions system/classes/language.class.php
Expand Up @@ -39,6 +39,47 @@ class Language
// The lifespan of a security token in seconds
const SEC_TOKEN_LIFESPAN = 1200; // 20 * 60

/**
* @var bool
*/
private static $isInitialized = false;

/**
* @var array of ['id', 'var_name', 'language', 'name', 'Value']
*/
private static $data = array();

/**
* Initialize the Language class
*/
public static function init()
{
global $_TABLES;

if (self::$isInitialized) {
return;
}

// Cache data in database into memory
$sql = "SELECT * FROM {$_TABLES['language_items']} ORDER BY id";
$result = DB_query($sql);

if (!DB_error()) {
while (($A = DB_fetchArray($result, false)) !== false) {
if (!array_key_exists($A['var_name'], self::$data)) {
self::$data[$A['var_name']] = array();
}
if (!array_key_exists($A['language'], self::$data[$A['var_name']])) {
self::$data[$A['var_name']][$A['language']] = array();
}

self::$data[$A['var_name']][$A['language']][$A['name']] = $A['value'];
}
}

self::$isInitialized = true;
}

/**
* Apply overrides to the given language arrays
*
Expand All @@ -48,9 +89,7 @@ class Language
*/
public static function override(array $varNames)
{
global $_TABLES;

$escapedLanguage = DB_escapeString(COM_getLanguage());
$language = COM_getLanguage();

foreach ($varNames as $varName) {
if (!isset($GLOBALS[$varName])) {
Expand All @@ -59,16 +98,13 @@ public static function override(array $varNames)
$varIsArray = is_array($GLOBALS[$varName]);
}

$escapedVarName = DB_escapeString($varName);
$sql = "SELECT name, value FROM {$_TABLES['language_items']} "
. " WHERE (var_name = '{$escapedVarName}') AND (language = '{$escapedLanguage}') ";
$resultSet = DB_query($sql);

while (($A = DB_fetchArray($resultSet, false)) !== false) {
if (isset(self::$data[$varName], self::$data[$varName][$language])) {
if ($varIsArray) {
$GLOBALS[$varName][$A['name']] = $A['value'];
foreach (self::$data[$varName][$language] as $name => $value) {
$GLOBALS[$varName][$name] = $value;
}
} else {
$GLOBALS[$varName] = $A['value'];
$GLOBALS[$varName] = self::$data[$varName][$language][$varName];
}
}
}
Expand Down

0 comments on commit 64d50e8

Please sign in to comment.