diff options
Diffstat (limited to 'engine/lib/cache.php')
| -rw-r--r-- | engine/lib/cache.php | 86 |
1 files changed, 64 insertions, 22 deletions
diff --git a/engine/lib/cache.php b/engine/lib/cache.php index b563f5ab0..3116c1a9b 100644 --- a/engine/lib/cache.php +++ b/engine/lib/cache.php @@ -26,7 +26,7 @@ function elgg_get_system_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; @@ -35,13 +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(); - $view_types_result = $cache->delete('view_types'); - $views_result = $cache->delete('views'); - return $view_types_result && $views_result; + $cache->clear(); } /** @@ -54,7 +52,7 @@ function elgg_reset_system_cache() { function elgg_save_system_cache($type, $data) { global $CONFIG; - if ($CONFIG->viewpath_cache_enabled) { + if ($CONFIG->system_cache_enabled) { $cache = elgg_get_system_cache(); return $cache->save($type, $data); } @@ -71,7 +69,7 @@ function elgg_save_system_cache($type, $data) { function elgg_load_system_cache($type) { global $CONFIG; - if ($CONFIG->viewpath_cache_enabled) { + if ($CONFIG->system_cache_enabled) { $cache = elgg_get_system_cache(); $cached_data = $cache->load($type); @@ -86,7 +84,7 @@ function elgg_load_system_cache($type) { /** * Enables the system disk cache. * - * Uses the 'viewpath_cache_enabled' datalist with a boolean value. + * Uses the 'system_cache_enabled' datalist with a boolean value. * Resets the system cache. * * @return void @@ -94,15 +92,15 @@ function elgg_load_system_cache($type) { function elgg_enable_system_cache() { global $CONFIG; - datalist_set('viewpath_cache_enabled', 1); - $CONFIG->viewpath_cache_enabled = 1; + datalist_set('system_cache_enabled', 1); + $CONFIG->system_cache_enabled = 1; elgg_reset_system_cache(); } /** * Disables the system disk cache. * - * Uses the 'viewpath_cache_enabled' datalist with a boolean value. + * Uses the 'system_cache_enabled' datalist with a boolean value. * Resets the system cache. * * @return void @@ -110,8 +108,8 @@ function elgg_enable_system_cache() { function elgg_disable_system_cache() { global $CONFIG; - datalist_set('viewpath_cache_enabled', 0); - $CONFIG->viewpath_cache_enabled = 0; + datalist_set('system_cache_enabled', 0); + $CONFIG->system_cache_enabled = 0; elgg_reset_system_cache(); } @@ -127,7 +125,7 @@ function elgg_get_filepath_cache() { * @access private */ function elgg_filepath_cache_reset() { - return elgg_reset_system_cache(); + elgg_reset_system_cache(); } /** * @access private @@ -145,13 +143,13 @@ function elgg_filepath_cache_load($type) { * @access private */ function elgg_enable_filepath_cache() { - return elgg_enable_system_cache(); + elgg_enable_system_cache(); } /** * @access private */ function elgg_disable_filepath_cache() { - return elgg_disable_system_cache(); + elgg_disable_system_cache(); } /* Simplecache */ @@ -210,6 +208,7 @@ function elgg_get_simplecache_url($type, $view) { global $CONFIG; $lastcache = (int)$CONFIG->lastcache; $viewtype = elgg_get_viewtype(); + elgg_register_simplecache_view("$type/$view");// see #5302 if (elgg_is_simplecache_enabled()) { $url = elgg_get_site_url() . "cache/$type/$viewtype/$view.$lastcache.$type"; } else { @@ -224,7 +223,7 @@ function elgg_get_simplecache_url($type, $view) { /** * Regenerates the simple cache. * - * @warning This does not invalidate the cache, but actively resets it. + * @warning This does not invalidate the cache, but actively rebuilds it. * * @param string $viewtype Optional viewtype to regenerate. Defaults to all valid viewtypes. * @@ -371,7 +370,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); @@ -384,14 +383,44 @@ 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; } -function elgg_cache_init() { +/** + * @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. @@ -406,6 +435,19 @@ function elgg_cache_init() { } $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) { + reload_all_translations(); + foreach ($CONFIG->translations as $lang => $map) { + elgg_save_system_cache("$lang.lang", serialize($map)); + } + } } -elgg_register_event_handler('ready', 'system', 'elgg_cache_init');
\ No newline at end of file +elgg_register_event_handler('ready', 'system', '_elgg_cache_init'); |
