/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/database/DB_cache.php

  • Committer: Gustav Hatvigsson
  • Date: 2013-04-11 09:20:09 UTC
  • mfrom: (19.1.5 lenasys)
  • Revision ID: gustav.hartvigsson@gmail.com-20130411092009-ylcqzqwcmjdglb17
merged in implemetaion group one's team bransh, it contains code-ignighter
and the new admin-panel.
20130411

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 =& 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 */
 
 
b'\\ No newline at end of file'