| <?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 - 2012 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 CI_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 */ |