aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/cache.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/lib/cache.php')
-rw-r--r--engine/lib/cache.php86
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');