Remove file execution permission.
[living-lab-site.git] / system / libraries / Cache / Cache.php
1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3  * CodeIgniter
4  *
5  * An open source application development framework for PHP 4.3.2 or newer
6  *
7  * @package             CodeIgniter
8  * @author              ExpressionEngine Dev Team
9  * @copyright   Copyright (c) 2006 - 2011 EllisLab, Inc.
10  * @license             http://codeigniter.com/user_guide/license.html
11  * @link                http://codeigniter.com
12  * @since               Version 2.0
13  * @filesource  
14  */
15
16 // ------------------------------------------------------------------------
17
18 /**
19  * CodeIgniter Caching Class 
20  *
21  * @package             CodeIgniter
22  * @subpackage  Libraries
23  * @category    Core
24  * @author              ExpressionEngine Dev Team
25  * @link                
26  */
27 class CI_Cache extends CI_Driver_Library {
28         
29         protected $valid_drivers        = array(
30                 'cache_apc', 'cache_file', 'cache_memcached', 'cache_dummy'
31         );
32
33         protected $_cache_path          = NULL;         // Path of cache files (if file-based cache)
34         protected $_adapter                     = 'dummy';
35         protected $_backup_driver;
36         
37         // ------------------------------------------------------------------------
38
39         /**
40          * Constructor
41          *
42          * @param array
43          */
44         public function __construct($config = array())
45         {
46                 if ( ! empty($config))
47                 {
48                         $this->_initialize($config);
49                 }
50         }
51
52         // ------------------------------------------------------------------------
53
54         /**
55          * Get 
56          *
57          * Look for a value in the cache.  If it exists, return the data 
58          * if not, return FALSE
59          *
60          * @param       string  
61          * @return      mixed           value that is stored/FALSE on failure
62          */
63         public function get($id)
64         {       
65                 return $this->{$this->_adapter}->get($id);
66         }
67
68         // ------------------------------------------------------------------------
69
70         /**
71          * Cache Save
72          *
73          * @param       string          Unique Key
74          * @param       mixed           Data to store
75          * @param       int                     Length of time (in seconds) to cache the data
76          *
77          * @return      boolean         true on success/false on failure
78          */
79         public function save($id, $data, $ttl = 60)
80         {
81                 return $this->{$this->_adapter}->save($id, $data, $ttl);
82         }
83
84         // ------------------------------------------------------------------------
85
86         /**
87          * Delete from Cache
88          *
89          * @param       mixed           unique identifier of the item in the cache
90          * @return      boolean         true on success/false on failure
91          */
92         public function delete($id)
93         {
94                 return $this->{$this->_adapter}->delete($id);
95         }
96
97         // ------------------------------------------------------------------------
98
99         /**
100          * Clean the cache
101          *
102          * @return      boolean         false on failure/true on success
103          */
104         public function clean()
105         {
106                 return $this->{$this->_adapter}->clean();
107         }
108
109         // ------------------------------------------------------------------------
110
111         /**
112          * Cache Info
113          *
114          * @param       string          user/filehits
115          * @return      mixed           array on success, false on failure      
116          */
117         public function cache_info($type = 'user')
118         {
119                 return $this->{$this->_adapter}->cache_info($type);
120         }
121
122         // ------------------------------------------------------------------------
123         
124         /**
125          * Get Cache Metadata
126          *
127          * @param       mixed           key to get cache metadata on
128          * @return      mixed           return value from child method
129          */
130         public function get_metadata($id)
131         {
132                 return $this->{$this->_adapter}->get_metadata($id);
133         }
134         
135         // ------------------------------------------------------------------------
136
137         /**
138          * Initialize
139          *
140          * Initialize class properties based on the configuration array.
141          *
142          * @param       array   
143          * @return      void
144          */
145         private function _initialize($config)
146         {        
147                 $default_config = array(
148                                 'adapter',
149                                 'memcached'
150                         );
151
152                 foreach ($default_config as $key)
153                 {
154                         if (isset($config[$key]))
155                         {
156                                 $param = '_'.$key;
157
158                                 $this->{$param} = $config[$key];
159                         }
160                 }
161
162                 if (isset($config['backup']))
163                 {
164                         if (in_array('cache_'.$config['backup'], $this->valid_drivers))
165                         {
166                                 $this->_backup_driver = $config['backup'];
167                         }
168                 }
169         }
170
171         // ------------------------------------------------------------------------
172
173         /**
174          * Is the requested driver supported in this environment?
175          *
176          * @param       string  The driver to test.
177          * @return      array
178          */
179         public function is_supported($driver)
180         {
181                 static $support = array();
182
183                 if ( ! isset($support[$driver]))
184                 {
185                         $support[$driver] = $this->{$driver}->is_supported();
186                 }
187
188                 return $support[$driver];
189         }
190
191         // ------------------------------------------------------------------------
192
193         /**
194          * __get()
195          *
196          * @param       child
197          * @return      object
198          */
199         public function __get($child)
200         {
201                 $obj = parent::__get($child);
202
203                 if ( ! $this->is_supported($child))
204                 {
205                         $this->_adapter = $this->_backup_driver;
206                 }
207
208                 return $obj;
209         }
210         
211         // ------------------------------------------------------------------------
212 }
213 // End Class
214
215 /* End of file Cache.php */
216 /* Location: ./system/libraries/Cache/Cache.php */