/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/libraries/Driver.php

  • Committer: Erik Wikström
  • Date: 2013-04-09 09:09:31 UTC
  • mfrom: (21 lenasys)
  • mto: (21.1.1 lenasys)
  • mto: This revision was merged to the branch mainline in revision 22.
  • Revision ID: wikxen@gmail.com-20130409090931-9jcs9kzg8et0912g
Remerged! Changed password hashes to VARCHAR(32)

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              EllisLab Dev Team
9
 
 * @copyright   Copyright (c) 2006 - 2012, 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
 
 * CodeIgniter Driver Library Class
20
 
 *
21
 
 * This class enables you to create "Driver" libraries that add runtime ability
22
 
 * to extend the capabilities of a class via additional driver objects
23
 
 *
24
 
 * @package             CodeIgniter
25
 
 * @subpackage  Libraries
26
 
 * @category    Libraries
27
 
 * @author              EllisLab Dev Team
28
 
 * @link
29
 
 */
30
 
class CI_Driver_Library {
31
 
 
32
 
        protected $valid_drivers        = array();
33
 
        protected $lib_name;
34
 
 
35
 
        // The first time a child is used it won't exist, so we instantiate it
36
 
        // subsequents calls will go straight to the proper child.
37
 
        function __get($child)
38
 
        {
39
 
                if ( ! isset($this->lib_name))
40
 
                {
41
 
                        $this->lib_name = get_class($this);
42
 
                }
43
 
 
44
 
                // The class will be prefixed with the parent lib
45
 
                $child_class = $this->lib_name.'_'.$child;
46
 
        
47
 
                // Remove the CI_ prefix and lowercase
48
 
                $lib_name = ucfirst(strtolower(str_replace('CI_', '', $this->lib_name)));
49
 
                $driver_name = strtolower(str_replace('CI_', '', $child_class));
50
 
                
51
 
                if (in_array($driver_name, array_map('strtolower', $this->valid_drivers)))
52
 
                {
53
 
                        // check and see if the driver is in a separate file
54
 
                        if ( ! class_exists($child_class))
55
 
                        {
56
 
                                // check application path first
57
 
                                foreach (get_instance()->load->get_package_paths(TRUE) as $path)
58
 
                                {
59
 
                                        // loves me some nesting!
60
 
                                        foreach (array(ucfirst($driver_name), $driver_name) as $class)
61
 
                                        {
62
 
                                                $filepath = $path.'libraries/'.$lib_name.'/drivers/'.$class.'.php';
63
 
 
64
 
                                                if (file_exists($filepath))
65
 
                                                {
66
 
                                                        include_once $filepath;
67
 
                                                        break;
68
 
                                                }
69
 
                                        }
70
 
                                }
71
 
 
72
 
                                // it's a valid driver, but the file simply can't be found
73
 
                                if ( ! class_exists($child_class))
74
 
                                {
75
 
                                        log_message('error', "Unable to load the requested driver: ".$child_class);
76
 
                                        show_error("Unable to load the requested driver: ".$child_class);
77
 
                                }
78
 
                        }
79
 
 
80
 
                        $obj = new $child_class;
81
 
                        $obj->decorate($this);
82
 
                        $this->$child = $obj;
83
 
                        return $this->$child;
84
 
                }
85
 
 
86
 
                // The requested driver isn't valid!
87
 
                log_message('error', "Invalid driver requested: ".$child_class);
88
 
                show_error("Invalid driver requested: ".$child_class);
89
 
        }
90
 
 
91
 
        // --------------------------------------------------------------------
92
 
 
93
 
}
94
 
// END CI_Driver_Library CLASS
95
 
 
96
 
 
97
 
/**
98
 
 * CodeIgniter Driver Class
99
 
 *
100
 
 * This class enables you to create drivers for a Library based on the Driver Library.
101
 
 * It handles the drivers' access to the parent library
102
 
 *
103
 
 * @package             CodeIgniter
104
 
 * @subpackage  Libraries
105
 
 * @category    Libraries
106
 
 * @author              EllisLab Dev Team
107
 
 * @link
108
 
 */
