PluginProbe
ShiftController Employee Shift Scheduling / 2.2.0
ShiftController Employee Shift Scheduling v2.2.0
4.9.97 4.9.96 4.9.95 4.9.74 4.9.75 4.9.76 4.9.77 4.9.78 4.9.84 4.9.85 4.9.87 4.9.91 4.9.92 trunk 2.1.0 2.1.1 2.1.2 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 3.2.4 All 38 releases
shiftcontroller / happ / system / database / DB_cache.php

DB_cache.php in ShiftController Employee Shift Scheduling 2.2.0, at happ/system/database/DB_cache.php

195 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2 /**
3 * CodeIgniter
4 *
5 * An open source application development framework for PHP 5.1.6 or newer
6 *
7 * @package CodeIgniter
8 * @author ExpressionEngine Dev Team
9 * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
10 * @license http://codeigniter.com/user_guide/license.html
11 * @link http://codeigniter.com
12 * @since Version 1.0
13 * @filesource
14 */
15
16 // ------------------------------------------------------------------------
17
18 /**
19 * Database Cache Class
20 *
21 * @category Database
22 * @author ExpressionEngine Dev Team
23 * @link http://codeigniter.com/user_guide/database/
24 */
25 class CI_DB_Cache {
26
27 var $CI;
28 var $db; // allows passing of db object so that multiple database connections and returned db objects can be supported
29
30 /**
31 * Constructor
32 *
33 * Grabs the CI super object instance so we can access it.
34 *
35 */
36 function __construct(&$db)
37 {
38 // Assign the main CI object to $this->CI
39 // and load the file helper since we use it a lot
40 $this->CI =& ci_get_instance();
41 $this->db =& $db;
42 $this->CI->load->helper('file');
43 }
44
45 // --------------------------------------------------------------------
46
47 /**
48 * Set Cache Directory Path
49 *
50 * @access public
51 * @param string the path to the cache directory
52 * @return bool
53 */
54 function check_path($path = '')
55 {
56 if ($path == '')
57 {
58 if ($this->db->cachedir == '')
59 {
60 return $this->db->cache_off();
61 }
62
63 $path = $this->db->cachedir;
64 }
65
66 // Add a trailing slash to the path if needed
67 $path = preg_replace("/(.+?)\/*$/", "\\1/", $path);
68
69 if ( ! is_dir($path) OR ! is_really_writable($path))
70 {
71 // If the path is wrong we'll turn off caching
72 return $this->db->cache_off();
73 }
74
75 $this->db->cachedir = $path;
76 return TRUE;
77 }
78
79 // --------------------------------------------------------------------
80
81 /**
82 * Retrieve a cached query
83 *
84 * The URI being requested will become the name of the cache sub-folder.
85 * An MD5 hash of the SQL statement will become the cache file name
86 *
87 * @access public
88 * @return string
89 */
90 function read($sql)
91 {
92 if ( ! $this->check_path())
93 {
94 return $this->db->cache_off();
95 }
96
97 $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
98
99 $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
100
101 $filepath = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'.md5($sql);
102
103 if (FALSE === ($cachedata = read_file($filepath)))
104 {
105 return FALSE;
106 }
107
108 return unserialize($cachedata);
109 }
110
111 // --------------------------------------------------------------------
112
113 /**
114 * Write a query to a cache file
115 *
116 * @access public
117 * @return bool
118 */
119 function write($sql, $object)
120 {
121 if ( ! $this->check_path())
122 {
123 return $this->db->cache_off();
124 }
125
126 $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
127
128 $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
129
130 $dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
131
132 $filename = md5($sql);
133
134 if ( ! @is_dir($dir_path))
135 {
136 if ( ! @mkdir($dir_path, DIR_WRITE_MODE))
137 {
138 return FALSE;
139 }
140
141 @chmod($dir_path, DIR_WRITE_MODE);
142 }
143
144 if (write_file($dir_path.$filename, serialize($object)) === FALSE)
145 {
146 return FALSE;
147 }
148
149 @chmod($dir_path.$filename, FILE_WRITE_MODE);
150 return TRUE;
151 }
152
153 // --------------------------------------------------------------------
154
155 /**
156 * Delete cache files within a particular directory
157 *
158 * @access public
159 * @return bool
160 */
161 function delete($segment_one = '', $segment_two = '')
162 {
163 if ($segment_one == '')
164 {
165 $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1);
166 }
167
168 if ($segment_two == '')
169 {
170 $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2);
171 }
172
173 $dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/';
174
175 delete_files($dir_path, TRUE);
176 }
177
178 // --------------------------------------------------------------------
179
180 /**
181 * Delete all existing cache files
182 *
183 * @access public
184 * @return bool
185 */
186 function delete_all()
187 {
188 delete_files($this->db->cachedir, TRUE);
189 }
190
191 }
192
193
194 /* End of file DB_cache.php */
195 /* Location: ./system/database/DB_cache.php */