diff options
| author | Sem <sembrestels@riseup.net> | 2012-04-25 19:09:22 +0200 | 
|---|---|---|
| committer | Sem <sembrestels@riseup.net> | 2012-04-25 19:09:22 +0200 | 
| commit | 9fe063022e08a4b6fa5f5935f8f185d5d95814a4 (patch) | |
| tree | 87377f7b889efc639935508556beb9baf010e821 /engine/lib/cache.php | |
| parent | 24690ed95198c093e6fbb91a94b5d0544c740f89 (diff) | |
| download | elgg-9fe063022e08a4b6fa5f5935f8f185d5d95814a4.tar.gz elgg-9fe063022e08a4b6fa5f5935f8f185d5d95814a4.tar.bz2  | |
Upgraded to Elgg 1.8.4.
Diffstat (limited to 'engine/lib/cache.php')
| -rw-r--r-- | engine/lib/cache.php | 171 | 
1 files changed, 134 insertions, 37 deletions
diff --git a/engine/lib/cache.php b/engine/lib/cache.php index e71ef332d..c117b9ec9 100644 --- a/engine/lib/cache.php +++ b/engine/lib/cache.php @@ -10,15 +10,14 @@  /* Filepath Cache */  /** - * Returns an ElggCache object suitable for caching view - * file load paths to disk under $CONFIG->dataroot. + * Returns an ElggCache object suitable for caching system information   *   * @todo Can this be done in a cleaner way?   * @todo Swap to memcache etc?   * - * @return ElggFileCache A cache object suitable for caching file load paths. + * @return ElggFileCache   */ -function elgg_get_filepath_cache() { +function elgg_get_system_cache() {  	global $CONFIG;  	/** @@ -27,36 +26,34 @@ function elgg_get_filepath_cache() {  	static $FILE_PATH_CACHE;  	if (!$FILE_PATH_CACHE) { -		$FILE_PATH_CACHE = new ElggFileCache($CONFIG->dataroot); +		$FILE_PATH_CACHE = new ElggFileCache($CONFIG->dataroot . 'system_cache/');  	}  	return $FILE_PATH_CACHE;  }  /** - * Reset the file path cache. + * Reset the system cache by deleting the caches   * - * @return bool + * @return void   */ -function elgg_filepath_cache_reset() { -	$cache = elgg_get_filepath_cache(); -	$view_types_result = $cache->delete('view_types'); -	$views_result = $cache->delete('views'); -	return $view_types_result && $views_result; +function elgg_reset_system_cache() { +	$cache = elgg_get_system_cache(); +	$cache->clear();  }  /** - * Saves a filepath cache. + * Saves a system cache.   *   * @param string $type The type or identifier of the cache   * @param string $data The data to be saved   * @return bool   */ -function elgg_filepath_cache_save($type, $data) { +function elgg_save_system_cache($type, $data) {  	global $CONFIG; -	if ($CONFIG->viewpath_cache_enabled) { -		$cache = elgg_get_filepath_cache(); +	if ($CONFIG->system_cache_enabled) { +		$cache = elgg_get_system_cache();  		return $cache->save($type, $data);  	} @@ -64,16 +61,16 @@ function elgg_filepath_cache_save($type, $data) {  }  /** - * Retrieve the contents of the filepath cache. + * Retrieve the contents of a system cache.   *   * @param string $type The type of cache to load   * @return string   */ -function elgg_filepath_cache_load($type) { +function elgg_load_system_cache($type) {  	global $CONFIG; -	if ($CONFIG->viewpath_cache_enabled) { -		$cache = elgg_get_filepath_cache(); +	if ($CONFIG->system_cache_enabled) { +		$cache = elgg_get_system_cache();  		$cached_data = $cache->load($type);  		if ($cached_data) { @@ -85,35 +82,74 @@ function elgg_filepath_cache_load($type) {  }  /** - * Enables the views file paths disk cache. + * Enables the system disk cache.   * - * Uses the 'viewpath_cache_enabled' datalist with a boolean value. - * Resets the views paths cache. + * Uses the 'system_cache_enabled' datalist with a boolean value. + * Resets the system cache.   *   * @return void   */ -function elgg_enable_filepath_cache() { +function elgg_enable_system_cache() {  	global $CONFIG; -	datalist_set('viewpath_cache_enabled', 1); -	$CONFIG->viewpath_cache_enabled = 1; -	elgg_filepath_cache_reset(); +	datalist_set('system_cache_enabled', 1); +	$CONFIG->system_cache_enabled = 1; +	elgg_reset_system_cache();  }  /** - * Disables the views file paths disk cache. + * Disables the system disk cache.   * - * Uses the 'viewpath_cache_enabled' datalist with a boolean value. - * Resets the views paths cache. + * Uses the 'system_cache_enabled' datalist with a boolean value. + * Resets the system cache.   *   * @return void   */ -function elgg_disable_filepath_cache() { +function elgg_disable_system_cache() {  	global $CONFIG; -	datalist_set('viewpath_cache_enabled', 0); -	$CONFIG->viewpath_cache_enabled = 0; -	elgg_filepath_cache_reset(); +	datalist_set('system_cache_enabled', 0); +	$CONFIG->system_cache_enabled = 0; +	elgg_reset_system_cache(); +} + +/** @todo deprecate in Elgg 1.9 **/ + +/** + * @access private + */ +function elgg_get_filepath_cache() { +	return elgg_get_system_cache(); +} +/** + * @access private + */ +function elgg_filepath_cache_reset() { +	return elgg_reset_system_cache(); +} +/** + * @access private + */ +function elgg_filepath_cache_save($type, $data) { +	return elgg_save_system_cache($type, $data); +} +/** + * @access private + */ +function elgg_filepath_cache_load($type) { +	return elgg_load_system_cache($type); +} +/** + * @access private + */ +function elgg_enable_filepath_cache() { +	return elgg_enable_system_cache(); +} +/** + * @access private + */ +function elgg_disable_filepath_cache() { +	return elgg_disable_system_cache();  }  /* Simplecache */ @@ -333,7 +369,7 @@ function elgg_invalidate_simplecache() {  	$return = true;  	while (false !== ($file = readdir($handle))) {  		if ($file != "." && $file != "..") { -			$return = $return && unlink($CONFIG->dataroot . 'views_simplecache/' . $file); +			$return &= unlink($CONFIG->dataroot . 'views_simplecache/' . $file);  		}  	}  	closedir($handle); @@ -346,9 +382,70 @@ function elgg_invalidate_simplecache() {  	}  	foreach ($viewtypes as $viewtype) { -		$return = $return && datalist_set("simplecache_lastupdate_$viewtype", 0); -		$return = $return && datalist_set("simplecache_lastcached_$viewtype", 0); +		$return &= datalist_set("simplecache_lastupdate_$viewtype", 0); +		$return &= datalist_set("simplecache_lastcached_$viewtype", 0);  	}  	return $return;  } + +/** + * @see elgg_reset_system_cache() + * @access private + */ +function _elgg_load_cache() { +	global $CONFIG; + +	$CONFIG->system_cache_loaded = false; + +	$CONFIG->views = new stdClass(); +	$data = elgg_load_system_cache('view_locations'); +	if (!is_string($data)) { +		return; +	} +	$CONFIG->views->locations = unserialize($data); +	 +	$data = elgg_load_system_cache('view_types'); +	if (!is_string($data)) { +		return; +	} +	$CONFIG->view_types = unserialize($data); + +	$CONFIG->system_cache_loaded = true; +} + +/** + * @access private + */ +function _elgg_cache_init() { +	global $CONFIG; + +	$viewtype = elgg_get_viewtype(); + +	// Regenerate the simple cache if expired. +	// Don't do it on upgrade because upgrade does it itself. +	// @todo - move into function and perhaps run off init system event +	if (!defined('UPGRADING')) { +		$lastupdate = datalist_get("simplecache_lastupdate_$viewtype"); +		$lastcached = datalist_get("simplecache_lastcached_$viewtype"); +		if ($lastupdate == 0 || $lastcached < $lastupdate) { +			elgg_regenerate_simplecache($viewtype); +			$lastcached = datalist_get("simplecache_lastcached_$viewtype"); +		} +		$CONFIG->lastcache = $lastcached; +	} + +	// cache system data if enabled and not loaded +	if ($CONFIG->system_cache_enabled && !$CONFIG->system_cache_loaded) { +		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');  | 
