blob: 55506a1f6c837bd3ef73193dda653df2d6d4f3f1 [file] [log] [blame]
Pascal Kriete69c97a72011-04-20 21:44:54 -04001<?php
2
3// Set up the global CI functions in their most minimal core representation
4
Taufan Adityab2e10b72012-05-27 15:31:53 +07005if ( ! function_exists('get_instance'))
Pascal Kriete69c97a72011-04-20 21:44:54 -04006{
Andrey Andreevf243ce12012-06-09 23:34:21 +03007 function &get_instance()
Taufan Adityab2e10b72012-05-27 15:31:53 +07008 {
9 $test = CI_TestCase::instance();
Andrey Andreevf243ce12012-06-09 23:34:21 +030010 return $test->ci_instance();
Taufan Adityab2e10b72012-05-27 15:31:53 +070011 }
Pascal Kriete69c97a72011-04-20 21:44:54 -040012}
13
Pascal Kriete69c97a72011-04-20 21:44:54 -040014// --------------------------------------------------------------------
15
Taufan Adityab2e10b72012-05-27 15:31:53 +070016if ( ! function_exists('get_config'))
17{
Andrey Andreevf243ce12012-06-09 23:34:21 +030018 function &get_config()
19 {
Taufan Adityab2e10b72012-05-27 15:31:53 +070020 $test = CI_TestCase::instance();
Andrey Andreev62fd52d2012-06-10 07:11:41 +030021 $config = $test->ci_get_config();
22 return $config;
Taufan Adityab2e10b72012-05-27 15:31:53 +070023 }
24}
25
26if ( ! function_exists('config_item'))
27{
28 function config_item($item)
29 {
30 $config =& get_config();
Andrey Andreevf243ce12012-06-09 23:34:21 +030031
Taufan Adityab2e10b72012-05-27 15:31:53 +070032 if ( ! isset($config[$item]))
33 {
34 return FALSE;
35 }
Andrey Andreevf243ce12012-06-09 23:34:21 +030036
Taufan Adityab2e10b72012-05-27 15:31:53 +070037 return $config[$item];
Pascal Kriete88b29632011-04-21 01:21:55 -040038 }
Pascal Kriete69c97a72011-04-20 21:44:54 -040039}
40
41// --------------------------------------------------------------------
42
Taufan Adityab2e10b72012-05-27 15:31:53 +070043if ( ! function_exists('load_class'))
Pascal Kriete69c97a72011-04-20 21:44:54 -040044{
Taufan Adityab2e10b72012-05-27 15:31:53 +070045 function load_class($class, $directory = 'libraries', $prefix = 'CI_')
Pascal Kriete69c97a72011-04-20 21:44:54 -040046 {
Alex Bilbied6d11502012-06-02 11:12:55 +010047 if ($directory !== 'core' OR $prefix !== 'CI_')
Taufan Adityab2e10b72012-05-27 15:31:53 +070048 {
49 throw new Exception('Not Implemented: Non-core load_class()');
50 }
Andrey Andreevf243ce12012-06-09 23:34:21 +030051
Taufan Adityab2e10b72012-05-27 15:31:53 +070052 $test = CI_TestCase::instance();
Andrey Andreevf243ce12012-06-09 23:34:21 +030053
Taufan Adityab2e10b72012-05-27 15:31:53 +070054 $obj =& $test->ci_core_class($class);
Andrey Andreevf243ce12012-06-09 23:34:21 +030055
Taufan Adityab2e10b72012-05-27 15:31:53 +070056 if (is_string($obj))
57 {
Andrey Andreevf243ce12012-06-09 23:34:21 +030058 throw new Exception('Bad Isolation: Use ci_set_core_class to set '.$class);
Taufan Adityab2e10b72012-05-27 15:31:53 +070059 }
Andrey Andreevf243ce12012-06-09 23:34:21 +030060
Taufan Adityab2e10b72012-05-27 15:31:53 +070061 return $obj;
Pascal Kriete69c97a72011-04-20 21:44:54 -040062 }
Pascal Kriete69c97a72011-04-20 21:44:54 -040063}
64
65// This is sort of meh. Should probably be mocked up with
66// controllable output, so that we can test some of our
67// security code. The function itself will be tested in the
68// bootstrap testsuite.
69// --------------------------------------------------------------------
70
Taufan Adityab2e10b72012-05-27 15:31:53 +070071if ( ! function_exists('remove_invisible_characters'))
Pascal Kriete69c97a72011-04-20 21:44:54 -040072{
Taufan Adityab2e10b72012-05-27 15:31:53 +070073 function remove_invisible_characters($str, $url_encoded = TRUE)
Pascal Kriete69c97a72011-04-20 21:44:54 -040074 {
Taufan Adityab2e10b72012-05-27 15:31:53 +070075 $non_displayables = array();
Andrey Andreevf243ce12012-06-09 23:34:21 +030076
Taufan Adityab2e10b72012-05-27 15:31:53 +070077 // every control character except newline (dec 10)
78 // carriage return (dec 13), and horizontal tab (dec 09)
Andrey Andreevf243ce12012-06-09 23:34:21 +030079
Taufan Adityab2e10b72012-05-27 15:31:53 +070080 if ($url_encoded)
81 {
82 $non_displayables[] = '/%0[0-8bcef]/'; // url encoded 00-08, 11, 12, 14, 15
83 $non_displayables[] = '/%1[0-9a-f]/'; // url encoded 16-31
84 }
Andrey Andreevf243ce12012-06-09 23:34:21 +030085
Taufan Adityab2e10b72012-05-27 15:31:53 +070086 $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; // 00-08, 11, 12, 14-31, 127
Pascal Kriete69c97a72011-04-20 21:44:54 -040087
Taufan Adityab2e10b72012-05-27 15:31:53 +070088 do
89 {
90 $str = preg_replace($non_displayables, '', $str, -1, $count);
91 }
92 while ($count);
Pascal Kriete69c97a72011-04-20 21:44:54 -040093
Taufan Adityab2e10b72012-05-27 15:31:53 +070094 return $str;
95 }
Pascal Kriete69c97a72011-04-20 21:44:54 -040096}
97
98
99// Clean up error messages
100// --------------------------------------------------------------------
101
Taufan Adityab2e10b72012-05-27 15:31:53 +0700102if ( ! function_exists('show_error'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400103{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700104 function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered')
105 {
106 throw new RuntimeException('CI Error: '.$message);
107 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400108}
109
Taufan Adityab2e10b72012-05-27 15:31:53 +0700110if ( ! function_exists('show_404'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400111{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700112 function show_404($page = '', $log_error = TRUE)
113 {
114 throw new RuntimeException('CI Error: 404');
115 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400116}
117
Taufan Adityab2e10b72012-05-27 15:31:53 +0700118if ( ! function_exists('_exception_handler'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400119{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700120 function _exception_handler($severity, $message, $filepath, $line)
121 {
122 throw new RuntimeException('CI Exception: '.$message.' | '.$filepath.' | '.$line);
123 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400124}
125
126
127// We assume a few things about our environment ...
128// --------------------------------------------------------------------
129
Taufan Adityab2e10b72012-05-27 15:31:53 +0700130if ( ! function_exists('is_php'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400131{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700132 function is_php($version = '5.0.0')
133 {
134 return ! (version_compare(PHP_VERSION, $version) < 0);
135 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400136}
137
Taufan Adityab2e10b72012-05-27 15:31:53 +0700138if ( ! function_exists('is_really_writable'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400139{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700140 function is_really_writable($file)
141 {
142 return is_writable($file);
143 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400144}
145
Taufan Adityab2e10b72012-05-27 15:31:53 +0700146if ( ! function_exists('is_loaded'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400147{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700148 function is_loaded()
149 {
150 throw new Exception('Bad Isolation: mock up environment');
151 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400152}
153
Taufan Adityab2e10b72012-05-27 15:31:53 +0700154if ( ! function_exists('log_message'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400155{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700156 function log_message($level = 'error', $message, $php_error = FALSE)
157 {
158 return TRUE;
159 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400160}
161
Taufan Adityab2e10b72012-05-27 15:31:53 +0700162if ( ! function_exists('set_status_header'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400163{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700164 function set_status_header($code = 200, $text = '')
165 {
166 return TRUE;
167 }
Andrey Andreevf243ce12012-06-09 23:34:21 +0300168}