]>
Commit | Line | Data |
---|---|---|
59c06b17 CS |
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 | * CodeIgniter Config Class | |
20 | * | |
21 | * This class contains functions that enable config files to be managed | |
22 | * | |
23 | * @package CodeIgniter | |
24 | * @subpackage Libraries | |
25 | * @category Libraries | |
26 | * @author ExpressionEngine Dev Team | |
27 | * @link http://codeigniter.com/user_guide/libraries/config.html | |
28 | */ | |
29 | class CI_Config { | |
30 | ||
31 | /** | |
32 | * List of all loaded config values | |
33 | * | |
34 | * @var array | |
35 | */ | |
36 | var $config = array(); | |
37 | /** | |
38 | * List of all loaded config files | |
39 | * | |
40 | * @var array | |
41 | */ | |
42 | var $is_loaded = array(); | |
43 | /** | |
44 | * List of paths to search when trying to load a config file | |
45 | * | |
46 | * @var array | |
47 | */ | |
48 | var $_config_paths = array(APPPATH); | |
49 | ||
50 | /** | |
51 | * Constructor | |
52 | * | |
53 | * Sets the $config data from the primary config.php file as a class variable | |
54 | * | |
55 | * @access public | |
56 | * @param string the config file name | |
57 | * @param boolean if configuration values should be loaded into their own section | |
58 | * @param boolean true if errors should just return false, false if an error message should be displayed | |
59 | * @return boolean if the file was successfully loaded or not | |
60 | */ | |
61 | function __construct() | |
62 | { | |
63 | $this->config =& get_config(); | |
64 | log_message('debug', "Config Class Initialized"); | |
65 | ||
66 | // Set the base_url automatically if none was provided | |
67 | if ($this->config['base_url'] == '') | |
68 | { | |
69 | if (isset($_SERVER['HTTP_HOST'])) | |
70 | { | |
71 | $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http'; | |
72 | $base_url .= '://'. $_SERVER['HTTP_HOST']; | |
73 | $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); | |
74 | } | |
75 | ||
76 | else | |
77 | { | |
78 | $base_url = 'http://localhost/'; | |
79 | } | |
80 | ||
81 | $this->set_item('base_url', $base_url); | |
82 | } | |
83 | } | |
84 | ||
85 | // -------------------------------------------------------------------- | |
86 | ||
87 | /** | |
88 | * Load Config File | |
89 | * | |
90 | * @access public | |
91 | * @param string the config file name | |
92 | * @param boolean if configuration values should be loaded into their own section | |
93 | * @param boolean true if errors should just return false, false if an error message should be displayed | |
94 | * @return boolean if the file was loaded correctly | |
95 | */ | |
96 | function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE) | |
97 | { | |
98 | $file = ($file == '') ? 'config' : str_replace('.php', '', $file); | |
99 | $found = FALSE; | |
100 | $loaded = FALSE; | |
101 | ||
102 | $check_locations = defined('ENVIRONMENT') | |
103 | ? array(ENVIRONMENT.'/'.$file, $file) | |
104 | : array($file); | |
105 | ||
106 | foreach ($this->_config_paths as $path) | |
107 | { | |
108 | foreach ($check_locations as $location) | |
109 | { | |
110 | $file_path = $path.'config/'.$location.'.php'; | |
111 | ||
112 | if (in_array($file_path, $this->is_loaded, TRUE)) | |
113 | { | |
114 | $loaded = TRUE; | |
115 | continue 2; | |
116 | } | |
117 | ||
118 | if (file_exists($file_path)) | |
119 | { | |
120 | $found = TRUE; | |
121 | break; | |
122 | } | |
123 | } | |
124 | ||
125 | if ($found === FALSE) | |
126 | { | |
127 | continue; | |
128 | } | |
129 | ||
130 | include($file_path); | |
131 | ||
132 | if ( ! isset($config) OR ! is_array($config)) | |
133 | { | |
134 | if ($fail_gracefully === TRUE) | |
135 | { | |
136 | return FALSE; | |
137 | } | |
138 | show_error('Your '.$file_path.' file does not appear to contain a valid configuration array.'); | |
139 | } | |
140 | ||
141 | if ($use_sections === TRUE) | |
142 | { | |
143 | if (isset($this->config[$file])) | |
144 | { | |
145 | $this->config[$file] = array_merge($this->config[$file], $config); | |
146 | } | |
147 | else | |
148 | { | |
149 | $this->config[$file] = $config; | |
150 | } | |
151 | } | |
152 | else | |
153 | { | |
154 | $this->config = array_merge($this->config, $config); | |
155 | } | |
156 | ||
157 | $this->is_loaded[] = $file_path; | |
158 | unset($config); | |
159 | ||
160 | $loaded = TRUE; | |
161 | log_message('debug', 'Config file loaded: '.$file_path); | |
162 | break; | |
163 | } | |
164 | ||
165 | if ($loaded === FALSE) | |
166 | { | |
167 | if ($fail_gracefully === TRUE) | |
168 | { | |
169 | return FALSE; | |
170 | } | |
171 | show_error('The configuration file '.$file.'.php does not exist.'); | |
172 | } | |
173 | ||
174 | return TRUE; | |
175 | } | |
176 | ||
177 | // -------------------------------------------------------------------- | |
178 | ||
179 | /** | |
180 | * Fetch a config file item | |
181 | * | |
182 | * | |
183 | * @access public | |
184 | * @param string the config item name | |
185 | * @param string the index name | |
186 | * @param bool | |
187 | * @return string | |
188 | */ | |
189 | function item($item, $index = '') | |
190 | { | |
191 | if ($index == '') | |
192 | { | |
193 | if ( ! isset($this->config[$item])) | |
194 | { | |
195 | return FALSE; | |
196 | } | |
197 | ||
198 | $pref = $this->config[$item]; | |
199 | } | |
200 | else | |
201 | { | |
202 | if ( ! isset($this->config[$index])) | |
203 | { | |
204 | return FALSE; | |
205 | } | |
206 | ||
207 | if ( ! isset($this->config[$index][$item])) | |
208 | { | |
209 | return FALSE; | |
210 | } | |
211 | ||
212 | $pref = $this->config[$index][$item]; | |
213 | } | |
214 | ||
215 | return $pref; | |
216 | } | |
217 | ||
218 | // -------------------------------------------------------------------- | |
219 | ||
220 | /** | |
221 | * Fetch a config file item - adds slash after item (if item is not empty) | |
222 | * | |
223 | * @access public | |
224 | * @param string the config item name | |
225 | * @param bool | |
226 | * @return string | |
227 | */ | |
228 | function slash_item($item) | |
229 | { | |
230 | if ( ! isset($this->config[$item])) | |
231 | { | |
232 | return FALSE; | |
233 | } | |
234 | if( trim($this->config[$item]) == '') | |
235 | { | |
236 | return ''; | |
237 | } | |
238 | ||
239 | return rtrim($this->config[$item], '/').'/'; | |
240 | } | |
241 | ||
242 | // -------------------------------------------------------------------- | |
243 | ||
244 | /** | |
245 | * Site URL | |
246 | * Returns base_url . index_page [. uri_string] | |
247 | * | |
248 | * @access public | |
249 | * @param string the URI string | |
250 | * @return string | |
251 | */ | |
252 | function site_url($uri = '') | |
253 | { | |
254 | if ($uri == '') | |
255 | { | |
256 | return $this->slash_item('base_url').$this->item('index_page'); | |
257 | } | |
258 | ||
259 | if ($this->item('enable_query_strings') == FALSE) | |
260 | { | |
261 | $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix'); | |
262 | return $this->slash_item('base_url').$this->slash_item('index_page').$this->_uri_string($uri).$suffix; | |
263 | } | |
264 | else | |
265 | { | |
266 | return $this->slash_item('base_url').$this->item('index_page').'?'.$this->_uri_string($uri); | |
267 | } | |
268 | } | |
269 | ||
270 | // ------------------------------------------------------------- | |
271 | ||
272 | /** | |
273 | * Base URL | |
274 | * Returns base_url [. uri_string] | |
275 | * | |
276 | * @access public | |
277 | * @param string $uri | |
278 | * @return string | |
279 | */ | |
280 | function base_url($uri = '') | |
281 | { | |
282 | return $this->slash_item('base_url').ltrim($this->_uri_string($uri), '/'); | |
283 | } | |
284 | ||
285 | // ------------------------------------------------------------- | |
286 | ||
287 | /** | |
288 | * Build URI string for use in Config::site_url() and Config::base_url() | |
289 | * | |
290 | * @access protected | |
291 | * @param $uri | |
292 | * @return string | |
293 | */ | |
294 | protected function _uri_string($uri) | |
295 | { | |
296 | if ($this->item('enable_query_strings') == FALSE) | |
297 | { | |
298 | if (is_array($uri)) | |
299 | { | |
300 | $uri = implode('/', $uri); | |
301 | } | |
302 | $uri = trim($uri, '/'); | |
303 | } | |
304 | else | |
305 | { | |
306 | if (is_array($uri)) | |
307 | { | |
308 | $i = 0; | |
309 | $str = ''; | |
310 | foreach ($uri as $key => $val) | |
311 | { | |
312 | $prefix = ($i == 0) ? '' : '&'; | |
313 | $str .= $prefix.$key.'='.$val; | |
314 | $i++; | |
315 | } | |
316 | $uri = $str; | |
317 | } | |
318 | } | |
319 | return $uri; | |
320 | } | |
321 | ||
322 | // -------------------------------------------------------------------- | |
323 | ||
324 | /** | |
325 | * System URL | |
326 | * | |
327 | * @access public | |
328 | * @return string | |
329 | */ | |
330 | function system_url() | |
331 | { | |
332 | $x = explode("/", preg_replace("|/*(.+?)/*$|", "\\1", BASEPATH)); | |
333 | return $this->slash_item('base_url').end($x).'/'; | |
334 | } | |
335 | ||
336 | // -------------------------------------------------------------------- | |
337 | ||
338 | /** | |
339 | * Set a config file item | |
340 | * | |
341 | * @access public | |
342 | * @param string the config item key | |
343 | * @param string the config item value | |
344 | * @return void | |
345 | */ | |
346 | function set_item($item, $value) | |
347 | { | |
348 | $this->config[$item] = $value; | |
349 | } | |
350 | ||
351 | // -------------------------------------------------------------------- | |
352 | ||
353 | /** | |
354 | * Assign to Config | |
355 | * | |
356 | * This function is called by the front controller (CodeIgniter.php) | |
357 | * after the Config class is instantiated. It permits config items | |
358 | * to be assigned or overriden by variables contained in the index.php file | |
359 | * | |
360 | * @access private | |
361 | * @param array | |
362 | * @return void | |
363 | */ | |
364 | function _assign_to_config($items = array()) | |
365 | { | |
366 | if (is_array($items)) | |
367 | { | |
368 | foreach ($items as $key => $val) | |
369 | { | |
370 | $this->set_item($key, $val); | |
371 | } | |
372 | } | |
373 | } | |
374 | } | |
375 | ||
376 | // END CI_Config class | |
377 | ||
378 | /* End of file Config.php */ | |
379 | /* Location: ./system/core/Config.php */ |