diff options
-rw-r--r-- | engine/classes/ElggFileCache.php | 19 | ||||
-rw-r--r-- | engine/lib/cache.php | 16 | ||||
-rw-r--r-- | engine/lib/configuration.php | 2 | ||||
-rw-r--r-- | engine/lib/elgglib.php | 7 | ||||
-rw-r--r-- | engine/lib/languages.php | 41 |
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; } |