Initial Kohana install
[speedfreak] / Server / system / libraries / drivers / Cache / Xcache.php
diff --git a/Server/system/libraries/drivers/Cache/Xcache.php b/Server/system/libraries/drivers/Cache/Xcache.php
new file mode 100644 (file)
index 0000000..6254bbb
--- /dev/null
@@ -0,0 +1,119 @@
+<?php defined('SYSPATH') OR die('No direct access allowed.');
+/**
+ * Xcache Cache driver.
+ *
+ * $Id: Xcache.php 4046 2009-03-05 19:23:29Z Shadowhand $
+ *
+ * @package    Cache
+ * @author     Kohana Team
+ * @copyright  (c) 2007-2008 Kohana Team
+ * @license    http://kohanaphp.com/license.html
+ */
+class Cache_Xcache_Driver implements Cache_Driver {
+
+       public function __construct()
+       {
+               if ( ! extension_loaded('xcache'))
+                       throw new Kohana_Exception('cache.extension_not_loaded', 'xcache');
+       }
+
+       public function get($id)
+       {
+               if (xcache_isset($id))
+                       return xcache_get($id);
+
+               return NULL;
+       }
+
+       public function set($id, $data, array $tags = NULL, $lifetime)
+       {
+               if ( ! empty($tags))
+               {
+                       Kohana::log('error', 'Cache: tags are unsupported by the Xcache driver');
+               }
+
+               return xcache_set($id, $data, $lifetime);
+       }
+
+       public function find($tag)
+       {
+               Kohana::log('error', 'Cache: tags are unsupported by the Xcache driver');
+               return FALSE;
+       }
+
+       public function delete($id, $tag = FALSE)
+       {
+               if ($tag !== FALSE)
+               {
+                       Kohana::log('error', 'Cache: tags are unsupported by the Xcache driver');
+                       return TRUE;
+               }
+               elseif ($id !== TRUE)
+               {
+                       if (xcache_isset($id))
+                               return xcache_unset($id);
+
+                       return FALSE;
+               }
+               else
+               {
+                       // Do the login
+                       $this->auth();
+                       $result = TRUE;
+                       for ($i = 0, $max = xcache_count(XC_TYPE_VAR); $i < $max; $i++)
+                       {
+                               if (xcache_clear_cache(XC_TYPE_VAR, $i) !== NULL)
+                               {
+                                       $result = FALSE;
+                                       break;
+                               }
+                       }
+
+                       // Undo the login
+                       $this->auth(TRUE);
+                       return $result;
+               }
+
+               return TRUE;
+       }
+
+       public function delete_expired()
+       {
+               return TRUE;
+       }
+
+       private function auth($reverse = FALSE)
+       {
+               static $backup = array();
+
+               $keys = array('PHP_AUTH_USER', 'PHP_AUTH_PW');
+
+               foreach ($keys as $key)
+               {
+                       if ($reverse)
+                       {
+                               if (isset($backup[$key]))
+                               {
+                                       $_SERVER[$key] = $backup[$key];
+                                       unset($backup[$key]);
+                               }
+                               else
+                               {
+                                       unset($_SERVER[$key]);
+                               }
+                       }
+                       else
+                       {
+                               $value = getenv($key);
+
+                               if ( ! empty($value))
+                               {
+                                       $backup[$key] = $value;
+                               }
+
+                               $_SERVER[$key] = Kohana::config('cache_xcache.'.$key);
+                       }
+               }
+       }
+
+} // End Cache Xcache Driver