mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-22 14:41:29 +01:00
"- fixed bug introduced in r27541: cache was updated with an empty translation array (typo in app-name variable)
- when updating all langs, do a transaction for each lang and update the cache after commiting the transaction (before the transaction was about all langs and the cache update withint the not commited transaction) - fixed problem with autoloading of languages, check used filectime, update used filemtime, which can differ of cause"
This commit is contained in:
parent
2a04a9c9f0
commit
7575812c04
@ -287,7 +287,7 @@ class translation
|
||||
$loaded[strtolower($row['message_id'])] = $row['content'];
|
||||
}
|
||||
}
|
||||
//error_log(__METHOD__."($app,$lang) took ".(1000*(microtime(true)-$start))." ms");
|
||||
//error_log(__METHOD__."($app,$lang) took ".(1000*(microtime(true)-$start))." ms to load ".count($loaded)." phrases");
|
||||
return $loaded;
|
||||
}
|
||||
|
||||
@ -597,23 +597,22 @@ class translation
|
||||
$GLOBALS['egw_info']['server']['lang_ctimes'] = unserialize(stripslashes($ctimes));
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_array($langs) || !count($langs))
|
||||
{
|
||||
return;
|
||||
return; // nothing to do
|
||||
}
|
||||
foreach($langs as $lang)
|
||||
{
|
||||
// run the update of each lang in a transaction
|
||||
self::$db->transaction_begin();
|
||||
|
||||
if ($upgrademethod == 'dumpold')
|
||||
{
|
||||
// dont delete the custom main- & loginscreen messages every time
|
||||
self::$db->delete(self::LANG_TABLE,array("app_name!='mainscreen'","app_name!='loginscreen'"),__LINE__,__FILE__);
|
||||
self::$db->delete(self::LANG_TABLE,array("app_name!='mainscreen'","app_name!='loginscreen'",'lang' => $lang),__LINE__,__FILE__);
|
||||
//echo '<br>Test: dumpold';
|
||||
$GLOBALS['egw_info']['server']['lang_ctimes'] = array();
|
||||
$GLOBALS['egw_info']['server']['lang_ctimes'][$lang] = array();
|
||||
}
|
||||
foreach($langs as $lang)
|
||||
{
|
||||
//echo '<br>Working on: ' . $lang;
|
||||
$addlang = False;
|
||||
if ($upgrademethod == 'addonlynew')
|
||||
{
|
||||
@ -670,7 +669,7 @@ class translation
|
||||
{
|
||||
$GLOBALS['egw_info']['server']['lang_ctimes'] = unserialize($GLOBALS['egw_info']['server']['lang_ctimes']);
|
||||
}
|
||||
$GLOBALS['egw_info']['server']['lang_ctimes'][$lang][$app] = filemtime($appfile);
|
||||
$GLOBALS['egw_info']['server']['lang_ctimes'][$lang][$app] = filectime($appfile);
|
||||
}
|
||||
}
|
||||
$charset = strtolower(@$raw['common']['charset'] ? $raw['common']['charset'] : self::charset($lang));
|
||||
@ -741,21 +740,28 @@ class translation
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// commit now the update of $lang, before we fill the cache again
|
||||
self::$db->transaction_commit();
|
||||
|
||||
$apps = array_keys($raw);
|
||||
unset($raw);
|
||||
|
||||
foreach($apps as $app_name)
|
||||
{
|
||||
// update the tree-level cache, as we can not effectivly unset it in a multiuser enviroment,
|
||||
// as users from other - not yet updated - instances update it again with an old version!
|
||||
egw_cache::setTree(__CLASS__,$app_name.':'.$lang,self::load_app($app,$lang));
|
||||
//error_log(__METHOD__.'('.array2string($langs).",$upgrademethod,$only_app) updating tree-level cache for app=$app_name and lang=$lang.");
|
||||
}
|
||||
egw_cache::setTree(__CLASS__,$app_name.':'.$lang,($phrases=&self::load_app($app_name,$lang)));
|
||||
//error_log(__METHOD__.'('.array2string($langs).",$upgrademethod,$only_app) updating tree-level cache for app=$app_name and lang=$lang: ".count($phrases)." phrases");
|
||||
}
|
||||
}
|
||||
// delete the cache
|
||||
egw_cache::unsetInstance(__CLASS__,'installed_langs');
|
||||
egw_cache::unsetInstance(__CLASS__,'list_langs');
|
||||
|
||||
self::$db->transaction_commit();
|
||||
|
||||
// update the ctimes of the installed langsfiles for the autoloading of the lang-files
|
||||
//
|
||||
//error_log(__METHOD__.'('.array2string($langs).",$upgrademethod,$only_app) storing lang_ctimes=".array2string($GLOBALS['egw_info']['server']['lang_ctimes']));
|
||||
config::save_value('lang_ctimes',$GLOBALS['egw_info']['server']['lang_ctimes'],'phpgwapi');
|
||||
}
|
||||
|
||||
@ -769,7 +775,7 @@ class translation
|
||||
{
|
||||
$GLOBALS['egw_info']['server']['lang_ctimes'] = unserialize($GLOBALS['egw_info']['server']['lang_ctimes']);
|
||||
}
|
||||
//_debug_array($GLOBALS['egw_info']['server']['lang_ctimes']);
|
||||
//error_log(__METHOD__."(): ling_ctimes=".array2string($GLOBALS['egw_info']['server']['lang_ctimes']));
|
||||
|
||||
$lang = $GLOBALS['egw_info']['user']['preferences']['common']['lang'];
|
||||
$apps = $GLOBALS['egw_info']['user']['apps'];
|
||||
@ -781,19 +787,13 @@ class translation
|
||||
|
||||
if (file_exists($fname) || file_exists($fname = $old_fname))
|
||||
{
|
||||
$ctime = filectime($fname);
|
||||
/* This is done to avoid string offset error at least in php5 */
|
||||
$tmp = $GLOBALS['egw_info']['server']['lang_ctimes'][$lang];
|
||||
$ltime = (int)$tmp[$app];
|
||||
unset($tmp);
|
||||
//echo "checking lang='$lang', app='$app', ctime='$ctime', ltime='$ltime'<br>\n";
|
||||
|
||||
if ($ctime != $ltime)
|
||||
if (!isset($GLOBALS['egw_info']['server']['lang_ctimes'][$lang]) ||
|
||||
$GLOBALS['egw_info']['server']['lang_ctimes'][$lang][$app] != filectime($fname))
|
||||
{
|
||||
// update all langs
|
||||
$installed = self::get_installed_langs();
|
||||
//echo "<p>install_langs(".print_r($installed,True).")</p>\n";
|
||||
self::install_langs($installed ? array_keys($installed) : array());
|
||||
//error_log(__METHOD__."(): self::install_langs(".array2string($installed).')');
|
||||
self::install_langs($installed ? array_keys($installed) : array('en'));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user