aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcash <cash.costello@gmail.com>2012-02-04 13:05:31 -0500
committercash <cash.costello@gmail.com>2012-02-04 13:05:31 -0500
commit601ec5ccf5eb6940ca468b31e1b400412697c8cb (patch)
tree639b9d1d3591d61c86808a60fe354bce811ce52e
parent76d089fe3662a7051258d6d1843a1167ea8017b1 (diff)
parent06ba6ccfb8bb5a8da8464d8f86454b468744c9cc (diff)
downloadelgg-601ec5ccf5eb6940ca468b31e1b400412697c8cb.tar.gz
elgg-601ec5ccf5eb6940ca468b31e1b400412697c8cb.tar.bz2
Merge pull request #156 from cash/cache_lang
Fixes #2877 Adds language string caching to system cache
-rw-r--r--engine/classes/ElggFileCache.php19
-rw-r--r--engine/lib/cache.php16
-rw-r--r--engine/lib/configuration.php2
-rw-r--r--engine/lib/elgglib.php7
-rw-r--r--engine/lib/languages.php41
5 files changed, 69 insertions, 16 deletions
diff --git a/engine/classes/ElggFileCache.php b/engine/classes/ElggFileCache.php
index 8304372dc..34178d452 100644
--- a/engine/classes/ElggFileCache.php
+++ b/engine/classes/ElggFileCache.php
@@ -161,12 +161,25 @@ class ElggFileCache extends ElggCache {
}
/**
- * This was probably meant to delete everything?
+ * Delete all files in the directory of this file cache
*
* @return void
*/
public function clear() {
- // @todo writeme
+ $dir = $this->getVariable("cache_path");
+
+ $exclude = array(".", "..");
+
+ $files = scandir($dir);
+ if (!$files) {
+ return;
+ }
+
+ foreach ($files as $f) {
+ if (!in_array($f, $exclude)) {
+ unlink($dir . $f);
+ }
+ }
}
/**
@@ -184,7 +197,7 @@ class ElggFileCache extends ElggCache {
return;
}
- $exclude = array(".","..");
+ $exclude = array(".", "..");
$files = scandir($dir);
if (!$files) {
diff --git a/engine/lib/cache.php b/engine/lib/cache.php
index d4cd6b460..c117b9ec9 100644
--- a/engine/lib/cache.php
+++ b/engine/lib/cache.php
@@ -35,17 +35,11 @@ function elgg_get_system_cache() {
/**
* Reset the system cache by deleting the caches
*
- * @return bool
+ * @return void
*/
function elgg_reset_system_cache() {
$cache = elgg_get_system_cache();
-
- $result = true;
- $cache_types = array('view_locations', 'view_types');
- foreach ($cache_types as $type) {
- $result = $result && $cache->delete($type);
- }
- return $result;
+ $cache->clear();
}
/**
@@ -446,6 +440,12 @@ function _elgg_cache_init() {
elgg_save_system_cache('view_locations', serialize($CONFIG->views->locations));
elgg_save_system_cache('view_types', serialize($CONFIG->view_types));
}
+
+ if ($CONFIG->system_cache_enabled && !$CONFIG->i18n_loaded_from_cache) {
+ foreach ($CONFIG->translations as $lang => $map) {
+ elgg_save_system_cache("$lang.php", serialize($map));
+ }
+ }
}
elgg_register_event_handler('ready', 'system', '_elgg_cache_init');
diff --git a/engine/lib/configuration.php b/engine/lib/configuration.php
index d32a5c4b6..9bf1529d6 100644
--- a/engine/lib/configuration.php
+++ b/engine/lib/configuration.php
@@ -614,6 +614,8 @@ function _elgg_load_application_config() {
$lastcached = datalist_get("simplecache_lastcached_$viewtype");
$CONFIG->lastcache = $lastcached;
+ $CONFIG->i18n_loaded_from_cache = false;
+
// this must be synced with the enum for the entities table
$CONFIG->entity_types = array('group', 'object', 'site', 'user');
}
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index aba84bd48..11bdc7285 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -2062,7 +2062,8 @@ function elgg_walled_garden() {
* 2. connects to database
* 3. verifies the installation suceeded
* 4. loads application configuration
- * 5. loads site configuration
+ * 5. loads i18n data
+ * 6. loads site configuration
*
* @access private
*/
@@ -2071,14 +2072,14 @@ function _elgg_engine_boot() {
set_error_handler('_elgg_php_error_handler');
set_exception_handler('_elgg_php_exception_handler');
- register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
-
setup_db_connections();
verify_installation();
_elgg_load_application_config();
+ register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
+
_elgg_load_site_config();
_elgg_load_cache();
diff --git a/engine/lib/languages.php b/engine/lib/languages.php
index 80c789ced..bf6829a39 100644
--- a/engine/lib/languages.php
+++ b/engine/lib/languages.php
@@ -145,9 +145,16 @@ function elgg_echo($message_key, $args = array(), $language = "") {
function register_translations($path, $load_all = false) {
global $CONFIG;
+ static $load_from_cache;
+ static $cache_loaded_langs;
+ if (!isset($load_from_cache)) {
+ $load_from_cache = $CONFIG->system_cache_enabled;
+ $cache_loaded_langs = array();
+ }
+
$path = sanitise_filepath($path);
- // Make a note of this path just incase we need to register this language later
+ // Make a note of this path just in case we need to register this language later
if (!isset($CONFIG->language_paths)) {
$CONFIG->language_paths = array();
}
@@ -155,7 +162,6 @@ function register_translations($path, $load_all = false) {
// Get the current language based on site defaults and user preference
$current_language = get_current_language();
- elgg_log("Translations loaded from: $path");
// only load these files unless $load_all is true.
$load_language_files = array(
@@ -165,6 +171,32 @@ function register_translations($path, $load_all = false) {
$load_language_files = array_unique($load_language_files);
+ if ($load_from_cache && !$load_all) {
+ // load language files from cache
+ $data = array();
+ foreach ($load_language_files as $lang_file) {
+ $lang = substr($lang_file, 0, strpos($lang_file, '.'));
+ if (!isset($cache_loaded_langs[$lang])) {
+ $data[$lang] = elgg_load_system_cache($lang_file);
+ if ($data[$lang]) {
+ $cache_loaded_langs[$lang] = true;
+ } else {
+ // this language file not cached yet
+ $load_from_cache = false;
+ }
+ }
+ }
+
+ // are we still suppose to load from cache
+ if ($load_from_cache) {
+ foreach ($data as $lang => $map) {
+ add_translation($lang, unserialize($map));
+ }
+ $CONFIG->i18n_loaded_from_cache = true;
+ return true;
+ }
+ }
+
$handle = opendir($path);
if (!$handle) {
elgg_log("Could not open language path: $path", 'ERROR');
@@ -186,6 +218,11 @@ function register_translations($path, $load_all = false) {
}
}
+ elgg_log("Translations loaded from: $path");
+
+ // make sure caching code saves language data if system cache is on
+ $CONFIG->i18n_loaded_from_cache = false;
+
return $return;
}