diff -urp views/views.module views_gzip/views.module --- views/views.module 2007-07-14 20:54:16.000000000 +0200 +++ views_gzip/views.module 2008-02-26 17:22:47.000000000 +0100 @@ -179,7 +179,7 @@ function views_menu_admin_items(&$items, * overly intensive. */ function views_get_all_urls() { - $cache = cache_get("views_urls", 'cache_views'); + $cache = views_cache_get("views_urls"); if ($cache == 0) { $views = array(); $used = array(); @@ -200,10 +200,10 @@ function views_get_all_urls() { $views[$view->name] = $view->url; } } - cache_set("views_urls", 'cache_views', serialize($views)); + views_cache_set("views_urls", $views); } else { - $views = unserialize($cache->data); + $views = $cache->data; } return $views; @@ -2143,4 +2143,60 @@ function views_form_alter($form_id, &$fo // An implementation of hook_devel_caches() from devel.module. Must be in views.module so it always is included. function views_devel_caches() { return array('cache_views'); +} + +define('VIEWS_GZIP_TOKEN', 'GZIP_'); + +/** + * Abstracted cache_set() implements gzip compression if available + * see: http://drupal.org/node/121390 +*/ +function views_cache_set($cid, $object) { + $data = serialize($object); + if (views_use_compression()) { + $data = VIEWS_GZIP_TOKEN.gzcompress($data); + } + cache_set($cid, 'cache_views', $data); +} + +/** + * Abstracted cache_get() implements gzip compression if available + * see: http://drupal.org/node/121390 +*/ +function views_cache_get($cid) { + $data = cache_get($cid, 'cache_views'); + if ($data) { + if (strpos($data->data, VIEWS_GZIP_TOKEN) !== FALSE) { // see if the data is gzipd + if (views_use_compression()) { + $data->data = gzuncompress(substr($data->data, strlen(VIEWS_GZIP_TOKEN))); + } + else { + cache_clear_all($cid, 'cache_views'); // gzipd data we can't use, invalidate it + return 0; + } + } + $data->data = unserialize($data->data); + return $data; + } + return 0; +} + +/** + * checks for availability of gzip compression functions and sets/returns true/false accordingly +*/ +function views_use_compression() { + $var = variable_get('views_use_compression', -1); + if ($var != -1) { + return $var; + } + else { + if (function_exists('gzcompress') && function_exists('gzuncompress')) { + variable_set('views_use_compression', 1); + return 1; + } + else { + variable_set('views_use_compression', 0); + return 0; + } + } } \ No newline at end of file diff -urp views/views_cache.inc views_gzip/views_cache.inc --- views/views_cache.inc 2007-07-14 21:12:02.000000000 +0200 +++ views_gzip/views_cache.inc 2008-02-26 17:34:57.000000000 +0100 @@ -27,8 +27,8 @@ function _views_get_arguments($titles = global $locale; if (!$views_arguments) { - $data = cache_get("views_arguments:$locale", 'cache_views'); - $cache = unserialize($data->data); + $data = views_cache_get("views_arguments:$locale"); + $cache = $data->data; if (is_array($cache)) { $views_arguments = $cache; } @@ -54,7 +54,7 @@ function _views_get_arguments($titles = $views_arguments['title'][$name] = $arg; } $cache = $views_arguments; - cache_set("views_arguments:$locale", 'cache_views', serialize($cache)); + views_cache_set("views_arguments:$locale", $cache); } } return ($titles ? $views_arguments['base'] : $views_arguments['title']); @@ -69,8 +69,8 @@ function _views_get_tables($full = false global $locale; if (!$views_tables) { - $data = cache_get("views_tables:$locale", 'cache_views'); - $cache = unserialize($data->data); + $data = views_cache_get("views_tables:$locale"); + $cache = $data->data; if (is_array($cache)) { $views_tables = $cache; @@ -143,7 +143,7 @@ function _views_get_tables($full = false } } } - cache_set("views_tables:$locale", 'cache_views', serialize($views_tables)); + views_cache_set("views_tables:$locale", $views_tables); } } return ($full ? $views_tables : $views_tables['tables']); @@ -223,8 +223,8 @@ function _views_get_default_views() { global $locale; if (!$views_default_views) { - $data = cache_get("views_default_views:$locale", 'cache_views'); - $cache = unserialize($data->data); + $data = views_cache_get("views_default_views:$locale"); + $cache = $data->data; if (is_array($cache)) { $views_default_views = $cache; @@ -243,7 +243,7 @@ function _views_get_default_views() { $views_default_views[$i] = $view; } } - cache_set("views_default_views:$locale", 'cache_views', serialize($views_default_views)); + views_cache_set("views_default_views:$locale", $views_default_views); } } return $views_default_views; @@ -265,8 +265,8 @@ function _views_sort_arrays($a, $b) { } function _views_get_query(&$view, $args, $filters) { - if ($view->is_cacheable && ($cached = cache_get('views_query:' . $view->name, 'cache_views'))) { - $info = unserialize($cached->data); + if ($view->is_cacheable && ($cached = views_cache_get('views_query:' . $view->name))) { + $info = unserialize($cached->data[0]); $plugins = _views_get_style_plugins(); if ($plugins[$view->type]['needs_table_header']) { @@ -277,8 +277,8 @@ function _views_get_query(&$view, $args, views_load_query(); $info = _views_build_query($view, $args, $filters); $data = array( - 'query' => _views_replace_args($info['query'], $info['args']), - 'countquery' => _views_replace_args($info['countquery'], $info['args']), + 'query' => _views_replace_args($info['query'], $info['args']), + 'countquery' => _views_replace_args($info['countquery'], $info['args']), ); if ($view->is_cacheable) { cache_set('views_query:' . $view->name, 'cache_views', serialize($data)); @@ -312,8 +312,8 @@ function _views_get_style_plugins($title global $locale; if (!$views_style_plugins) { - $data = cache_get("views_style_plugins:$locale", 'cache_views'); - $cache = unserialize($data->data); + $data = views_cache_get("views_style_plugins:$locale"); + $cache = unserialize($data->data[0]); if (is_array($cache)) { $views_style_plugins = $cache; } @@ -328,7 +328,7 @@ function _views_get_style_plugins($title $views_style_plugins['base'][$name] = $arg; } $cache = $views_style_plugins; - cache_set("views_style_plugins:$locale", 'cache_views', serialize($cache)); + views_cache_set("views_style_plugins:$locale", $cache); } } return ($titles ? $views_style_plugins['title'] : $views_style_plugins['base']);