1 | <?php |
||
2 | |||
3 | /** |
||
4 | * Define the YOURLS config |
||
5 | */ |
||
6 | |||
7 | namespace YOURLS\Config; |
||
8 | |||
9 | use YOURLS\Exceptions\ConfigException; |
||
10 | |||
11 | class Config { |
||
12 | |||
13 | /** |
||
14 | * @param string |
||
15 | */ |
||
16 | protected $root; |
||
17 | |||
18 | /** |
||
19 | * @param mixed |
||
20 | */ |
||
21 | protected $config; |
||
22 | |||
23 | /** |
||
24 | * @since 1.7.3 |
||
25 | * @param mixed $config Optional user defined config path |
||
26 | */ |
||
27 | 3 | public function __construct($config = false) { |
|
28 | 3 | $this->set_root( $this->fix_win32_path( dirname( dirname( __DIR__ ) ) ) ); |
|
29 | 3 | $this->set_config($config); |
|
30 | 3 | } |
|
31 | |||
32 | /** |
||
33 | * Convert antislashes to slashes |
||
34 | * |
||
35 | * @since 1.7.3 |
||
36 | * @param string $path |
||
37 | * @return string path with \ converted to / |
||
38 | */ |
||
39 | 3 | public function fix_win32_path($path) { |
|
40 | 3 | return str_replace('\\', '/', $path); |
|
41 | } |
||
42 | |||
43 | /** |
||
44 | * @since 1.7.3 |
||
45 | * @param string path to config file |
||
46 | * @return void |
||
47 | */ |
||
48 | 3 | public function set_config($config) { |
|
49 | 3 | $this->config = $config; |
|
50 | 3 | } |
|
51 | |||
52 | /** |
||
53 | * @since 1.7.3 |
||
54 | * @param string path to YOURLS root directory |
||
55 | * @return void |
||
56 | */ |
||
57 | 3 | public function set_root($root) { |
|
58 | 3 | $this->root = $root; |
|
59 | 3 | } |
|
60 | |||
61 | /** |
||
62 | * Find config.php, either user defined or from standard location |
||
63 | * |
||
64 | * @since 1.7.3 |
||
65 | * @return string path to found config file |
||
66 | * @throws ConfigException |
||
67 | */ |
||
68 | 3 | public function find_config() { |
|
69 | |||
70 | 3 | $config = $this->fix_win32_path($this->config); |
|
71 | |||
72 | 3 | if (!empty($config) && is_readable($config)) { |
|
73 | 1 | return $config; |
|
74 | } |
||
75 | |||
76 | 2 | if (!empty($config) && !is_readable($config)) { |
|
77 | 1 | throw new ConfigException("User defined config not found at '$config'"); |
|
78 | } |
||
79 | |||
80 | // config.php in /user/ |
||
81 | 1 | if (file_exists($this->root . '/user/config.php')) { |
|
82 | return $this->root . '/user/config.php'; |
||
83 | } |
||
84 | |||
85 | // config.php in /includes/ |
||
86 | 1 | if (file_exists($this->root . '/includes/config.php')) { |
|
87 | return $this->root . '/includes/config.php'; |
||
88 | } |
||
89 | |||
90 | // config.php not found :( |
||
91 | |||
92 | 1 | throw new ConfigException('Cannot find config.php. Please read the readme.html to learn how to install YOURLS'); |
|
93 | } |
||
94 | |||
95 | /** |
||
96 | * Define core constants that have not been user defined in config.php |
||
97 | * |
||
98 | * @since 1.7.3 |
||
99 | * @return void |
||
100 | * @throws ConfigException |
||
101 | */ |
||
102 | 1 | public function define_core_constants() { |
|
103 | // Check minimal config job has been properly done |
||
104 | 1 | $must_haves = array('YOURLS_DB_USER', 'YOURLS_DB_PASS', 'YOURLS_DB_NAME', 'YOURLS_DB_HOST', 'YOURLS_DB_PREFIX', 'YOURLS_SITE'); |
|
105 | 1 | foreach($must_haves as $must_have) { |
|
106 | 1 | if (!defined($must_have)) { |
|
107 | throw new ConfigException('Config is incomplete (missing at least '.$must_have.') Check config-sample.php and edit your config accordingly'); |
||
108 | } |
||
109 | } |
||
110 | |||
111 | /** |
||
112 | * The following has an awful CRAP index and it would be much shorter reduced to something like |
||
113 | * defining an array of ('YOURLS_SOMETHING' => 'default value') and then a simple loop over the |
||
114 | * array, checking if $current is defined as a constant and otherwise define said constant with |
||
115 | * its default value. I did not wrote it that way because that would make it difficult for code |
||
116 | * parsers to identify which constants are defined and where. So, here it is, that long list of |
||
117 | * if (!defined) define(). Ho and by the way, such beautiful comment, much right aligned, wow ! |
||
118 | */ |
||
119 | |||
120 | // physical path of YOURLS root |
||
121 | 1 | if (!defined( 'YOURLS_ABSPATH' )) |
|
122 | define('YOURLS_ABSPATH', $this->root); |
||
123 | |||
124 | // physical path of includes directory |
||
125 | 1 | if (!defined( 'YOURLS_INC' )) |
|
126 | define('YOURLS_INC', YOURLS_ABSPATH.'/includes'); |
||
127 | |||
128 | // physical path of user directory |
||
129 | 1 | if (!defined( 'YOURLS_USERDIR' )) |
|
130 | define( 'YOURLS_USERDIR', YOURLS_ABSPATH.'/user' ); |
||
131 | |||
132 | // URL of user directory |
||
133 | 1 | if (!defined( 'YOURLS_USERURL' )) |
|
134 | define( 'YOURLS_USERURL', trim(YOURLS_SITE, '/').'/user' ); |
||
135 | |||
136 | // physical path of asset directory |
||
137 | 1 | if( !defined( 'YOURLS_ASSETDIR' ) ) |
|
138 | define( 'YOURLS_ASSETDIR', YOURLS_ABSPATH.'/assets' ); |
||
139 | |||
140 | // URL of asset directory |
||
141 | 1 | if( !defined( 'YOURLS_ASSETURL' ) ) |
|
142 | define( 'YOURLS_ASSETURL', trim(YOURLS_SITE, '/').'/assets' ); |
||
143 | |||
144 | // physical path of translations directory |
||
145 | 1 | if (!defined( 'YOURLS_LANG_DIR' )) |
|
146 | define( 'YOURLS_LANG_DIR', YOURLS_USERDIR.'/languages' ); |
||
147 | |||
148 | // physical path of plugins directory |
||
149 | 1 | if (!defined( 'YOURLS_PLUGINDIR' )) |
|
150 | define( 'YOURLS_PLUGINDIR', YOURLS_USERDIR.'/plugins' ); |
||
151 | |||
152 | // URL of plugins directory |
||
153 | 1 | if (!defined( 'YOURLS_PLUGINURL' )) |
|
154 | define( 'YOURLS_PLUGINURL', YOURLS_USERURL.'/plugins' ); |
||
155 | |||
156 | // physical path of themes directory |
||
157 | 1 | if( !defined( 'YOURLS_THEMEDIR' ) ) |
|
158 | define( 'YOURLS_THEMEDIR', YOURLS_USERDIR.'/themes' ); |
||
159 | |||
160 | // URL of themes directory |
||
161 | 1 | if( !defined( 'YOURLS_THEMEURL' ) ) |
|
162 | define( 'YOURLS_THEMEURL', YOURLS_USERURL.'/themes' ); |
||
163 | |||
164 | // physical path of pages directory |
||
165 | 1 | if (!defined( 'YOURLS_PAGEDIR' )) |
|
166 | define('YOURLS_PAGEDIR', YOURLS_USERDIR.'/pages' ); |
||
167 | |||
168 | // table to store URLs |
||
169 | 1 | if (!defined( 'YOURLS_DB_TABLE_URL' )) |
|
170 | define( 'YOURLS_DB_TABLE_URL', YOURLS_DB_PREFIX.'url' ); |
||
171 | |||
172 | // table to store options |
||
173 | 1 | if (!defined( 'YOURLS_DB_TABLE_OPTIONS' )) |
|
174 | define( 'YOURLS_DB_TABLE_OPTIONS', YOURLS_DB_PREFIX.'options' ); |
||
175 | |||
176 | // table to store hits, for stats |
||
177 | 1 | if (!defined( 'YOURLS_DB_TABLE_LOG' )) |
|
178 | define( 'YOURLS_DB_TABLE_LOG', YOURLS_DB_PREFIX.'log' ); |
||
179 | |||
180 | // minimum delay in sec before a same IP can add another URL. Note: logged in users are not throttled down. |
||
181 | 1 | if (!defined( 'YOURLS_FLOOD_DELAY_SECONDS' )) |
|
182 | define( 'YOURLS_FLOOD_DELAY_SECONDS', 15 ); |
||
183 | |||
184 | // comma separated list of IPs that can bypass flood check. |
||
185 | 1 | if (!defined( 'YOURLS_FLOOD_IP_WHITELIST' )) |
|
186 | define( 'YOURLS_FLOOD_IP_WHITELIST', '' ); |
||
187 | |||
188 | // life span of an auth cookie in seconds (60*60*24*7 = 7 days) |
||
189 | 1 | if (!defined( 'YOURLS_COOKIE_LIFE' )) |
|
190 | define( 'YOURLS_COOKIE_LIFE', 60*60*24*7 ); |
||
191 | |||
192 | // life span of a nonce in seconds |
||
193 | 1 | if (!defined( 'YOURLS_NONCE_LIFE' )) |
|
194 | define( 'YOURLS_NONCE_LIFE', 43200 ); // 3600 * 12 |
||
195 | |||
196 | // if set to true, disable stat logging (no use for it, too busy servers, ...) |
||
197 | 1 | if (!defined( 'YOURLS_NOSTATS' )) |
|
198 | define( 'YOURLS_NOSTATS', false ); |
||
199 | |||
200 | // if set to true, force https:// in the admin area |
||
201 | 1 | if (!defined( 'YOURLS_ADMIN_SSL' )) |
|
202 | define( 'YOURLS_ADMIN_SSL', false ); |
||
203 | |||
204 | // if set to true, verbose debug infos. Will break things. Don't enable. |
||
205 | 1 | if (!defined( 'YOURLS_DEBUG' )) |
|
206 | define( 'YOURLS_DEBUG', false ); |
||
207 | |||
208 | // Error reporting |
||
209 | 1 | if (defined( 'YOURLS_DEBUG' ) && YOURLS_DEBUG == true ) { |
|
0 ignored issues
–
show
introduced
by
Loading history...
|
|||
210 | 1 | error_reporting( -1 ); |
|
211 | } else { |
||
212 | error_reporting( E_ERROR | E_PARSE ); |
||
213 | } |
||
214 | 1 | } |
|
215 | |||
216 | } |
||
217 |