blob: 0e6f10e07a3954d70701162bb4196dc5db7abb26 [file] [log] [blame]
Derek Jones4b9c6292011-07-01 17:40:48 -05001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Greg Aker741de1c2010-11-10 14:52:57 -06005 * An open source application development framework for PHP 5.1.6 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
7 * @package CodeIgniter
8 * @author ExpressionEngine Dev Team
Greg Aker0711dc82011-01-05 10:49:40 -06009 * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
Derek Allard2067d1a2008-11-13 22:59:24 +000010 * @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 */
29class CI_Config {
30
31 var $config = array();
32 var $is_loaded = array();
Derek Jones6d743e22010-03-02 13:22:03 -060033 var $_config_paths = array(APPPATH);
Derek Allard2067d1a2008-11-13 22:59:24 +000034
35 /**
36 * Constructor
37 *
38 * Sets the $config data from the primary config.php file as a class variable
39 *
Derek Jones4b9c6292011-07-01 17:40:48 -050040 * @access public
41 * @param string the config file name
42 * @param boolean if configuration values should be loaded into their own section
43 * @param boolean true if errors should just return false, false if an error message should be displayed
44 * @return boolean if the file was successfully loaded or not
Derek Allard2067d1a2008-11-13 22:59:24 +000045 */
Greg Akera9263282010-11-10 15:26:43 -060046 function __construct()
Derek Allard2067d1a2008-11-13 22:59:24 +000047 {
Barry Mienydd671972010-10-04 16:33:58 +020048 $this->config =& get_config();
Derek Allard2067d1a2008-11-13 22:59:24 +000049 log_message('debug', "Config Class Initialized");
Phil Sturgeon4df8b222010-12-15 14:23:14 +000050
51 // Set the base_url automatically if none was provided
52 if ($this->config['base_url'] == '')
53 {
Pascal Kriete5d5895f2011-02-14 13:27:07 -050054 if (isset($_SERVER['HTTP_HOST']))
Phil Sturgeon4df8b222010-12-15 14:23:14 +000055 {
Phil Sturgeonfb552382010-12-15 14:29:21 +000056 $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
Phil Sturgeon4df8b222010-12-15 14:23:14 +000057 $base_url .= '://'. $_SERVER['HTTP_HOST'];
Eric Barnes32dbac22011-04-26 22:51:32 -040058 $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
Phil Sturgeon4df8b222010-12-15 14:23:14 +000059 }
60
61 else
62 {
63 $base_url = 'http://localhost/';
64 }
65
66 $this->set_item('base_url', $base_url);
67 }
Derek Allard2067d1a2008-11-13 22:59:24 +000068 }
Barry Mienydd671972010-10-04 16:33:58 +020069
Derek Allard2067d1a2008-11-13 22:59:24 +000070 // --------------------------------------------------------------------
71
72 /**
73 * Load Config File
74 *
75 * @access public
76 * @param string the config file name
Derek Jones4b9c6292011-07-01 17:40:48 -050077 * @param boolean if configuration values should be loaded into their own section
78 * @param boolean true if errors should just return false, false if an error message should be displayed
Derek Allard2067d1a2008-11-13 22:59:24 +000079 * @return boolean if the file was loaded correctly
Barry Mienydd671972010-10-04 16:33:58 +020080 */
Derek Allard2067d1a2008-11-13 22:59:24 +000081 function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
82 {
Greg Aker3a746652011-04-19 10:59:47 -050083 $file = ($file == '') ? 'config' : str_replace('.php', '', $file);
Phil Sturgeon05fa6112011-04-06 22:57:43 +010084 $found = FALSE;
Derek Jones6d743e22010-03-02 13:22:03 -060085 $loaded = FALSE;
Barry Mienydd671972010-10-04 16:33:58 +020086
Pascal Kriete5d5895f2011-02-14 13:27:07 -050087 foreach ($this->_config_paths as $path)
Phil Sturgeon05fa6112011-04-06 22:57:43 +010088 {
89 $check_locations = defined('ENVIRONMENT')
90 ? array(ENVIRONMENT.'/'.$file, $file)
91 : array($file);
Barry Mienydd671972010-10-04 16:33:58 +020092
Phil Sturgeon05fa6112011-04-06 22:57:43 +010093 foreach ($check_locations as $location)
Derek Jones6d743e22010-03-02 13:22:03 -060094 {
Greg Aker3a746652011-04-19 10:59:47 -050095 $file_path = $path.'config/'.$location.'.php';
Phil Sturgeon05fa6112011-04-06 22:57:43 +010096
97 if (in_array($file_path, $this->is_loaded, TRUE))
98 {
99 $loaded = TRUE;
100 continue 2;
101 }
102
103 if (file_exists($file_path))
104 {
105 $found = TRUE;
106 break;
107 }
108 }
109
110 if ($found === FALSE)
111 {
Derek Jones6d743e22010-03-02 13:22:03 -0600112 continue;
113 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000114
Derek Jones6d743e22010-03-02 13:22:03 -0600115 include($file_path);
116
117 if ( ! isset($config) OR ! is_array($config))
118 {
119 if ($fail_gracefully === TRUE)
120 {
121 return FALSE;
122 }
123 show_error('Your '.$file_path.' file does not appear to contain a valid configuration array.');
124 }
Barry Mienydd671972010-10-04 16:33:58 +0200125
Derek Jones6d743e22010-03-02 13:22:03 -0600126 if ($use_sections === TRUE)
127 {
128 if (isset($this->config[$file]))
129 {
130 $this->config[$file] = array_merge($this->config[$file], $config);
131 }
132 else
133 {
134 $this->config[$file] = $config;
135 }
136 }
137 else
138 {
139 $this->config = array_merge($this->config, $config);
140 }
Barry Mienydd671972010-10-04 16:33:58 +0200141
Derek Jones6d743e22010-03-02 13:22:03 -0600142 $this->is_loaded[] = $file_path;
143 unset($config);
Barry Mienydd671972010-10-04 16:33:58 +0200144
Derek Jones6d743e22010-03-02 13:22:03 -0600145 $loaded = TRUE;
146 log_message('debug', 'Config file loaded: '.$file_path);
katzgraud127e612011-04-22 10:59:25 -0400147 break;
Derek Jones6d743e22010-03-02 13:22:03 -0600148 }
Barry Mienydd671972010-10-04 16:33:58 +0200149
Derek Jones6d743e22010-03-02 13:22:03 -0600150 if ($loaded === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000151 {
152 if ($fail_gracefully === TRUE)
153 {
154 return FALSE;
155 }
Greg Aker3a746652011-04-19 10:59:47 -0500156 show_error('The configuration file '.$file.'.php'.' does not exist.');
Derek Allard2067d1a2008-11-13 22:59:24 +0000157 }
Phil Sturgeon05fa6112011-04-06 22:57:43 +0100158
Derek Allard2067d1a2008-11-13 22:59:24 +0000159 return TRUE;
160 }
Barry Mienydd671972010-10-04 16:33:58 +0200161
Derek Allard2067d1a2008-11-13 22:59:24 +0000162 // --------------------------------------------------------------------
163
164 /**
165 * Fetch a config file item
166 *
167 *
168 * @access public
169 * @param string the config item name
170 * @param string the index name
171 * @param bool
172 * @return string
173 */
174 function item($item, $index = '')
Barry Mienydd671972010-10-04 16:33:58 +0200175 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000176 if ($index == '')
Barry Mienydd671972010-10-04 16:33:58 +0200177 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000178 if ( ! isset($this->config[$item]))
179 {
180 return FALSE;
181 }
182
183 $pref = $this->config[$item];
184 }
185 else
186 {
187 if ( ! isset($this->config[$index]))
188 {
189 return FALSE;
190 }
191
192 if ( ! isset($this->config[$index][$item]))
193 {
194 return FALSE;
195 }
196
197 $pref = $this->config[$index][$item];
198 }
199
200 return $pref;
201 }
Barry Mienydd671972010-10-04 16:33:58 +0200202
203 // --------------------------------------------------------------------
Derek Allard2067d1a2008-11-13 22:59:24 +0000204
205 /**
anaxamaxan@blackdog.locald09c51a2011-02-02 23:00:16 -0800206 * Fetch a config file item - adds slash after item (if item is not empty)
Derek Allard2067d1a2008-11-13 22:59:24 +0000207 *
208 * @access public
209 * @param string the config item name
210 * @param bool
211 * @return string
212 */
213 function slash_item($item)
214 {
215 if ( ! isset($this->config[$item]))
216 {
217 return FALSE;
218 }
anaxamaxan@blackdog.locald09c51a2011-02-02 23:00:16 -0800219 if( trim($this->config[$item]) == '')
220 {
221 return '';
222 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000223
Phil Sturgeon4df8b222010-12-15 14:23:14 +0000224 return rtrim($this->config[$item], '/').'/';
Derek Allard2067d1a2008-11-13 22:59:24 +0000225 }
Barry Mienydd671972010-10-04 16:33:58 +0200226
Derek Allard2067d1a2008-11-13 22:59:24 +0000227 // --------------------------------------------------------------------
228
229 /**
230 * Site URL
anaxamaxan@blackdog.locald09c51a2011-02-02 23:00:16 -0800231 * Returns base_url . index_page [. uri_string]
Derek Allard2067d1a2008-11-13 22:59:24 +0000232 *
233 * @access public
234 * @param string the URI string
235 * @return string
236 */
237 function site_url($uri = '')
238 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000239 if ($uri == '')
240 {
Phil Sturgeon4df8b222010-12-15 14:23:14 +0000241 return $this->slash_item('base_url').$this->item('index_page');
Derek Jones6d743e22010-03-02 13:22:03 -0600242 }
243
244 if ($this->item('enable_query_strings') == FALSE)
245 {
anaxamaxan@blackdog.locald09c51a2011-02-02 23:00:16 -0800246 $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix');
247 return $this->slash_item('base_url').$this->slash_item('index_page').$this->_uri_string($uri).$suffix;
248 }
249 else
250 {
251 return $this->slash_item('base_url').$this->item('index_page').'?'.$this->_uri_string($uri);
252 }
253 }
254
255 // -------------------------------------------------------------
256
257 /**
258 * Base URL
259 * Returns base_url [. uri_string]
260 *
261 * @access public
262 * @param string $uri
263 * @return string
264 */
265 function base_url($uri = '')
266 {
267 return $this->slash_item('base_url').ltrim($this->_uri_string($uri),'/');
268 }
269
270 // -------------------------------------------------------------
271
272 /**
273 * Build URI string for use in Config::site_url() and Config::base_url()
274 *
275 * @access protected
276 * @param $uri
277 * @return string
278 */
279 protected function _uri_string($uri)
280 {
281 if ($this->item('enable_query_strings') == FALSE)
282 {
Derek Jones6d743e22010-03-02 13:22:03 -0600283 if (is_array($uri))
284 {
285 $uri = implode('/', $uri);
286 }
anaxamaxan@blackdog.locald09c51a2011-02-02 23:00:16 -0800287 $uri = trim($uri, '/');
Derek Allard2067d1a2008-11-13 22:59:24 +0000288 }
289 else
290 {
Derek Jones6d743e22010-03-02 13:22:03 -0600291 if (is_array($uri))
292 {
293 $i = 0;
294 $str = '';
295 foreach ($uri as $key => $val)
296 {
297 $prefix = ($i == 0) ? '' : '&';
298 $str .= $prefix.$key.'='.$val;
299 $i++;
300 }
Derek Jones6d743e22010-03-02 13:22:03 -0600301 $uri = $str;
302 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000303 }
anaxamaxan@blackdog.locald09c51a2011-02-02 23:00:16 -0800304 return $uri;
Derek Allard2067d1a2008-11-13 22:59:24 +0000305 }
Barry Mienydd671972010-10-04 16:33:58 +0200306
Derek Allard2067d1a2008-11-13 22:59:24 +0000307 // --------------------------------------------------------------------
anaxamaxan@blackdog.locald09c51a2011-02-02 23:00:16 -0800308
Derek Allard2067d1a2008-11-13 22:59:24 +0000309 /**
310 * System URL
311 *
312 * @access public
313 * @return string
314 */
315 function system_url()
316 {
317 $x = explode("/", preg_replace("|/*(.+?)/*$|", "\\1", BASEPATH));
318 return $this->slash_item('base_url').end($x).'/';
319 }
Barry Mienydd671972010-10-04 16:33:58 +0200320
Derek Allard2067d1a2008-11-13 22:59:24 +0000321 // --------------------------------------------------------------------
322
323 /**
324 * Set a config file item
325 *
326 * @access public
327 * @param string the config item key
328 * @param string the config item value
329 * @return void
330 */
331 function set_item($item, $value)
332 {
333 $this->config[$item] = $value;
334 }
Barry Mienydd671972010-10-04 16:33:58 +0200335
Derek Jones6d743e22010-03-02 13:22:03 -0600336 // --------------------------------------------------------------------
Derek Allard2067d1a2008-11-13 22:59:24 +0000337
Derek Jones6d743e22010-03-02 13:22:03 -0600338 /**
339 * Assign to Config
340 *
341 * This function is called by the front controller (CodeIgniter.php)
Derek Jones4b9c6292011-07-01 17:40:48 -0500342 * after the Config class is instantiated. It permits config items
Derek Jones6d743e22010-03-02 13:22:03 -0600343 * to be assigned or overriden by variables contained in the index.php file
344 *
345 * @access private
346 * @param array
347 * @return void
Barry Mienydd671972010-10-04 16:33:58 +0200348 */
Derek Jones6d743e22010-03-02 13:22:03 -0600349 function _assign_to_config($items = array())
350 {
351 if (is_array($items))
352 {
353 foreach ($items as $key => $val)
354 {
355 $this->set_item($key, $val);
356 }
Barry Mienydd671972010-10-04 16:33:58 +0200357 }
Derek Jones6d743e22010-03-02 13:22:03 -0600358 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000359}
360
361// END CI_Config class
362
363/* End of file Config.php */
katzgraud127e612011-04-22 10:59:25 -0400364/* Location: ./system/core/Config.php */