diff options
| author | cash <cash.costello@gmail.com> | 2012-02-04 13:05:31 -0500 | 
|---|---|---|
| committer | cash <cash.costello@gmail.com> | 2012-02-04 13:05:31 -0500 | 
| commit | 601ec5ccf5eb6940ca468b31e1b400412697c8cb (patch) | |
| tree | 639b9d1d3591d61c86808a60fe354bce811ce52e /engine/lib | |
| parent | 76d089fe3662a7051258d6d1843a1167ea8017b1 (diff) | |
| parent | 06ba6ccfb8bb5a8da8464d8f86454b468744c9cc (diff) | |
| download | elgg-601ec5ccf5eb6940ca468b31e1b400412697c8cb.tar.gz elgg-601ec5ccf5eb6940ca468b31e1b400412697c8cb.tar.bz2  | |
Merge pull request #156 from cash/cache_lang
Fixes #2877 Adds language string caching to system cache
Diffstat (limited to 'engine/lib')
| -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 | 
4 files changed, 53 insertions, 13 deletions
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;  }  | 