109
 
class CI_Driver {
110
 
        protected $parent;
111
 
 
112
 
        private $methods = array();
113
 
        private $properties = array();
114
 
 
115
 
        private static $reflections = array();
116
 
 
117
 
        /**
118
 
         * Decorate
119
 
         *
120
 
         * Decorates the child with the parent driver lib's methods and properties
121
 
         *
122
 
         * @param       object
123
 
         * @return      void
124
 
         */
125
 
        public function decorate($parent)
126
 
        {
127
 
                $this->parent = $parent;
128
 
 
129
 
                // Lock down attributes to what is defined in the class
130
 
                // and speed up references in magic methods
131
 
 
132
 
                $class_name = get_class($parent);
133
 
 
134
 
                if ( ! isset(self::$reflections[$class_name]))
135
 
                {
136
 
                        $r = new ReflectionObject($parent);
137
 
 
138
 
                        foreach ($r->getMethods() as $method)
139
 
                        {
140
 
                                if ($method->isPublic())
141
 
                                {
142
 
                                        $this->methods[] = $method->getName();
143
 
                                }
144
 
                        }
145
 
 
146
 
                        foreach ($r->getProperties() as $prop)
147
 
                        {
148
 
                                if ($prop->isPublic())
149
 
                                {
150
 
                                        $this->properties[] = $prop->getName();
151
 
                                }
152
 
                        }
153
 
 
154
 
                        self::$reflections[$class_name] = array($this->methods, $this->properties);
155
 
                }
156
 
                else
157
 
                {
158
 
                        list($this->methods, $this->properties) = self::$reflections[$class_name];
159
 
                }
160
 
        }
161
 
 
162
 
        // --------------------------------------------------------------------
163
 
 
164
 
        /**
165
 
         * __call magic method
166
 
         *
167
 
         * Handles access to the parent driver library's methods
168
 
         *
169
 
         * @access      public
170
 
         * @param       string
171
 
         * @param       array
172
 
         * @return      mixed
173
 
         */
174
 
        public function __call($method, $args = array())
175
 
        {
176
 
                if (in_array($method, $this->methods))
177
 
                {
178
 
                        return call_user_func_array(array($this->parent, $method), $args);
179
 
                }
180
 
 
181
 
                $trace = debug_backtrace();
182
 
                _exception_handler(E_ERROR, "No such method '{$method}'", $trace[1]['file'], $trace[1]['line']);
183
 
                exit;
184
 
        }
185
 
 
186
 
        // --------------------------------------------------------------------
187
 
 
188
 
        /**
189
 
         * __get magic method
190
 
         *
191
 
         * Handles reading of the parent driver library's properties
192
 
         *
193
 
         * @param       string
194
 
         * @return      mixed
195
 
         */
196
 
        public function __get($var)
197
 
        {
198
 
                if (in_array($var, $this->properties))
199
 
                {
200
 
                        return $this->parent->$var;
201
 
                }
202
 
        }
203
 
 
204
 
        // --------------------------------------------------------------------
205
 
 
206
 
        /**
207
 
         * __set magic method
208
 
         *
209
 
         * Handles writing to the parent driver library's properties
210
 
         *
211
 
         * @param       string
212
 
         * @param       array
213
 
         * @return      mixed
214
 
         */
215
 
        public function __set($var, $val)
216
 
        {
217
 
                if (in_array($var, $this->properties))
218
 
                {
219
 
                        $this->parent->$var = $val;
220
 
                }
221
 
        }
222
 
 
223
 
        // --------------------------------------------------------------------
224
 
 
225
 
}
226
 
// END CI_Driver CLASS
227
 
 
228
 
/* End of file Driver.php */
229
 
/* Location: ./system/libraries/Driver.php */
 
 
b'\\ No newline at end of file'