blob: 8466e47f80cdb729b728bfcc79bac630bbc0f337 [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 Andreevf243ce12012-06-09 23:34:21 +030021 return $test->ci_get_config();
Taufan Adityab2e10b72012-05-27 15:31:53 +070022 }
23}
24
25if ( ! function_exists('config_item'))
26{
27 function config_item($item)
28 {
29 $config =& get_config();
Andrey Andreevf243ce12012-06-09 23:34:21 +030030
Taufan Adityab2e10b72012-05-27 15:31:53 +070031 if ( ! isset($config[$item]))
32 {
33 return FALSE;
34 }
Andrey Andreevf243ce12012-06-09 23:34:21 +030035
Taufan Adityab2e10b72012-05-27 15:31:53 +070036 return $config[$item];
Pascal Kriete88b29632011-04-21 01:21:55 -040037 }
Pascal Kriete69c97a72011-04-20 21:44:54 -040038}
39
40// --------------------------------------------------------------------
41
Taufan Adityab2e10b72012-05-27 15:31:53 +070042if ( ! function_exists('load_class'))
Pascal Kriete69c97a72011-04-20 21:44:54 -040043{
Taufan Adityab2e10b72012-05-27 15:31:53 +070044 function load_class($class, $directory = 'libraries', $prefix = 'CI_')
Pascal Kriete69c97a72011-04-20 21:44:54 -040045 {
Alex Bilbied6d11502012-06-02 11:12:55 +010046 if ($directory !== 'core' OR $prefix !== 'CI_')
Taufan Adityab2e10b72012-05-27 15:31:53 +070047 {
48 throw new Exception('Not Implemented: Non-core load_class()');
49 }
Andrey Andreevf243ce12012-06-09 23:34:21 +030050
Taufan Adityab2e10b72012-05-27 15:31:53 +070051 $test = CI_TestCase::instance();
Andrey Andreevf243ce12012-06-09 23:34:21 +030052
Taufan Adityab2e10b72012-05-27 15:31:53 +070053 $obj =& $test->ci_core_class($class);
Andrey Andreevf243ce12012-06-09 23:34:21 +030054
Taufan Adityab2e10b72012-05-27 15:31:53 +070055 if (is_string($obj))
56 {
Andrey Andreevf243ce12012-06-09 23:34:21 +030057 throw new Exception('Bad Isolation: Use ci_set_core_class to set '.$class);
Taufan Adityab2e10b72012-05-27 15:31:53 +070058 }
Andrey Andreevf243ce12012-06-09 23:34:21 +030059
Taufan Adityab2e10b72012-05-27 15:31:53 +070060 return $obj;
Pascal Kriete69c97a72011-04-20 21:44:54 -040061 }
Pascal Kriete69c97a72011-04-20 21:44:54 -040062}
63
64// This is sort of meh. Should probably be mocked up with
65// controllable output, so that we can test some of our
66// security code. The function itself will be tested in the
67// bootstrap testsuite.
68// --------------------------------------------------------------------
69
Taufan Adityab2e10b72012-05-27 15:31:53 +070070if ( ! function_exists('remove_invisible_characters'))
Pascal Kriete69c97a72011-04-20 21:44:54 -040071{
Taufan Adityab2e10b72012-05-27 15:31:53 +070072 function remove_invisible_characters($str, $url_encoded = TRUE)
Pascal Kriete69c97a72011-04-20 21:44:54 -040073 {
Taufan Adityab2e10b72012-05-27 15:31:53 +070074 $non_displayables = array();
Andrey Andreevf243ce12012-06-09 23:34:21 +030075
Taufan Adityab2e10b72012-05-27 15:31:53 +070076 // every control character except newline (dec 10)
77 // carriage return (dec 13), and horizontal tab (dec 09)
Andrey Andreevf243ce12012-06-09 23:34:21 +030078
Taufan Adityab2e10b72012-05-27 15:31:53 +070079 if ($url_encoded)
80 {
81 $non_displayables[] = '/%0[0-8bcef]/'; // url encoded 00-08, 11, 12, 14, 15
82 $non_displayables[] = '/%1[0-9a-f]/'; // url encoded 16-31
83 }
Andrey Andreevf243ce12012-06-09 23:34:21 +030084
Taufan Adityab2e10b72012-05-27 15:31:53 +070085 $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; // 00-08, 11, 12, 14-31, 127
Pascal Kriete69c97a72011-04-20 21:44:54 -040086
Taufan Adityab2e10b72012-05-27 15:31:53 +070087 do
88 {
89 $str = preg_replace($non_displayables, '', $str, -1, $count);
90 }
91 while ($count);
Pascal Kriete69c97a72011-04-20 21:44:54 -040092
Taufan Adityab2e10b72012-05-27 15:31:53 +070093 return $str;
94 }
Pascal Kriete69c97a72011-04-20 21:44:54 -040095}
96
97
98// Clean up error messages
99// --------------------------------------------------------------------
100
Taufan Adityab2e10b72012-05-27 15:31:53 +0700101if ( ! function_exists('show_error'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400102{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700103 function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered')
104 {
105 throw new RuntimeException('CI Error: '.$message);
106 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400107}
108
Taufan Adityab2e10b72012-05-27 15:31:53 +0700109if ( ! function_exists('show_404'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400110{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700111 function show_404($page = '', $log_error = TRUE)
112 {
113 throw new RuntimeException('CI Error: 404');
114 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400115}
116
Taufan Adityab2e10b72012-05-27 15:31:53 +0700117if ( ! function_exists('_exception_handler'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400118{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700119 function _exception_handler($severity, $message, $filepath, $line)
120 {
121 throw new RuntimeException('CI Exception: '.$message.' | '.$filepath.' | '.$line);
122 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400123}
124
125
126// We assume a few things about our environment ...
127// --------------------------------------------------------------------
128
Taufan Adityab2e10b72012-05-27 15:31:53 +0700129if ( ! function_exists('is_php'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400130{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700131 function is_php($version = '5.0.0')
132 {
133 return ! (version_compare(PHP_VERSION, $version) < 0);
134 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400135}
136
Taufan Adityab2e10b72012-05-27 15:31:53 +0700137if ( ! function_exists('is_really_writable'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400138{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700139 function is_really_writable($file)
140 {
141 return is_writable($file);
142 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400143}
144
Taufan Adityab2e10b72012-05-27 15:31:53 +0700145if ( ! function_exists('is_loaded'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400146{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700147 function is_loaded()
148 {
149 throw new Exception('Bad Isolation: mock up environment');
150 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400151}
152
Taufan Adityab2e10b72012-05-27 15:31:53 +0700153if ( ! function_exists('log_message'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400154{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700155 function log_message($level = 'error', $message, $php_error = FALSE)
156 {
157 return TRUE;
158 }
Pascal Kriete69c97a72011-04-20 21:44:54 -0400159}
160
Taufan Adityab2e10b72012-05-27 15:31:53 +0700161if ( ! function_exists('set_status_header'))
Pascal Kriete69c97a72011-04-20 21:44:54 -0400162{
Taufan Adityab2e10b72012-05-27 15:31:53 +0700163 function set_status_header($code = 200, $text = '')
164 {
165 return TRUE;
166 }
Andrey Andreevf243ce12012-06-09 23:34:21 +0300167}