aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/cache.php49
-rw-r--r--engine/lib/elgglib.php2
-rw-r--r--engine/lib/plugins.php17
3 files changed, 50 insertions, 18 deletions
diff --git a/engine/lib/cache.php b/engine/lib/cache.php
index cfda26e52..633c470eb 100644
--- a/engine/lib/cache.php
+++ b/engine/lib/cache.php
@@ -395,7 +395,40 @@ function elgg_invalidate_simplecache() {
return $return;
}
-function elgg_cache_init() {
+/**
+ * @see elgg_reset_system_cache()
+ * @access private
+ */
+function _elgg_load_cache() {
+ global $CONFIG;
+
+ $result = true;
+ $cache_types = array(
+ 'view_paths' => 'views',
+ 'view_types' => 'view_types',
+ );
+ $data = array();
+ foreach ($cache_types as $type => $var_name) {
+ $data[$var_name] = elgg_load_system_cache($type);
+ $result = $result && is_string($data[$var_name]);
+ }
+
+ if ($result) {
+ $CONFIG->system_cache_loaded = true;
+ foreach ($data as $name => $value) {
+ $CONFIG->$name = unserialize($value);
+ }
+ } else {
+ $CONFIG->system_cache_loaded = false;
+ }
+}
+
+/**
+ * @access private
+ */
+function _elgg_cache_init() {
+ global $CONFIG;
+
$viewtype = elgg_get_viewtype();
// Regenerate the simple cache if expired.
@@ -410,6 +443,18 @@ function elgg_cache_init() {
}
$CONFIG->lastcache = $lastcached;
}
+
+ // cache system data if enabled and not loaded
+ if ($CONFIG->system_cache_enabled && !$CONFIG->system_cache_loaded) {
+ $cache_types = array(
+ 'view_paths' => 'views',
+ 'view_types' => 'view_types',
+ );
+ $data = array();
+ foreach ($cache_types as $type => $var_name) {
+ elgg_save_system_cache($type, serialize($CONFIG->$var_name));
+ }
+ }
}
-elgg_register_event_handler('ready', 'system', 'elgg_cache_init'); \ No newline at end of file
+elgg_register_event_handler('ready', 'system', '_elgg_cache_init');
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 98e7af2a9..3c56567e9 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -2080,6 +2080,8 @@ function _elgg_engine_boot() {
_elgg_load_application_config();
_elgg_load_site_config();
+
+ _elgg_load_cache();
}
/**
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
index d9c7b321b..07b21d276 100644
--- a/engine/lib/plugins.php
+++ b/engine/lib/plugins.php
@@ -301,16 +301,7 @@ function elgg_load_plugins() {
return false;
}
- // Load view caches if available
- $cached_view_paths = elgg_load_system_cache('view_paths');
- $cached_view_types = elgg_load_system_cache('view_types');
- $cached_view_info = is_string($cached_view_paths) && is_string($cached_view_types);
-
- if ($cached_view_info) {
- $CONFIG->views = unserialize($cached_view_paths);
- $CONFIG->view_types = unserialize($cached_view_types);
-
- // don't need to register views
+ if (elgg_get_config('system_cache_loaded')) {
$start_flags = $start_flags & ~ELGG_PLUGIN_REGISTER_VIEWS;
}
@@ -332,12 +323,6 @@ function elgg_load_plugins() {
}
}
- // Cache results
- if (!$cached_view_info) {
- elgg_save_system_cache('view_paths', serialize($CONFIG->views));
- elgg_save_system_cache('view_types', serialize($CONFIG->view_types));
- }
-
return $return;
}