blob: 506af0d9914eeb7584af583c790650d4a5e9deb6 [file] [log] [blame]
Derek Allard2067d1a2008-11-13 22:59:24 +00001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2/**
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
Derek Jones7f3719f2010-01-05 13:35:37 +00009 * @copyright Copyright (c) 2008 - 2010, 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 *
40 * @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
45 */
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 {
54 // Base URL (keeps this crazy sh*t out of the config.php
55 if(isset($_SERVER['HTTP_HOST']))
56 {
57 $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https' : 'http';
58 $base_url .= '://'. $_SERVER['HTTP_HOST'];
59 $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
60 }
61
62 else
63 {
64 $base_url = 'http://localhost/';
65 }
66
67 $this->set_item('base_url', $base_url);
68 }
Derek Allard2067d1a2008-11-13 22:59:24 +000069 }
Barry Mienydd671972010-10-04 16:33:58 +020070
Derek Allard2067d1a2008-11-13 22:59:24 +000071 // --------------------------------------------------------------------
72
73 /**
74 * Load Config File
75 *
76 * @access public
77 * @param string the config file name
78 * @return boolean if the file was loaded correctly
Barry Mienydd671972010-10-04 16:33:58 +020079 */
Derek Allard2067d1a2008-11-13 22:59:24 +000080 function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
81 {
82 $file = ($file == '') ? 'config' : str_replace(EXT, '', $file);
Derek Jones6d743e22010-03-02 13:22:03 -060083 $loaded = FALSE;
Barry Mienydd671972010-10-04 16:33:58 +020084
Derek Jones6d743e22010-03-02 13:22:03 -060085 foreach($this->_config_paths as $path)
Derek Allard2067d1a2008-11-13 22:59:24 +000086 {
Derek Jones6d743e22010-03-02 13:22:03 -060087 $file_path = $path.'config/'.$file.EXT;
Barry Mienydd671972010-10-04 16:33:58 +020088
Derek Jones6d743e22010-03-02 13:22:03 -060089 if (in_array($file_path, $this->is_loaded, TRUE))
90 {
91 $loaded = TRUE;
92 continue;
93 }
Derek Allard2067d1a2008-11-13 22:59:24 +000094
Derek Jones6d743e22010-03-02 13:22:03 -060095 if ( ! file_exists($path.'config/'.$file.EXT))
96 {
97 continue;
98 }
Barry Mienydd671972010-10-04 16:33:58 +020099
Derek Jones6d743e22010-03-02 13:22:03 -0600100 include($file_path);
101
102 if ( ! isset($config) OR ! is_array($config))
103 {
104 if ($fail_gracefully === TRUE)
105 {
106 return FALSE;
107 }
108 show_error('Your '.$file_path.' file does not appear to contain a valid configuration array.');
109 }
Barry Mienydd671972010-10-04 16:33:58 +0200110
Derek Jones6d743e22010-03-02 13:22:03 -0600111 if ($use_sections === TRUE)
112 {
113 if (isset($this->config[$file]))
114 {
115 $this->config[$file] = array_merge($this->config[$file], $config);
116 }
117 else
118 {
119 $this->config[$file] = $config;
120 }
121 }
122 else
123 {
124 $this->config = array_merge($this->config, $config);
125 }
Barry Mienydd671972010-10-04 16:33:58 +0200126
Derek Jones6d743e22010-03-02 13:22:03 -0600127 $this->is_loaded[] = $file_path;
128 unset($config);
Barry Mienydd671972010-10-04 16:33:58 +0200129
Derek Jones6d743e22010-03-02 13:22:03 -0600130 $loaded = TRUE;
131 log_message('debug', 'Config file loaded: '.$file_path);
132 }
Barry Mienydd671972010-10-04 16:33:58 +0200133
Derek Jones6d743e22010-03-02 13:22:03 -0600134 if ($loaded === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000135 {
136 if ($fail_gracefully === TRUE)
137 {
138 return FALSE;
139 }
140 show_error('The configuration file '.$file.EXT.' does not exist.');
141 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000142
Derek Allard2067d1a2008-11-13 22:59:24 +0000143 return TRUE;
144 }
Barry Mienydd671972010-10-04 16:33:58 +0200145
Derek Allard2067d1a2008-11-13 22:59:24 +0000146 // --------------------------------------------------------------------
147
148 /**
149 * Fetch a config file item
150 *
151 *
152 * @access public
153 * @param string the config item name
154 * @param string the index name
155 * @param bool
156 * @return string
157 */
158 function item($item, $index = '')
Barry Mienydd671972010-10-04 16:33:58 +0200159 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000160 if ($index == '')
Barry Mienydd671972010-10-04 16:33:58 +0200161 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000162 if ( ! isset($this->config[$item]))
163 {
164 return FALSE;
165 }
166
167 $pref = $this->config[$item];
168 }
169 else
170 {
171 if ( ! isset($this->config[$index]))
172 {
173 return FALSE;
174 }
175
176 if ( ! isset($this->config[$index][$item]))
177 {
178 return FALSE;
179 }
180
181 $pref = $this->config[$index][$item];
182 }
183
184 return $pref;
185 }
Barry Mienydd671972010-10-04 16:33:58 +0200186
187 // --------------------------------------------------------------------
Derek Allard2067d1a2008-11-13 22:59:24 +0000188
189 /**
190 * Fetch a config file item - adds slash after item
191 *
192 * The second parameter allows a slash to be added to the end of
193 * the item, in the case of a path.
194 *
195 * @access public
196 * @param string the config item name
197 * @param bool
198 * @return string
199 */
200 function slash_item($item)
201 {
202 if ( ! isset($this->config[$item]))
203 {
204 return FALSE;
205 }
206
Phil Sturgeon4df8b222010-12-15 14:23:14 +0000207 return rtrim($this->config[$item], '/').'/';
Derek Allard2067d1a2008-11-13 22:59:24 +0000208 }
Barry Mienydd671972010-10-04 16:33:58 +0200209
Derek Allard2067d1a2008-11-13 22:59:24 +0000210 // --------------------------------------------------------------------
211
212 /**
213 * Site URL
214 *
215 * @access public
216 * @param string the URI string
217 * @return string
218 */
219 function site_url($uri = '')
220 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000221 if ($uri == '')
222 {
Phil Sturgeon4df8b222010-12-15 14:23:14 +0000223 return $this->slash_item('base_url').$this->item('index_page');
Derek Jones6d743e22010-03-02 13:22:03 -0600224 }
225
226 if ($this->item('enable_query_strings') == FALSE)
227 {
228 if (is_array($uri))
229 {
230 $uri = implode('/', $uri);
231 }
Barry Mienydd671972010-10-04 16:33:58 +0200232
Derek Jones6d743e22010-03-02 13:22:03 -0600233 $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix');
Barry Mienydd671972010-10-04 16:33:58 +0200234 return $this->slash_item('base_url').$this->slash_item('index_page').trim($uri, '/').$suffix;
Derek Allard2067d1a2008-11-13 22:59:24 +0000235 }
236 else
237 {
Derek Jones6d743e22010-03-02 13:22:03 -0600238 if (is_array($uri))
239 {
240 $i = 0;
241 $str = '';
242 foreach ($uri as $key => $val)
243 {
244 $prefix = ($i == 0) ? '' : '&';
245 $str .= $prefix.$key.'='.$val;
246 $i++;
247 }
248
249 $uri = $str;
250 }
251
Phil Sturgeon4df8b222010-12-15 14:23:14 +0000252 return $this->slash_item('base_url').$this->item('index_page').'?'.$uri;
Derek Allard2067d1a2008-11-13 22:59:24 +0000253 }
254 }
Barry Mienydd671972010-10-04 16:33:58 +0200255
Derek Allard2067d1a2008-11-13 22:59:24 +0000256 // --------------------------------------------------------------------
257
258 /**
259 * System URL
260 *
261 * @access public
262 * @return string
263 */
264 function system_url()
265 {
266 $x = explode("/", preg_replace("|/*(.+?)/*$|", "\\1", BASEPATH));
267 return $this->slash_item('base_url').end($x).'/';
268 }
Barry Mienydd671972010-10-04 16:33:58 +0200269
Derek Allard2067d1a2008-11-13 22:59:24 +0000270 // --------------------------------------------------------------------
271
272 /**
273 * Set a config file item
274 *
275 * @access public
276 * @param string the config item key
277 * @param string the config item value
278 * @return void
279 */
280 function set_item($item, $value)
281 {
282 $this->config[$item] = $value;
283 }
Barry Mienydd671972010-10-04 16:33:58 +0200284
Derek Jones6d743e22010-03-02 13:22:03 -0600285 // --------------------------------------------------------------------
Derek Allard2067d1a2008-11-13 22:59:24 +0000286
Derek Jones6d743e22010-03-02 13:22:03 -0600287 /**
288 * Assign to Config
289 *
290 * This function is called by the front controller (CodeIgniter.php)
291 * after the Config class is instantiated. It permits config items
292 * to be assigned or overriden by variables contained in the index.php file
293 *
294 * @access private
295 * @param array
296 * @return void
Barry Mienydd671972010-10-04 16:33:58 +0200297 */
Derek Jones6d743e22010-03-02 13:22:03 -0600298 function _assign_to_config($items = array())
299 {
300 if (is_array($items))
301 {
302 foreach ($items as $key => $val)
303 {
304 $this->set_item($key, $val);
305 }
Barry Mienydd671972010-10-04 16:33:58 +0200306 }
Derek Jones6d743e22010-03-02 13:22:03 -0600307 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000308}
309
310// END CI_Config class
311
312/* End of file Config.php */
Derek Jonesc68dfbf2010-03-02 12:59:23 -0600313/* Location: ./system/core/Config.php */