Remove file execution permission.
[living-lab-site.git] / system / core / Config.php
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         var $config = array();
32         var $is_loaded = array();
33         var $_config_paths = array(APPPATH);
34
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          */
46         function __construct()
47         {
48                 $this->config =& get_config();
49                 log_message('debug', "Config Class Initialized");
50
51                 // Set the base_url automatically if none was provided
52                 if ($this->config['base_url'] == '')
53                 {
54                         if (isset($_SERVER['HTTP_HOST']))
55                         {
56                                 $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
57                                 $base_url .= '://'. $_SERVER['HTTP_HOST'];
58                                 $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
59                         }
60
61                         else
62                         {
63                                 $base_url = 'http://localhost/';
64                         }
65
66                         $this->set_item('base_url', $base_url);
67                 }
68         }
69
70         // --------------------------------------------------------------------
71
72         /**
73          * Load Config File
74          *
75          * @access      public
76          * @param       string  the config file name
77          * @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
79          * @return      boolean if the file was loaded correctly
80          */
81         function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
82         {
83                 $file = ($file == '') ? 'config' : str_replace(EXT, '', $file);
84                 $found = FALSE;
85                 $loaded = FALSE;
86
87                 foreach ($this->_config_paths as $path)
88                 {
89                         $check_locations = defined('ENVIRONMENT')
90                                 ? array(ENVIRONMENT.'/'.$file, $file)
91                                 : array($file);
92
93                         foreach ($check_locations as $location)
94                         {
95                                 $file_path = $path.'config/'.$location.EXT;
96
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                         {
112                                 continue;
113                         }
114
115                         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                         }
125
126                         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                         }
141
142                         $this->is_loaded[] = $file_path;
143                         unset($config);
144
145                         $loaded = TRUE;
146                         log_message('debug', 'Config file loaded: '.$file_path);
147                 }
148
149                 if ($loaded === FALSE)
150                 {
151                         if ($fail_gracefully === TRUE)
152                         {
153                                 return FALSE;
154                         }
155                         show_error('The configuration file '.$file.EXT.' does not exist.');
156                 }
157
158                 return TRUE;
159         }
160
161         // --------------------------------------------------------------------
162
163         /**
164          * Fetch a config file item
165          *
166          *
167          * @access      public
168          * @param       string  the config item name
169          * @param       string  the index name
170          * @param       bool
171          * @return      string
172          */
173         function item($item, $index = '')
174         {
175                 if ($index == '')
176                 {
177                         if ( ! isset($this->config[$item]))
178                         {
179                                 return FALSE;
180                         }
181
182                         $pref = $this->config[$item];
183                 }
184                 else
185                 {
186                         if ( ! isset($this->config[$index]))
187                         {
188                                 return FALSE;
189                         }
190
191                         if ( ! isset($this->config[$index][$item]))
192                         {
193                                 return FALSE;
194                         }
195
196                         $pref = $this->config[$index][$item];
197                 }
198
199                 return $pref;
200         }
201
202         // --------------------------------------------------------------------
203
204         /**
205          * Fetch a config file item - adds slash after item
206          *
207          * The second parameter allows a slash to be added to the end of
208          * the item, in the case of a path.
209          *
210          * @access      public
211          * @param       string  the config item name
212          * @param       bool
213          * @return      string
214          */
215         function slash_item($item)
216         {
217                 if ( ! isset($this->config[$item]))
218                 {
219                         return FALSE;
220                 }
221
222                 return rtrim($this->config[$item], '/').'/';
223         }
224
225         // --------------------------------------------------------------------
226
227         /**
228          * Site URL
229          *
230          * @access      public
231          * @param       string  the URI string
232          * @return      string
233          */
234         function site_url($uri = '')
235         {
236                 if ($uri == '')
237                 {
238                         return $this->slash_item('base_url').$this->item('index_page');
239                 }
240
241                 if ($this->item('enable_query_strings') == FALSE)
242                 {
243                         if (is_array($uri))
244                         {
245                                 $uri = implode('/', $uri);
246                         }
247
248                         $index = $this->item('index_page') == '' ? '' : $this->slash_item('index_page');
249                         $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix');
250                         return $this->slash_item('base_url').$index.trim($uri, '/').$suffix;
251                 }
252                 else
253                 {
254                         if (is_array($uri))
255                         {
256                                 $i = 0;
257                                 $str = '';
258                                 foreach ($uri as $key => $val)
259                                 {
260                                         $prefix = ($i == 0) ? '' : '&';
261                                         $str .= $prefix.$key.'='.$val;
262                                         $i++;
263                                 }
264
265                                 $uri = $str;
266                         }
267
268                         return $this->slash_item('base_url').$this->item('index_page').'?'.$uri;
269                 }
270         }
271
272         // --------------------------------------------------------------------
273
274         /**
275          * System URL
276          *
277          * @access      public
278          * @return      string
279          */
280         function system_url()
281         {
282                 $x = explode("/", preg_replace("|/*(.+?)/*$|", "\\1", BASEPATH));
283                 return $this->slash_item('base_url').end($x).'/';
284         }
285
286         // --------------------------------------------------------------------
287
288         /**
289          * Set a config file item
290          *
291          * @access      public
292          * @param       string  the config item key
293          * @param       string  the config item value
294          * @return      void
295          */
296         function set_item($item, $value)
297         {
298                 $this->config[$item] = $value;
299         }
300
301         // --------------------------------------------------------------------
302
303         /**
304          * Assign to Config
305          *
306          * This function is called by the front controller (CodeIgniter.php)
307          * after the Config class is instantiated.  It permits config items
308          * to be assigned or overriden by variables contained in the index.php file
309          *
310          * @access      private
311          * @param       array
312          * @return      void
313          */
314         function _assign_to_config($items = array())
315         {
316                 if (is_array($items))
317                 {
318                         foreach ($items as $key => $val)
319                         {
320                                 $this->set_item($key, $val);
321                         }
322                 }
323         }
324 }
325
326 // END CI_Config class
327
328 /* End of file Config.php */
329 /* Location: ./system/core/Config.php */