summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--application/config/config.php6
-rw-r--r--modules/gallery/helpers/gallery_event.php1
-rw-r--r--system/core/Kohana.php47
3 files changed, 37 insertions, 17 deletions
diff --git a/application/config/config.php b/application/config/config.php
index aecc400c..1c5bccb7 100644
--- a/application/config/config.php
+++ b/application/config/config.php
@@ -67,6 +67,12 @@ $config["url_suffix"] = "";
* can give significant speed improvements at the expense of delayed updating.
*/
$config["internal_cache"] = FALSE;
+/**
+ * Enable or disable writing to the internal cache. Used by Gallery to treat
+ * the cache as read-only until all active modules and themes are in the
+ * include path.
+ */
+$config["internal_cache_read_only"] = TRUE;
$config["internal_cache_path"] = VARPATH . "tmp/";
/**
diff --git a/modules/gallery/helpers/gallery_event.php b/modules/gallery/helpers/gallery_event.php
index 36f91142..a6783bc6 100644
--- a/modules/gallery/helpers/gallery_event.php
+++ b/modules/gallery/helpers/gallery_event.php
@@ -25,6 +25,7 @@ class gallery_event_Core {
static function gallery_ready() {
identity::load_user();
theme::load_themes();
+ Kohana_Config::instance()->set('core.internal_cache_read_only', false);
locales::set_request_locale();
}
diff --git a/system/core/Kohana.php b/system/core/Kohana.php
index ae056d0e..1ed6d725 100644
--- a/system/core/Kohana.php
+++ b/system/core/Kohana.php
@@ -365,13 +365,17 @@ abstract class Kohana_Core {
// Add SYSPATH as the last path
Kohana::$include_paths[] = SYSPATH;
- // Clear cached include paths
- self::$internal_cache['find_file_paths'] = array();
- if ( ! isset(self::$write_cache['find_file_paths']))
+ if ( ! Kohana::config('core.internal_cache_read_only'))
{
- // Write cache at shutdown
- self::$write_cache['find_file_paths'] = TRUE;
- }
+ // Clear cached include paths
+ self::$internal_cache['find_file_paths'] = array();
+
+ if ( ! isset(self::$write_cache['find_file_paths']))
+ {
+ // Write cache at shutdown
+ self::$write_cache['find_file_paths'] = TRUE;
+ }
+ }
}
@@ -818,13 +822,17 @@ abstract class Kohana_Core {
}
}
- if ( ! isset(Kohana::$write_cache['find_file_paths']))
+ if ( ! Kohana::config('core.internal_cache_read_only'))
{
- // Write cache at shutdown
- Kohana::$write_cache['find_file_paths'] = TRUE;
- }
+ Kohana::$internal_cache['find_file_paths'][$search] = $found;
- return Kohana::$internal_cache['find_file_paths'][$search] = $found;
+ if ( ! isset(Kohana::$write_cache['find_file_paths']))
+ {
+ // Write cache at shutdown
+ Kohana::$write_cache['find_file_paths'] = TRUE;
+ }
+ }
+ return $found;
}
/**
@@ -900,8 +908,7 @@ abstract class Kohana_Core {
public static function message($key, $args = array())
{
// Extract the main group from the key
- $group = explode('.', $key, 2);
- $group = $group[0];
+ list ($group, $subkey) = explode('.', $key, 2);
if ( ! isset(Kohana::$internal_cache['messages'][$group]))
{
@@ -913,17 +920,23 @@ abstract class Kohana_Core {
include $file[0];
}
- if ( ! isset(Kohana::$write_cache['messages']))
+ if ( ! isset(Kohana::$write_cache['messages']) && ! Kohana::config('core.internal_cache_read_only'))
{
// Write language cache
Kohana::$write_cache['messages'] = TRUE;
}
-
- Kohana::$internal_cache['messages'][$group] = $messages;
+ if ( ! Kohana::config('core.internal_cache_read_only'))
+ {
+ Kohana::$internal_cache['messages'][$group] = $messages;
+ }
+ }
+ else
+ {
+ $messages = Kohana::$internal_cache['messages'][$group];
}
// Get the line from cache
- $line = Kohana::key_string(Kohana::$internal_cache['messages'], $key);
+ $line = Kohana::key_string($messages, $subkey);
if ($line === NULL)
{