summaryrefslogtreecommitdiffstats
path: root/system/libraries/Cache/Cache.php
diff options
context:
space:
mode:
authorGreg Aker <greg.aker@ellislab.com>2010-12-21 16:31:21 +0100
committerGreg Aker <greg.aker@ellislab.com>2010-12-21 16:31:21 +0100
commitbde25d971bfbf4a54f1d40eedfd3290ebb5f91e5 (patch)
tree1b13cd8a3825142c1afaaf603d91b16641cf37a1 /system/libraries/Cache/Cache.php
parentfd6948997faf5f064f76353da65bd1d0ec65ec51 (diff)
Initial commit of Caching Driver.
Diffstat (limited to 'system/libraries/Cache/Cache.php')
-rw-r--r--system/libraries/Cache/Cache.php216
1 files changed, 216 insertions, 0 deletions
diff --git a/system/libraries/Cache/Cache.php b/system/libraries/Cache/Cache.php
new file mode 100644
index 000000000..ea3194237
--- /dev/null
+++ b/system/libraries/Cache/Cache.php
@@ -0,0 +1,216 @@
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+/**
+ * CodeIgniter
+ *
+ * An open source application development framework for PHP 4.3.2 or newer
+ *
+ * @package CodeIgniter
+ * @author ExpressionEngine Dev Team
+ * @copyright Copyright (c) 2006 - 2010 EllisLab, Inc.
+ * @license http://codeigniter.com/user_guide/license.html
+ * @link http://codeigniter.com
+ * @since Version 2.0
+ * @filesource
+ */
+
+// ------------------------------------------------------------------------
+
+/**
+ * CodeIgniter Caching Class
+ *
+ * @package CodeIgniter
+ * @subpackage Libraries
+ * @category Core
+ * @author ExpressionEngine Dev Team
+ * @link
+ */
+class Cache extends CI_Driver_Library {
+
+ protected $valid_drivers = array(
+ 'cache_apc', 'cache_file', 'cache_memcached', 'cache_dummy'
+ );
+
+ protected $_cache_path = NULL; // Path of cache files (if file-based cache)
+ protected $_adapter = 'dummy';
+ protected $_backup_driver;
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Constructor
+ *
+ * @param array
+ */
+ public function __construct($config = array())
+ {
+ if ( ! empty($config))
+ {
+ $this->_initialize($config);
+ }
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Get
+ *
+ * Look for a value in the cache. If it exists, return the data
+ * if not, return FALSE
+ *
+ * @param string
+ * @return mixed value that is stored/FALSE on failure
+ */
+ public function get($id)
+ {
+ return $this->{$this->_adapter}->get($id);
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Cache Save
+ *
+ * @param string Unique Key
+ * @param mixed Data to store
+ * @param int Length of time (in seconds) to cache the data
+ *
+ * @return boolean true on success/false on failure
+ */
+ public function save($id, $data, $ttl = 60)
+ {
+ return $this->{$this->_adapter}->save($id, $data, $ttl);
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Delete from Cache
+ *
+ * @param mixed unique identifier of the item in the cache
+ * @return boolean true on success/false on failure
+ */
+ public function delete($id)
+ {
+ return $this->{$this->_adapter}->delete($id);
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Clean the cache
+ *
+ * @return boolean false on failure/true on success
+ */
+ public function clean()
+ {
+ return $this->{$this->_adapter}->clean();
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Cache Info
+ *
+ * @param string user/filehits
+ * @return mixed array on success, false on failure
+ */
+ public function cache_info($type = 'user')
+ {
+ return $this->{$this->_adapter}->cache_info($type);
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Get Cache Metadata
+ *
+ * @param mixed key to get cache metadata on
+ * @return mixed return value from child method
+ */
+ public function get_metadata($id)
+ {
+ return $this->{$this->_adapter}->get_metadata($id);
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Initialize
+ *
+ * Initialize class properties based on the configuration array.
+ *
+ * @param array
+ * @return void
+ */
+ private function _initialize($config)
+ {
+ $default_config = array(
+ 'adapter',
+ 'memcached'
+ );
+
+ foreach ($default_config as $key)
+ {
+ if (isset($config[$key]))
+ {
+ $param = '_'.$key;
+
+ $this->{$param} = $config[$key];
+ }
+ }
+
+ if (isset($config['backup']))
+ {
+ if (in_array('cache_'.$config['backup'], $this->valid_drivers))
+ {
+ $this->_backup_driver = $config['backup'];
+ }
+ }
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * Is the requested driver supported in this environment?
+ *
+ * @param string The driver to test.
+ * @return array
+ */
+ public function is_supported($driver)
+ {
+ static $support = array();
+
+ if ( ! isset($support[$driver]))
+ {
+ $support[$driver] = $this->{$driver}->is_supported();
+ }
+
+ return $support[$driver];
+ }
+
+ // ------------------------------------------------------------------------
+
+ /**
+ * __get()
+ *
+ * @param child
+ * @return object
+ */
+ public function __get($child)
+ {
+ $obj = parent::__get($child);
+
+ if ( ! $this->is_supported($child))
+ {
+ $this->_adapter = $this->_backup_driver;
+ }
+
+ return $obj;
+ }
+
+ // ------------------------------------------------------------------------
+}
+// End Class
+
+/* End of file Cache.php */
+/* Location: ./system/libraries/Cache/Cache.php */ \ No newline at end of file